智能读卡器

来源:互联网 发布:java求一百以内的素数 编辑:程序博客网 时间:2024/06/11 09:57

先放着,等项目完整理

读写流程

一、连接设备
1、建立资源管理器的上下文
if(已有建立上下文)
SCardDisconnect(hCard, SCARD_UNPOWER_CARD);//先注销
SCardEstablishContext(SCARD_SCOPE_USER, 0/NULL, 0/NULL, ref hContext);
2、获得系统中安装的读卡器列表
SCardListReaders(hContext, null, null, ref pcchReaders)
SCardListReaders(hContext, null, ReadersList, ref pcchReaders)//ReadersList[]设备名称
二、读取智能卡
1、建立卡连接
if(已有连接)
SCardDisconnect(hCard, SCARD_UNPOWER_CARD);//关闭已有连接
SCardDisconnect(hCard, SCARD_UNPOWER_CARD)
2、初始化状态
SCardStatus(hCard, cbReader, ref ReaderLen, ref dwState, ref dwActProtocol, ref ATRVal[0],

ref ATRLen)
3、发送命名
SCardTransmit(hCard, ref ioRequest, ref SendBuff[0], SendLen, ref ioRequest, ref RecvBuff

[0], ref RecvLen)

 

 

//首先,建立资源管理器的上下文
 SCARDCONTEXT hSC;
 LONG lReturn;
 lReturn = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hSC);
 if ( lReturn!=SCARD_S_SUCCESS )
   printf("Failed SCardEstablishContext/n");
//获得系统中安装的读卡器列表
//下面是获得系统中安装的读卡器列表的代码:
 char mszReaders[1024];
 LPTSTR pReader, pReaderName[2];
DWORD dwLen=sizeof(mzsReaders);
int nReaders=0;
lReturn = SCardListReaders(hSC, NULL, (LPTSTR)mszReaders, &dwLen);
if ( lReturn==SCARD_S_SUCCESS )
{
pReader = (LPTSTR)pmszReaders;
 while (*pReader !='/0' )
{
if ( nReaders<2 ) //使用系统中前2个读卡器
pReaderName[nReaders++]=pReader;
printf("Reader: %S/n", pReader ); //下一个读卡器名 pReader = pReader + strlen(pReader) + 1; }
 }
//与读卡器(智能卡)连接
SCARDHANDLE hCardHandle[2];
 DWORD dwAP;
lReturn = SCardConnect( hContext, pReaderName[0], SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCardHandle[0], &dwAP );
if ( lReturn!=SCARD_S_SUCCESS )
{
printf("Failed SCardConnect/n");
exit(1);
 }
 LONG SCardConnect( SCARDCONTEXT hContext, LPCTSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol );
/*
各个参数的含义:
(1)hContext:输入类型;ScardEstablishContext()建立的资源管理器上下文的句柄。
(2)szReader:输入类型;包含智能卡的读卡器名称(读卡器名称由ScardListReaders()给出)。
(3)dwShareMode:输入类型;应用程序对智能卡的操作方式,SCARD_SHARE_SHARED(多个应用共享同一个智能卡)、SCARD_SHARE_EXCLUSIVE(应用独占智能卡)、SCARD_SHARE_DIRECT(应用将智能卡作为私有用途,直接操纵智能卡,不允许其它应用访问智能卡)。
(4)dwPreferredProtocols:输入类型;连接使用的协议,SCARD_PROTOCOL_T0(使用T=0协议)、SCARD_PROTOCOL_T1(使用T=1协议)。
(5)phCard:输出类型;与智能卡连接的句柄。
(6)PdwActiveProtocol:输出类型;实际使用的协议。
*/

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米6gps信号弱怎么办 网线头卡子断了怎么办 入户网线太短了怎么办 孩子弹钢琴大拇指出琴键怎么办 手指肿胀疼痛变粗怎么办 iphone系统占用内存大怎么办 手机系统占用内存大怎么办 头盔固定配件掉了怎么办 移动4g网络不好怎么办 wifi登录密码忘记了怎么办 电脑登录密码忘记了怎么办 笔记本电脑登录密码忘记了怎么办 信用卡登录密码忘记了怎么办 华为p9后置摄像头模糊怎么办 手机图片文件夹删了怎么办 发票系统导出的xml怎么办 微信支付被限制怎么办 跨行三天不到账怎么办 测速正常但实际很慢怎么办 善领wifi上网慢怎么办 文件太大拷贝不到u盘怎么办 电脑的视频文件不显示缩略图怎么办 无线网连接不上怎么办 路由器wifi密码忘了怎么办 路由器账号密码忘了怎么办 刷卡刷多了钱怎么办 刷卡刷了两次钱怎么办 小米手机强刷后一联网就被锁怎么办 苹果刷机出现的问题怎么办 小米手机解不开图案锁怎么办 小米6无限重启怎么办 小米5一直显示mi怎么办 小米手机电池进入休眠状态怎么办 小米3s开不开机怎么办 小米n充电关机开机不了怎么办? 关机后强制刷机怎么办 红米手机开机画面怎么办 红米note1无法清理数据怎么办 红米2a密码忘记怎么办 线刷也不成功该怎么办 红米2开不了机怎么办