PC/SC简介以及相关开发

一、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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
E53_SC1扩展板是一款尺寸为5×3cm的案例扩展板,它可以与满足标准设计的开发板直接适配。该扩展板上使用了BH1750光照强度传感器,该传感器采用IIC通信接口。因此,在使用E53_SC1扩展板时,除了复制STM32CubeMX生成的i2c.h和i2c.c文件外,还需要复制包含了BH1750传感器驱动的E53_SC1扩展板驱动文件。开发板方面,可以使用小熊派开发板(含NB卡、NB35-A通信扩展板、E53_SC1案例扩展板等),并选择适合的IDE开发软件,如IoT Studio、Liteos Studio、MDK Keilv5或VSCode(需安装IOT Link插件)。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [小熊派华为物联网操作系统LiteOS裸机驱动移植03-E53_SC1扩展板驱动及使用](https://blog.csdn.net/BearPi/article/details/104050484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于STM32小熊派开发智慧路灯项目实践](https://blog.csdn.net/m0_61934621/article/details/128474216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值