📄 ccidtest.cpp
字号:
// CcidTest1.cpp: implementation of the CCcidTest1 class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "scrtest.h"
#include "CcidTest.h"
#include "parseATR.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CMapStringToString CCcidTest::m_CmdIdToClassName;
CMapStringToRuntimeClass CCcidTest::m_CmdIdToRuntimeClass;
CMapStringToUChar CCcidTest::m_CmdIdToFuncNum;
IMPLEMENT_DYNCREATE(CCcidTest, ICmdTest)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCcidTest::CCcidTest()
{
}
CCcidTest::~CCcidTest()
{
}
void CCcidTest::Execute(CObject *obj)
{
PBYTE ioBuffer;
DWORD nResLen;
CCcidPage *ccidPage = static_cast<CCcidPage*>(obj);
ioBuffer = (PBYTE)malloc(512);
memset(ioBuffer,0,512);
ioBuffer[0] = GetFuncNum();
int nCmdLen = ccidPage->m_CmdData.m_length;
if(nCmdLen)
memcpy(&ioBuffer[1],ccidPage->m_CmdData.m_pData,nCmdLen);
ccidPage->m_Device.DeviceIoControl(IOCTL_USCR_CCID,
ioBuffer,nCmdLen+1,ioBuffer,512,&nResLen);
ccidPage->m_ResData.SetDataAddr(ioBuffer,nResLen);
if(GetFuncNum() == PC_to_RDR_IccPowerOn)
{
SCARD_CARD_CAPABILITIES ScardCapabilities;
memset(&ScardCapabilities,0,sizeof(SCARD_CARD_CAPABILITIES));
CString retStr = parseATR(ioBuffer,nResLen,&ScardCapabilities);
}
}
UCHAR CCcidTest::GetFuncNum()
{
USES_CONVERSION;
CString idName;
#if 0
IXMLDOMNamedNodeMapPtr pNamedNodeMapPtr;
IXMLDOMNodePtr pAttrNode;
pNamedNodeMapPtr = m_pXMLNode->Getattributes();
pAttrNode = pNamedNodeMapPtr->getNamedItem(_bstr_t("id"));
#else
IXMLDOMNodePtr pAttrNode;
pAttrNode = m_pXMLNode->selectSingleNode(_bstr_t("@id"));
#endif
idName = W2T(_bstr_t(pAttrNode->GetnodeValue()));
return m_CmdIdToFuncNum[idName];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -