简介

  PC/SC规范由微软公司与世界其它著名的智能卡厂商组成的PC/SC工作组提出的。PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,虽然到目前为止,WONDOWS是唯一支持PC/SC标准的操作系统平台,但由于WINDOWS的影响力,PC/SC规范也为智能卡业界所接收。到目前为止,PC/SC规范的最新版本是PC/SC Specifications 1.0。
  PC/SC规范建立在工业标准-ISO7816和EMV标准的基础上,但它对底层的设备接口和独立于设备的应用API接口(例如用来允许多个应用共享使用系统同一张智能卡的资源管理器)做了更详尽的补充。它的提出主要是为了达到以下目标:
遵从现在ICC和PC的标准并在适当的地方予在扩充
跨平台的可操作性,使该规范可在多种硬件和软件平台上实现
应用程序可以采用不同厂商提供的产品(独立于厂商)
建立应用级的智能卡服务接口,推广ICC在PC上的应用,并促成PC采用ICC作主标准设备。
 
PC/SC体系的主要组成

PC/SC体系由三个主要部件组成,分别规定的操作系统厂商、读写器(IFD)厂商、智能卡(ICC)厂商的职责。

体系主要组成

i. IFD

(即读写器)控制器是由IFD厂商提供的可安装部件。
ii. Resource manager(资源管理器)使用Win32API函数实现,是由操作系统厂商提供的系统级部件。
iii. Service Providers(服务提供者),服务程序是由厂商提供的可安装部件,用于提供访问特殊服务的手段,其使用的是基本COM的界面方式。
 
CRW系列IC读卡器PC/SC驱程序的安装

支持PC/SC规范的CRW系列IC读卡器包装盒有一个PC/SC驱动程序安装软盘。运行安装程序SETUP.EXE
驱动程序会自动安装到系统中,就可以按PC/SC规范使用CRW系列读卡器。

4PC/SC的API函数使用方法及示例

PC/SC的API函数由操作系统提供,在微软公司提供的MSDN(2000年10月版)有相关帮助(路径\\MSDN\Platform SDK\Security\Smart Card),函数声明在Winscard.h中,所用的库是Scarddlg.lib,这里只是摘录其中一个来说明:ScardConnect。
ScardConnect函数用来建立应用程序与插在读卡器中的智能卡的连接。如果在指定的读卡器中没有卡片,则返回一个错误。
LONG ScardConnect(IN SCARDCONTEXT hContext, IN LPCTSTR szReader, IN DWORD dwShareMode, IN DWORD dwPreferredProtocols, OUT LPSCARDHANDLE phCard, OUT LPDWORD pdwActiveProtocol);
参数:hContext:标识资源管理器环境的句柄,这个资源管理器环境是预先调用SCardEstablishContext来设置的。
SzReader:与目标卡相连的读卡器名字
DwShareMode:用来标识其它应用程序是否与该卡相连的标志。可以取以下值
取值 含义
SCARD_SHARE_SHARED 本应用程序将与其它应用程序共享这张卡
SCARD_SHARE_EXCLUSIVE 本应用程序将不会与其它应用程序共享这张卡
SCARD_SHARE_DIRECT 本应用程序指定读卡器为私有,并直接控制卡片,其它应用程序不能访问它
DwPreferredProtocols:连接时,所能接收的协议位标志。可以取以下值,也可以进行OR操作
取值 含义
SCARD_PROTOCOL_TO T=0 是可能接收的协议
SCARD_PROTOCOL_T1 T=1 是可能接收的协议
0 该参数只有当dwShareMode设置为SCARD_SHARE_DIRECT时,才可能为零。因此,由驱动来完成无协议的通讯直到ScardControl发送控制指示
IOCTL_SMARTCARD_SET_PROTOCOL
PhCard:返回一个句柄,标识智能卡与指写读卡器的连接
PdwActiveProtocol:返回一个标识,标识确定有效的协议,可以取以下值
取值 含义
SCARD_PROTOCOL_TO T=0 是有效的协议
SCARD_PROTOCOL_T1 T=1 是有效的协议
SCARD_PROTOCOL_UNDEFINED 已经指定为SCARD_SHARE_DIRECT

