资源简介
pcsc读卡器的操作示例,可以执行apdu
atr复位部分有一个类处理的很好
代码片段和文件信息
// ApduProcesser.cpp:
// APDU Processor for APDU/APDUs/APDUS‘ file
//
// by Y.Volta Tang (y.volta@gmail.com)
// 2008-01-18 22:06
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “ApduProcesser.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CApduProcesser::CApduProcesser()
{
m_szErrMsg[0] = 0x0;
}
CApduProcesser::~CApduProcesser()
{
}
// Read APDUs from a file.
BOOL CApduProcesser::DoFile(LPCTSTR szPath)
{
CFile file;
DWORD dwLen = 0;
char *pBuf = NULL;
BOOL bRet = FALSE;
char szCtrl;
if(!file.Open(szPath CFile::modeRead | CFile::shareDenyWrite))
return FALSE;
dwLen = file.GetLength();
pBuf = (char*)malloc(dwLen + 10);
if(pBuf == NULL)
{
file.Close();
return FALSE;
}
memset(pBuf 0x0 dwLen);
file.Read(pBuf dwLen);
char *p = pBuf;
char *pcr = pBuf;
for(UINT i=0; i < dwLen; i ++)
{
szCtrl = *p++;
if(szCtrl == ‘\n‘ || szCtrl == ‘\r‘)
{
*(p-1) = ‘\0‘;
// process this line.
bRet = DoMultiAPDU(pcr);
// if(!bRet) // sth. wrong.
// break;
// else
pcr = p;
}
}
free(pBuf);
file.Close();
return bRet;
}
//////////////////////////////////////////////////////////////////////////
// sth. like:
// 0084 0000 08;;;0084 0000 08;;
//
BOOL CApduProcesser::DoMultiAPDU(char *szMLBuf)
{
char *pBuf = szMLBuf;
char *pUnit = szMLBuf;
BOOL bRet = FALSE;
int nCnt = 0;
int nBufLen = strlen(szMLBuf);
for(int i=0; i < nBufLen; i ++)
{
if(*pBuf++ == ‘;‘)
{
*(pBuf-1) = 0x0;
bRet = DoSingleAPDU(pUnit);
if(!bRet)
break;
else
{
nCnt ++;
pUnit = pBuf;
}
}
}
// Not Mutlti-APDU found so try the Single APDU.
if(nCnt == 0)
return DoSingleAPDU(pUnit);
return bRet;
}
//////////////////////////////////////////////////////////////////////////
// sth. like:
// 0084 0000 08
//
BOOL CApduProcesser::DoSingleAPDU(char *szSLBuf)
{
return ProcessSingleLine(szSLBuf);
}
BOOL CApduProcesser::ProcessInput(char *szInput)
{
m_arrApdu.RemoveAll();
if(szInput[1] == ‘:‘)
{ // This is a plain script file.
return DoFile(szInput);
}
else
{
if(strchr(szInput ‘;‘) != NULL)
{ // multi-apdu specified.
return DoMultiAPDU(szInput);
}
else
{ // single-apdu specified.
return DoSingleAPDU(szInput);
}
}
return FALSE;
}
// Process a APDU Line.
BOOL CApduProcesser::ProcessSingleLine(char *szSLBuf)
{
char szString[1025] = {0};
char *pdest = NULL;
int result = 0;
if(strlen(szSLBuf) > 1024)
return FALSE;
// expected response?
pdest = strstr( szSLBuf “# exp: “ );
res
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-01-22 19:00 SCardDemo-Adv
文件 4959 2008-01-18 22:32 SCardDemo-Adv\ApduProcesser.cpp
文件 1472 2008-01-18 22:27 SCardDemo-Adv\ApduProcesser.h
文件 55 2008-01-18 17:02 SCardDemo-Adv\apdus.txt
文件 17543 2009-01-20 12:37 SCardDemo-Adv\SCardDemoDlg.cpp
文件 16549 2008-01-18 22:24 SCardDemo-Adv\ConsoleWindow.cpp
文件 10426 2009-01-20 12:37 SCardDemo-Adv\Atr.cpp
文件 12575 2008-01-18 14:39 SCardDemo-Adv\DialogHeader.cpp
文件 9723 2008-01-18 14:39 SCardDemo-Adv\DialogHeader.h
文件 1100 2008-01-18 21:58 SCardDemo-Adv\resource.h
文件 2105 2008-01-18 15:27 SCardDemo-Adv\SCardDemo.cpp
文件 5040 2008-01-18 15:59 SCardDemo-Adv\SCardDemo.dsp
文件 541 2008-01-18 17:00 SCardDemo-Adv\SCardDemo.dsw
文件 1357 2008-01-18 15:27 SCardDemo-Adv\SCardDemo.h
文件 7437 2008-01-18 22:01 SCardDemo-Adv\SCardDemo.rc
文件 3903 2009-01-20 12:37 SCardDemo-Adv\Atr.h
文件 1755 2008-01-18 16:10 SCardDemo-Adv\SCardDemoDlg.h
文件 6484 2009-01-20 19:58 SCardDemo-Adv\SCardmgr.cpp
文件 1486 2008-01-18 16:44 SCardDemo-Adv\SCardmgr.h
文件 211 2008-01-18 15:27 SCardDemo-Adv\StdAfx.cpp
文件 1054 2008-01-18 15:27 SCardDemo-Adv\StdAfx.h
文件 46212 2009-01-20 17:55 SCardDemo-Adv\SCardDemo.aps
文件 9838 2009-01-21 22:12 SCardDemo-Adv\SCardDemo.vcproj
文件 886 2009-01-21 22:12 SCardDemo-Adv\SCardDemo.sln
..A..H. 22528 2009-05-07 19:50 SCardDemo-Adv\SCardDemo.suo
文件 1403 2009-01-21 23:01 SCardDemo-Adv\SCardDemo.vcproj.DEC.DECC.user
文件 1339 2008-06-19 21:03 SCardDemo-Adv\ConsoleWindow.h
目录 0 2009-01-22 19:00 SCardDemo-Adv\Debug
目录 0 2009-01-22 19:00 SCardDemo-Adv\res
文件 9742 2008-01-18 15:54 SCardDemo-Adv\res\header.bmp
............此处省略12个文件信息
- 上一篇:FPGA测量相位差
- 下一篇:基于高光谱成像的蓝莓内部品质检测 特征波长选择方法研究
相关资源
- ISO7816 协议标准
- 智能卡PCSC读卡器指令发送工具
- iso/iec 7816-4中文版
- CPU卡读卡程序,STM32控制,可以直接用
- sjl06加密机模拟程序
- STM32+RC522--demo.rar
- PC/SC规范用于智能卡开发使用
- USB CCID 规范
- 智能卡开发者指南
- RC522操作非接触式CPU卡和支持ISO7816协
- 智能卡技术-IC卡与RFID标签(第三版)
- 复旦微电子M1和CPU卡读卡机芯片FM170
- 智能卡解码程序V3.0141027
- pcsc-lite-1.7.4 源码包
- 智能卡一卡一密方法和系统
- 智能卡一卡一密方法
- ISO7816-3智能卡传输协议详尽中文版
- Mac上使用pcsc访问智能卡的xcode工程
- SmartCardService.rar 修复smartcard错误
- ATR 解析工具
- 模拟POS机程序源码
- 最新M1卡和CPU卡读卡机芯片FM1702SL源程
- 矿用卡车无人驾驶系统实现方式及效
- 智能卡解码程序V4.0
- 2019款解码软件v1.0.0.4.exe
- 开源版智能卡操作系统(cos)
- 算法工具集合 智能卡
- 使用微软PC/SC接口操作智能卡的demo
- 基于RFID技术的智能卡--门禁管理系统
评论
共有 条评论