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 平台)相关推荐

  1. ccid 设备通讯(Linux)

    这里只介绍一下ccid Linux 开发过程中遇到的一些问题,仅供参考. 在网上搜了一些相关东西,按照下篇说的装了一下,libusb.ccid.pcsc-lite Linux 平台下Libusb &a ...

  2. Windows平台C++ 启用和禁用设备

    在windows平台上有一套SetupDi系列API可以获取所有的硬件设备,以及对其进行操作.现在我来主要说一下对指定设备的启用和禁用操作. 首先说明一下,我的项目是个MFC对话框程序,我自己定义了一 ...

  3. 连接LilyPad之Windows平台的驱动

    连接LilyPad之Windows平台的驱动 LilyPad和其他的Arduino控制板的不同之处是它是为电子织物和可穿戴设计的.那么,它的大小就必须要紧凑.所以,它并没有板载其他大多数板子都具有的U ...

  4. 近距离P2P通讯技术平台 Alljoyn

    AllJoyn:无需服务器的设备间近距离P2P通讯技术平台 AllJoyn 使用蓝牙或者Wi-Fi而不是GPS和3G来进行定位和文件传输,这将使得文件共享和对其他设备的发现过程变得更快.更准确. Al ...

  5. Windows平台类毕业论文文献包含哪些?

    本文是为大家整理的Windows平台主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为Windows平台选题相关人员撰写毕业论文提供参考. 1.[期刊论文]Windows平台恶意软件智能 ...

  6. 在Windows平台架设DNS服务器

    ISC (Internet Systems Consortium) 在二零零七年八月二十七日宣布了 Bind 8 历史使命的终结.ISC 鼓励还在使用 Bind 8 的用户从安全方面考虑要迅速迁移到 ...

  7. Windows平台下安装PhoenixSuit要点

    2019独角兽企业重金招聘Python工程师标准>>> 在上手问题这个板块经常看到烧写固件失败的求助帖,这个帖子主要整理一下Windows平台下安装PhoenixSuit和刷机的要点 ...

  8. 微软要打造通用Windows平台,但这将是一场苦战

    微软CEO萨特亚·纳德拉(Satya Nadella)制定了一项宏伟但风险也极高的战略,那就是通用Windows平台(UWP)战略.一旦这项战略获得成功,微软的开发者就能以一种全新的方式在大量设备上开 ...

  9. Windows平台RTMP推送摄像头对接介绍

    背景 好多开发者在对接大牛直播SDK(官方)的Windows平台RTMP推送时,不熟悉摄像头调用,实际上,摄像头调用逻辑并不复杂,以下是大概流程: 首先调用我们sdk接口获取摄像头个数,调用接口是:G ...

最新文章

  1. spring boot 及微服务 学习笔记
  2. jQuery EasyUI dialog 居中最简单的办法
  3. createelement 设置id_还记得你的第一个网络ID是什么吗?
  4. IDEA 创建 SpringBoot 项目
  5. IBM将发布以固态硬盘为基础的全企业系统
  6. python安装sqlalchemy python2_Python SQLAlchemy --2
  7. python数据结构与算法第10讲_Python数据结构与算法10:基本结构:练习题1
  8. Vue 中watch和computed 的用法及区别
  9. java random()_JAVA的Random类的用法详解
  10. 判断闰年的c语言程序_身为程序员还记得C语言经典算法(附带答案)吗?
  11. cmd命令查看本机网外地址
  12. 对于半圆形的点击区域该怎么做_我做了一个傻瓜式热力图生成工具
  13. Spring Cloud 全家桶简介
  14. 这款台灯,不仅能护眼,还能点读和互动
  15. 行业说 | 建筑业面临失宠,越来越留不住年轻人?原因在这
  16. 思科模拟器PacketTracer7--利用一台交换机和2台pc互连构成小型局域网
  17. Bison for Windows
  18. 国产手机操作系统 COS 官方回应 7 大质疑
  19. 用soa搭建统一的电子政务平台
  20. CSIG图像图形技术挑战赛重磅来袭!人体目标检测分赛道正式开放注册!

热门文章

  1. 用css和HTML做loding小动画
  2. R包安装,devtools及其依赖包
  3. mysql timestamp 差值_SQL计算timestamp的差值实例分享
  4. 分布式服务器中的数据安全问题及其解决办法
  5. I don't know what to say 事件的 NPM 包中奖名单,有你在用的吗?
  6. NetSpeed--网速检测
  7. 批量文件转码工具(支持GBK,UTF-8转换)
  8. 安卓手机安装虚拟定位的方法Xposed安装器+模拟位置(Xposed模块)
  9. 吴军的《见识》书的核心内容
  10. 通过puppet hiera配置bigtop大数据集群