PC/SC的更多相关文章

  1. 常用的PC/SC接口函数

    PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,PC/SC规范建立在工业标准 ...

  2. USB CCID协议和PC/SC标准

    CCID是USB Chip/Smart Card Interface Devices,也就是USB芯片智能卡接口设备,是USB规范下的一种设备类型.就像HID设备一样,需要参考USB规范来写固件程序来 ...

  3. PC/SC双界面读写器开发指南

    友我科技PCSC双界面读写器YW-606开发指南 1.建立资源管理器的上下文 函数ScardEstablishContext()用于建立将在其中进行设备数据库操作的资源管理器上下文(范围). 函数原型 ...

  4. 关闭CENTOS不必要的默认服务

    CentOS关闭服务的方法: 图形界面,运行ntsysv chkconfig –level 2345 服务名称 off 服務名稱 建議 說明 acpid 停用 Advanced Configurati ...

  5. centos 开启启动服务优化

    默认开机启动服务列表:(此表转自 http://www.ha97.com/4815.html,另有多处补充) 服务名称 功能  默认   建议  备注说明 NetworkManager 用于自动连接网 ...

  6. NFC 与 Windows Phone 的那点事儿

    说起NFC这个词儿应该已经不陌生了,在我们的生活中有很多使用场景都是使用的这项技术,例如公交卡,门禁,还有银联的闪付卡等等.并且近些年在移动设备上使用的场景也越来越多,例如 对 NFC TAG 的读写 ...

  7. wpa_supplicant.conf

    转自:http://w1.fi/gitweb/gitweb.cgi?p=hostap.git;a=blob_plain;f=wpa_supplicant/wpa_supplicant.conf ### ...

  8. poj 1475 || zoj 249 Pushing Boxes

    http://poj.org/problem?id=1475 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=249 Pushin ...

  9. centos 关闭不使用的服务

    CentOS关闭服务的方法: chkconfig –level 2345 服务名称 off 服務名稱 建議 說明 acpid 停用 Advanced Configuration and Power I ...

随机推荐

  1. c++对文件操作的支持(二)

    #include <stdio.h> #include <iostream> #include <fstream> using namespace std; voi ...

  2. ajax 数据回传

    response.getWriter().print(reval > 0 ? true : false); //=========================== Object[] str ...

  3. [转]C 语言指针的使用

    第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有 ...

  4. Cortex-M3和Cortex-M4 Fault异常应用之一 ----- 基础知识

    1. 摘要 Cortex-M内核实现了一个高效异常处理模块,可以捕获非法内存访问和数个程序错误条件.本应用笔记从程序员角度描述Cortex-M Fault异常,并且讲述在软件开发周期中的Fault用法 ...

  5. Delphi 把一个ICO转换为BMP

    // 方法1 var Icon : TIcon; Bitmap : TBitmap; begin Icon := TIcon.Create; Bitmap := TBitmap.Create; Ico ...

  6. auto, extern, register, static

    对于一个数据的定义,需要指定2中属性: 存储类型和数据类型: static int a; auto char c; register int d; 1 auto 2 extern 3 register ...

  7. java多线程(同步与死锁问题,生产者与消费者问题)

    首先我们来看同步与死锁问题: 所谓死锁,就是A拥有banana.B拥有apple. A对B说:你把apple给我.我就把banana给你. B对A说:你把banana给我,我就把apple给你. 可是 ...

  8. 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称

    如果我们从 title 为 “首页” 的页面 A 点击进入一个子页面 B,那么在页面 B 的左上角将显示一个名为 “<首页” 的按钮.假设这个页面 A 叫 “你是我天边最美的云彩”,那在页面 B ...

  9. 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4

    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...

  10. C#中使用日志类,添加dll时出现错误

    警告 1 未能解析引用的程序集 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, proces ...