PC/SC简介以及相关开发

2017-12-29 12:07:40来源:CSDN作者:qq_33140565人点击

分享

一、PC/SC规范介绍

        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规范建立在工业标准ISO7816EMV标准的基础上,但它对底层的设备接口和独立于设备的应用API接口(例如用来允许多个应用共享使用系统同一张智能卡的资源管理器)做了更详尽的补充。它的提出主要是为了达到以下目标:         1)、遵从现在ICC和PC的标准并在适当的地方予在扩充        2)、跨平台的可操作性,使该规范可在多种硬件和软件平台上实现        3)、应用程序可以采用不同厂商提供的产品(独立于厂商)        4)、建立应用级的智能卡服务接口,推广ICC在PC上的应用,并促成PC采用ICC作主标准设备。

 

二、PC/SC的体系结构

        PC/SC体系由三个主要部件组成,分别规定的操作系统厂商、读写器(IFD)厂商、智能卡(ICC)厂商的职责。        1). IFD          (即读写器)控制器是由IFD厂商提供的可安装部件。        2). Resource manager(资源管理器)使用Win32API函数实现,是由操作系统厂商提供的系统级部件。        3). Service Providers(服务提供者),服务程序是由厂商提供的可安装部件,用于提供访问特殊服务的手段,其使用的是基本COM的界面方式。 三、PC/SC的API函数使用方法        PC/SC的API包含30多个以Scard为前缀的函数,所有函数的原型都在winscard.h中声明,应用程序需要包含winscard.lib,所有函数的正常返回值都是SCARD_S_SUCCESS。在这30多个函数中,常用的函数只有几个,下面将详细介绍这些常用函数。 1、函数ScardEstablishContext()       用于建立将在其中进行设备数据库操作的资源管理器上下文       函数原型:       LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext);       参数含义:
       输入参数:      dwScope:表示资源管理器上下文范围,取值为:SCARD_SCOPE_USER(在用户域中完成设备数据库操作)、SCARD_SCOPE_SYSTEM(在系统域中完成设备数据库操作)。要求应用程序具有相应的操作权限。      pvReserved1:保留,必须为NULL。      pvReserved2:保留,必须为NULL。      输出参数:      phContext:输出类型;建立的资源管理器上下文的句柄。 2、函数ScardListReaders()      可以列出系统中安装的读卡器的名字,获得系统中安装的读卡器列表 
      函数原型:      LONG SCardListReaders(SCARDCONTEXT hContext, LPCTSTR mszGroups, LPTSTR mszReaders, LPDWORD pcchReaders); 
      参数含义:      输入参数:      hContext:ScardEstablishContext()建立的资源管理器上下文的句柄,不能为NULL。      mszGroups:读卡器组名,为NULL时,表示列出所有读卡器。      输出参数:      mszReaders:系统中安装的读卡器的名字,各个名字之间用’/0’分隔,最后一个名字后面为两个连续的’/0’。      pcchReaders:输入输出类型;mszReaders的长度。 3、函数ScardConnect()      在应用程序与读卡器上的智能卡之间建立一个连接。      函数原型:      LONG SCardConnect(SCARDCONTEXT hContext, LPCTSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);      参数含义:      输入参数:      hContext:ScardEstablishContext()建立的资源管理器上下文的句柄。      szReader:包含智能卡的读卡器名称(读卡器名称由ScardListReaders()给出)。      dwShareMode:应用程序对智能卡的操作方式,SCARD_SHARE_SHARED(多个应用共享同一个智能卡)、SCARD_SHARE_EXCLUSIVE(应用独占智能卡)、SCARD_SHARE_DIRECT(应用将智能卡作为私有用途,直接操纵智能卡,不允许其它应用访问智能卡)。      dwPreferredProtocols:连接使用的协议,SCARD_PROTOCOL_T0(使用T=0协议)、SCARD_PROTOCOL_T1(使用T=1协议)。       输出参数:       phCard:与智能卡连接的句柄。       PdwActiveProtocol:实际使用的协议。 

4、函数SCardTransmit()      向智能卡发送指令,并接受返回的数据。      函数原型:      LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_I0_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);      参数含义:      输入参数:      hCard:与智能卡连接的句柄。      pioSendPci:指令的协议头结构的指针,由SCARD_IO_REQUEST结构定义。后面是使用的协议的协议控制信息。一般使用系统定义的结构,SCARD_PCI_T0(T=0协议)、 SCARD_PCI_T1(T=1协议)、SCARD_PCI_RAW(原始协议)。      pbSendBuffer:要发送到智能卡的数据的指针。      cbSendLength:输入类型;pbSendBuffer的字节数目。      pioRecvPci:输入输出类型;指令协议头结构的指针,后面是使用的协议的协议控制信息,如果不返回协议控制信息,可以为NULL。      输出参数:      pbRecvBuffer:输入输出类型;从智能卡返回的数据的指针。      pcbRecvLength:输入输出类型;pbRecvBuffer的大小和实际大小。 5、函数ScardDisconnect()      断开与读卡器(智能卡)的连接。      函数原型:      LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition);      参数含义:      输入参数:      hCard:与智能卡连接的句柄。      dwDisposition:断开连接时,对智能卡的操作,SCARD_LEAVE_CARD(不做任何操作)、SCARD_RESET_CARD(复位智能卡)、SCARD_UNPOWER_CARD(给智能卡掉电)、SCARD_EJECT_CARD(弹出智能卡)。 6、函数ScardReleaseContext()      释放资源管理上下文      函数原型:      LONG SCardReleaseContext(SCARDCONTEXT hContext);      参数含义:      输入参数:      hContext:ScardEstablishContext()建立的资源管理器上下文的句柄,不能为NULL。 7、函数SCardStatus()      取得卡片的状态      函数原型:      LONG SCardStatus( SCARDHANDLE hCard, LPTSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pbcAtrLen );      参数含义:      输入参数:      hCard:与智能卡连接的句柄。      输出参数:      szReaderName:PC/SC读卡器名称      pcchReaderLen:读卡器长度      pdwState:卡片状态      pdwProtocol:连接使用的协议      pbAtr:ATR值指针      pbcAtrLen:ATR值长度
原文出处:http://blog.csdn.net/duanxingheng/article/details/11040599

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台