如果讀卡器中沒有卡,則獲取PCSC讀卡器序列號時出現問題。我正在使用winscard.dll和C++。使用WinSCard獲取PCSC讀卡器序列號
以下代碼僅適用於卡片存在於閱讀器中的情況。否則,不會檢索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 pbAttr = NULL;
DWORD cByte = SCARD_AUTOALLOCATE;
lReturn = SCardGetAttrib(hCardHandle,
SCARD_ATTR_VENDOR_IFD_SERIAL_NO,
(LPBYTE)&pbAttr,
&cByte);
if (SCARD_S_SUCCESS != lReturn)
{
Console::WriteLine("Failed to retrieve Reader Serial\n");
exit(1); // Or other appropriate action.
}
printf("serial no: %s", pbAttr);
有沒有辦法讓讀卡器的序列號沒有連接到卡?
我覺得我的解決方案可能是一些其他方式來檢索PCSC閱讀器序列號。 – vellotis
您是否嘗試過爲hCardHandle傳遞'NULL'?看起來'SCardGetAttrib'可以返回'SCARD_ATTR_ICC_PRESENCE'的值,如果你必須首先出現一張卡片,這沒什麼意義......(btw我對這個硬件或API一無所知,只是瀏覽了文檔有點) –
我在網上查了一下這個SCardGetAttrib,doc和源代碼。對於SCardGetAttrib,我似乎還得到了hCardHandle。將NULL作爲hCardHandle傳遞給SCardGetAttrib是沒有意義的。您不知何故必須定義您想要獲取的讀卡器屬性。通過使用SCardGetAtrrib,可以通過CardHandle訪問此閱讀器。 我也試圖找到IFD處理勝利,但沒有成功。在PCSC-Lite中,這些屬性通過使用IFDHGetCapabilities進行訪問。 – vellotis