代码下载:http://download.csdn.net/source/2364046
WIN2000后,微软正式提供对PC/SC智能卡访问的库支持 winscard(WIN98也可以通过安装系统补丁支持),使得用系统API访问不同的读卡器成为可能,这套约定就称为PC/SC,其中包含了对于读卡器的驱动约定和上层API。本人不做读卡器,只是用,所以本文也主要针对的是API的使用和封装。
所有支持PC/SC驱动的读卡器,都会产生一个系统唯一的名字(多读卡器的时候,跟序号做区分)。然后产生卡片操作上下文,用SCardConnect进行连接,SCardTransmit进行APDU的传送。其中APDU的传送符合ISO7816-4的标准,并不关注ISO7816-3的传输层协议(传输层由驱动完成)。
附件的API使用例程:
CPCSC card;
card.Init();
char readers[512];
if(card.ListReaders(readers))
{
//list readers
//select and connect reader
card.ConnectCard(reader);
}
//send apdu
card.SELECT(0x3F00);
char response[256];
card.GET_RESPONSE(response,card.m_bySW2);
cout << "MF type" << CPCSC::RS_GetFileType(response);
//.....
card.DisConnectCard();
card.Eject();
用监护线程监控卡片插入和拔出的动作。
void Thread_Func()
{
while(card.GetReaderStatusChange(300) != SCARD_E_TIMEOUT)
{
if(card.IsConnc())
{
//card insert, get atr
BYTE atr[200];
card.GetAtr(atr,200);
//...
}
else
{
//card plug
//......
}
}
}