VC封装USB接口的智能卡读写(应用层)

编译时需要包含头文件“Winscard.h”和库文件winscard.1ib。

第一步要通过初始化连接函数获得设备的连接句柄:

SCARDCONTEXT hSC = NULL;

LONG IReturn = 0:

IReturn=SCardEstablishContext(SCARDCOPE SER.NULL.NULL.& hSC):

第一个参数指定资源管理连接的范围,另一个可选值为SCARD_SCOPE_ SYSTEM。

第二步要取得读写器列表:

char szReaderNameList[MAX_RESPONSE]:

DWORD dwLength = O:

IReturn= SCardListReaders(hSC,NULL, szReaderNameList,&dwLength):

如果调用成功,则szReaderNameList中存放的是读写器的名字,如果有多个则中间用‘\O’分割,dwLength的值为返回的有效字符的长度,包括所有的‘\O’。得到读写器的名字后就可以取得某个读写器中智能卡的句柄.

第三步要取得指定读写器中卡片的句柄(与卡片建立连接):

要取得读写器列表中第一个读写器中卡片的句柄:

SCARDHANDLE hCardHandIe = NULL;

DW0RD dwActiveProtocol= O:

IReturn=SCardConnect{hSC,szReaderNameList,SCARD_SHARE_EXCLUSIVE,SCARD_ PROTOCOL_T0,

SCARD_PR0T0C0L_T1,& hCardHandle,&dwActiveProtoco1);

第三个参数表示连接的共享模式, 另外两个模式是SCARD_SHARE SHARED和SCARD_SHARE_DIRECT。第四个参数指定首选的通信协议类型包括T:0和T=1,dwActiveProtocol返回最终确定的通信协议类型。注意:调用此函数时读写器中如果没有智能卡则会返回相应错误。

以上两个函数可以实现卡片的检测??

第四步与卡片进行交互:

1、获得智能卡的句柄后就可以对卡片进行操作了,如读取ATR:

char szReaderName[300]:

DWORD dwATRLength = 40;

BYTE pbyATR[40];

DW 0RD dwCardState = 0:

IReturn = SCardStatus(hCardHandle,szReaderName, &dwLength, &dwCardState,

&dwActiveProtoco1, pbyATR.&dwATRLength):

调用成功后dwATRLength的值就是实际读出的ATR的长度。

2、向卡片发送命令并获得结果:

SCARD_IO_REQUEST ScardlORequest;

Scardl0Request.dwProtocol=dwActiveProtocol;

ScardlORequest.cbPciLength =sizeof(SCARD_IO_REQUEST);

BYTE pbyCommand[20];

//此处加入设置要发送的命令的代码...

BYTE pbyReceived[100];

DW0RD dwRecLength = sizeof(pbyReceived);

IReturn = SCardTransmit(hCardHandle, &Scard10Request,pbyCommand,5,NULL,pbyReceived,& dwRecLength):

ScardlORequest.dwProtocol的值应该设置为最终确定的通信协议类型,第四个参数指定要发送的命令的长度,如果调用成功,则dwRecLength的值就是收到的应答的长度。

注:在开始事务处理前要调用SCardBeginTransaction(hCardHandle)。该函数启动一个事务,启动前等待对hCardHandle操作的所以事务结束。启动后阻塞所有对该卡片存取的应用程序。

结束事务处理时要调用SCardBeginTransaction(hCardHandle,SCARD_LEAVE_CARD)。该函数对应于之前声明的事务,使得其他应用程序对卡片的访问激活。

第五步断开与卡片的连接:

当对卡片的操作完成后应该断开与卡片的连接:

IReturn=SCardDisconnect{hCardHandle,SCARD_UNPOWER_ CARD);

第二个参数指定断开连接时读写器要执行的操作,其他的可选值包括SCARD_LEAVE CARD、SCARD_RESET CARD 和SCARD_EJECT_CARD。

第六步释放读卡器设备句柄:

在对所有的读写器的操作都完成以后,需要释放设备的连接句柄:SCardReleaseContext(hSC);

