资源简介

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个文件信息

评论

共有 条评论