CCID 设备通讯 (Windows 平台)
ccid 协议下载
1. Windows提供了一套完整的接口,供ccid设备开发调用:
头文件:Winscard.h
lib库: Winscard.lib
dll库: Winscard.dll
2. Winscard 提供的主要接口:
SCardEstablishContext //建立上下文
SCardListReaders //检索所有的读卡器
SCardConnect //连接设备
SCardTransmit //设备传输
SCardDisconnect //断开设备
这些接口MSDN介绍的比较详细。
3. ccid简单的通讯的小例子 ccid_demo.cpp
ccid 设备通讯流程: 建立上下文--> 检索读卡器-->连接设备-->设备传输-->设备断开。根据这个流程,查MSDN相关接口,每个接口都附有实例片段,
下面这个实例就是,MSDN中的实例片段拼凑出来的,O(∩_∩)O~
// ccid_demo.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <Winscard.h>void ccid_demo()
{SCARDCONTEXT hSC;LONG lReturn;// Establish the context.lReturn = SCardEstablishContext(SCARD_SCOPE_USER,NULL,NULL,&hSC);if ( SCARD_S_SUCCESS != lReturn )printf("Failed SCardEstablishContext\n");else{// Use the context as needed. When done,// free the context by calling SCardReleaseContext.// ...}/*** list reader*/LPTSTR pmszReaders = NULL;LPTSTR pReader;LONG lReturn2;DWORD cch = SCARD_AUTOALLOCATE;// Retrieve the list the readers.// hSC was set by a previous call to SCardEstablishContext.lReturn = SCardListReaders(hSC,NULL,(LPTSTR)&pmszReaders,&cch );switch( lReturn ){case SCARD_E_NO_READERS_AVAILABLE:printf("Reader is not in groups.\n");// Take appropriate action.// ...break;case SCARD_S_SUCCESS:// Do something with the multi string of readers.// Output the values.// A double-null terminates the list of values.pReader = pmszReaders;while ( '\0' != *pReader ){// Display the value.printf("Reader: %S\n", pReader );// Advance to the next value.pReader = pReader + wcslen(pReader) + 1;}// Free the memory./*lReturn2 = SCardFreeMemory( hSC,pmszReaders );if ( SCARD_S_SUCCESS != lReturn2 )printf("Failed SCardFreeMemory\n");*/break;default:printf("Failed SCardListReaders\n");// Take appropriate action.// ...break;}SCARDHANDLE hCardHandle;DWORD dwAP;lReturn = SCardConnect( hSC, pmszReaders,//(LPCTSTR)"Rainbow Technologies SCR3531 0",SCARD_SHARE_SHARED,SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,&hCardHandle,&dwAP );if ( SCARD_S_SUCCESS != lReturn ){printf("Failed SCardConnect\n");exit(1); // Or other appropriate action.}// Use the connection.// Display the active protocol.switch ( dwAP ){case SCARD_PROTOCOL_T0:printf("Active protocol T0\n"); break;case SCARD_PROTOCOL_T1:printf("Active protocol T1\n"); break;case SCARD_PROTOCOL_UNDEFINED:default:printf("Active protocol unnegotiated or unknown\n"); break;}// Free the memory.lReturn2 = SCardFreeMemory( hSC,pmszReaders );if ( SCARD_S_SUCCESS != lReturn2 )printf("Failed SCardFreeMemory\n");#define COMMAND "\x00\x84\x00\x00\x08"unsigned char pbRecv[256]; int dwRecv = sizeof(pbRecv); SCARD_IO_REQUEST pioSendPci;pioSendPci.dwProtocol = dwAP;pioSendPci.cbPciLength = sizeof(SCARD_IO_REQUEST);// Transmit the request.// lReturn is of type LONG.// hCardHandle was set by a previous call to SCardConnect.// pbSend points to the buffer of bytes to send.// dwSend is the DWORD value for the number of bytes to send.// pbRecv points to the buffer for returned bytes.// dwRecv is the DWORD value for the number of returned bytes.lReturn = SCardTransmit(hCardHandle,&pioSendPci,//SCARD_PCI_T0,(LPCBYTE)COMMAND,//pbSend,5,//dwSend,NULL,pbRecv,(LPDWORD)&dwRecv );if ( SCARD_S_SUCCESS != lReturn ){printf("Failed SCardTransmit\n");exit(1); // or other appropriate error action}else{}// Remember to disconnect (by calling SCardDisconnect).// ...lReturn = SCardDisconnect(hCardHandle, SCARD_LEAVE_CARD);if ( SCARD_S_SUCCESS != lReturn ){printf("Failed SCardDisconnect\n");exit(1); // Or other appropriate action.}
}int _tmain(int argc, _TCHAR* argv[])
{ccid_demo();return 0;
}
下载代码
CCID 设备通讯 (Windows 平台)相关推荐
- ccid 设备通讯(Linux)
这里只介绍一下ccid Linux 开发过程中遇到的一些问题,仅供参考. 在网上搜了一些相关东西,按照下篇说的装了一下,libusb.ccid.pcsc-lite Linux 平台下Libusb &a ...
- Windows平台C++ 启用和禁用设备
在windows平台上有一套SetupDi系列API可以获取所有的硬件设备,以及对其进行操作.现在我来主要说一下对指定设备的启用和禁用操作. 首先说明一下,我的项目是个MFC对话框程序,我自己定义了一 ...
- 连接LilyPad之Windows平台的驱动
连接LilyPad之Windows平台的驱动 LilyPad和其他的Arduino控制板的不同之处是它是为电子织物和可穿戴设计的.那么,它的大小就必须要紧凑.所以,它并没有板载其他大多数板子都具有的U ...
- 近距离P2P通讯技术平台 Alljoyn
AllJoyn:无需服务器的设备间近距离P2P通讯技术平台 AllJoyn 使用蓝牙或者Wi-Fi而不是GPS和3G来进行定位和文件传输,这将使得文件共享和对其他设备的发现过程变得更快.更准确. Al ...
- Windows平台类毕业论文文献包含哪些?
本文是为大家整理的Windows平台主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为Windows平台选题相关人员撰写毕业论文提供参考. 1.[期刊论文]Windows平台恶意软件智能 ...
- 在Windows平台架设DNS服务器
ISC (Internet Systems Consortium) 在二零零七年八月二十七日宣布了 Bind 8 历史使命的终结.ISC 鼓励还在使用 Bind 8 的用户从安全方面考虑要迅速迁移到 ...
- Windows平台下安装PhoenixSuit要点
2019独角兽企业重金招聘Python工程师标准>>> 在上手问题这个板块经常看到烧写固件失败的求助帖,这个帖子主要整理一下Windows平台下安装PhoenixSuit和刷机的要点 ...
- 微软要打造通用Windows平台,但这将是一场苦战
微软CEO萨特亚·纳德拉(Satya Nadella)制定了一项宏伟但风险也极高的战略,那就是通用Windows平台(UWP)战略.一旦这项战略获得成功,微软的开发者就能以一种全新的方式在大量设备上开 ...
- Windows平台RTMP推送摄像头对接介绍
背景 好多开发者在对接大牛直播SDK(官方)的Windows平台RTMP推送时,不熟悉摄像头调用,实际上,摄像头调用逻辑并不复杂,以下是大概流程: 首先调用我们sdk接口获取摄像头个数,调用接口是:G ...
最新文章
- spring boot 及微服务 学习笔记
- jQuery EasyUI dialog 居中最简单的办法
- createelement 设置id_还记得你的第一个网络ID是什么吗?
- IDEA 创建 SpringBoot 项目
- IBM将发布以固态硬盘为基础的全企业系统
- python安装sqlalchemy python2_Python SQLAlchemy --2
- python数据结构与算法第10讲_Python数据结构与算法10:基本结构:练习题1
- Vue 中watch和computed 的用法及区别
- java random()_JAVA的Random类的用法详解
- 判断闰年的c语言程序_身为程序员还记得C语言经典算法(附带答案)吗?
- cmd命令查看本机网外地址
- 对于半圆形的点击区域该怎么做_我做了一个傻瓜式热力图生成工具
- Spring Cloud 全家桶简介
- 这款台灯,不仅能护眼,还能点读和互动
- 行业说 | 建筑业面临失宠,越来越留不住年轻人?原因在这
- 思科模拟器PacketTracer7--利用一台交换机和2台pc互连构成小型局域网
- Bison for Windows
- 国产手机操作系统 COS 官方回应 7 大质疑
- 用soa搭建统一的电子政务平台
- CSIG图像图形技术挑战赛重磅来袭!人体目标检测分赛道正式开放注册!