VC封装USB接口的智能卡读写(应用层)相关推荐

  1. VC++编写USB接口通讯程序

    用VC++编写USB接口通讯程序 摘要:详细介绍Visual C++ 6.0环境下利用Windows API(Application Program Interface)函数来实现与符合HID设备类的 ...

  2. USB接口 在单片机读写U盘 项目中的应用

    2019独角兽企业重金招聘Python工程师标准>>> 一.    USB接口是什么? 通俗地说法: USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯.USB接口即插即用 ...

  3. 用VC++实现USB接口读写数据的程序

    使用一个GUIDguidHID_1查找并打开一个USB设备 extern "C" int PASCAL SearchUSBDevice() {HANDLE hUsb;int nCo ...

  4. 用c语言编写rfid读卡系统,USB免驱RFID读写器编程解析之一:智能卡篇

    随着RFID应用的普及,越来越多的软件工程师需要使用RFID读写器编程来实现自己的需求.为了使软件工程师更快的了解RFID读写器的使 用,本文选择一款市面上常用的USB免驱RFID读写器SDT-HA来 ...

  5. A40I工控主板(SBC-X40I)USB接口读写测试

    SBC-X40I产品特性 采用Allwinner公司Cortex-A7四核A40i处理器,运行最高速度为1.2GHZ: 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / Open ...

  6. USB接口Altium designer原理图PCB封装

    (1)USB接口Altium designer原理图&PCB封装 放假了,花了点时间整理一下设计PCB需要的库,这里先分享最最最最常用一些类,后面会继续补充 2022-01-16 大家要是觉得 ...

  7. USB HID读卡器 M1卡读卡器 Mifare 读写器 NFC方案 NFC读写器方案 usb 接口NFC读写器 ISO14444 TypeA 协议读写器 S50/S70 usb读写器 提供Demo

    [产品简介]     USB Mifare卡系列读写设备是一款简单.实用的13.56MHz非接触式IC卡读写器 可读写银行卡.公交卡.校园卡.燃气卡.MifareS50卡,S70卡(ISO14443A ...

  8. USB接口Ntag 213/215/216系列读卡器发卡器 Ntag标签读写器发卡器 NFC标签读卡器 ISO14443读卡器 TypeA标签发卡器

    产品简介]        USB Ntag标签读写设备是一款简单.实用的13.56MHz非接触式IC卡读写器 可读写Ntag213/215/216系列标签.银行卡.公交卡.校园卡.燃气卡.Mifare ...

  9. STM32 通过USB接口读写挂载的SD卡(支持fatfs文件系统)

    通过USB接口读写挂载的SD卡 HAL库 标准库 本文以STM32F407为例分别用HAL库(STM32CubeMX)和标准库实现SD卡对fatfs支持,以及通过USB接口读写SD卡.首先看电路连接: ...

最新文章

  1. Linux grep 命令
  2. ios点击大头针气泡不弹出_地图大头针气泡点击事件
  3. 数学建模matlab imread,《matlab数学建模方法与实践》第三章 数据的处理
  4. matlab读取txt数据绘图(python命令行传参)
  5. input.get_shape()的用法
  6. zookeeper集群部署监控与选举同步流程等工作原理
  7. 第七章 进程环境 | 001 命令形参、gcc与g++的使用
  8. #并行优化# 容错算法 (Fault Tolerant)
  9. java获取运行时对象,java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构...
  10. centos8共享文件夹挂载_linux挂载群辉的NFS共享文件夹
  11. Android Studio(五):修改Android Studio项目包名
  12. Ubuntu中使用freeradius配置RADIUS,并在RADIUS中配置LDAP 并实现AP认证
  13. python线程池原理_Django异步任务线程池实现原理
  14. SSH框架微服务改进实战
  15. 【图像分割】基于matlab人工鱼群算法图像分割【含Matlab源码 1488期】
  16. 使用pytorch中预训练模型VGG19获取图像特征,得到图像embedding
  17. java解析md文件_md格式详解
  18. 5.13 广东移动 笔试题
  19. hadoop基础【Shuffle全部流程、OutputFormat输出、ReduceJoin案例实操】
  20. 一个蚂蚁森林能量自动收获脚本

热门文章

  1. SqlParameter的用法(减少注入)
  2. 推荐几个Robot Learning的开源项目[1]
  3. Qt简单的创建文件夹
  4. 【重装系统前 病毒库的备份方法介绍】
  5. 这写孩子对计算机游戏上瘾了,如果孩子玩游戏上瘾不好好学习,家长该怎么办?...
  6. 软件评测师-1.计算机系统构成及硬件基础知识
  7. 选择专业要谨慎,不要跟风
  8. Cloudflare Worker 部署纯静态网站
  9. ESP32-S3 >>> MicroPython 编程初探
  10. 面试题:http和https区别