如果读卡器中没有卡,我在获取PCSC读卡器序列号时遇到问题。我使用的是winscard.dll和c++。
以下代码仅适用于读卡器中有卡的情况。否则,将不检索SCardHandle。我还没有找到任何其他方法来获得SCardHandle。
SCARDHANDLE hCardHandle;
SCARDCONTEXT hSC;
WCHAR pCardReaderName[256];
LONG lReturn;
lReturn = SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, &hSC);
if (lReturn != SCARD_S_SUCCESS)
{
Console::WriteLine("SCardEstablishContext() failed\n");
return;
}
my_select_reader(hSC, pCardReaderName); // just shows reader names in console and requires you to pick one
// connect to smart card
DWORD dwAP;
lReturn = SCardConnect( hSC,
(LPCWSTR)pCardReaderName,
SCARD_SHARE_SHARED,
SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_RAW,
&hCardHandle,
&dwAP );
if ( SCARD_S_SUCCESS != lReturn )
{
Console::WriteLine("Failed SCardConnect\n");
exit(1); // Or other appropriate action.
}
// get reader serial no
LPBYTE pbAtr = NULL;
DWORD cByte = SCARD_AUTOALLOCATE;
lReturn = SCardGetAttrib(hCardHandle,
SCARD_ATTR_VENDOR_IFD_SERIAL_NO,
(LPBYTE)&pbAtr,
&cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
Console::WriteLine("Failed to retrieve Reader Serial\n");
exit(1); // Or other appropriate action.
}
printf("serial no: %s", pbAtr);
SCardFreeMemory(hCardHandle, pbAtr); 有没有一种方法可以在不连接卡的情况下获得读卡器序列号?
发布于 2011-10-15 16:00:39
也许我来晚了点但不管怎样..。
您可以使用带有SCardConnect的SCARD_SHARE_DIRECT标志直接连接到读卡器。至少对我们来说这样做没问题..(我们使用协议标志"0x00")
发布于 2012-07-12 16:57:45
您应该使用:
lReturn = SCardConnect(hResManager,szAvailRdr,SCARD_SHARE_SHARED,SCARD_PROTOCOL_T1,
&hCardHandle,
&dwActProtocol);相反,请尝试使用:
lReturn = SCardConnect(hResManager,szAvailRdr,SCARD_SHARE_DIRECT,
NULL,
&hCardHandle,
NULL);其中szAvailRdr是指读卡器名称(智能卡读卡器名称),hCardHandle是在使用scardconnect之前获得的句柄。
这应该能让你坚持下去!
https://stackoverflow.com/questions/6940824
复制相似问题