資源簡(jiǎn)介
pcsc讀卡器的操作示例,可以執(zhí)行apdu
atr復(fù)位部分有一個(gè)類處理的很好

代碼片段和文件信息
//?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? {
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? {
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
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄??????????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個(gè)文件信息
評(píng)論
共有 條評(píng)論