Created
April 20, 2017 07:48
-
-
Save ArpegiusWhooves/6c90031a19acf560d6f4341d9a4f782d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
LONG lRet = 0; | |
SCARDCONTEXT hContext = 0; | |
SCARDHANDLE hCard = 0; | |
DWORD dwAP = 0; | |
DWORD dwReaders = 0; | |
BYTE pbSend[MAX_APDU_SIZE]; | |
BYTE pbRecv[MAX_APDU_SIZE]; | |
DWORD cbSend = 0; | |
DWORD cbRecv = 0; | |
if ((lRet = SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, &hContext)) != SCARD_S_SUCCESS) { | |
printf("Error initializing SCard context (0x%08X)\n", lRet); | |
return; | |
} | |
switch (lRet = SCardListReaders(hContext, NULL, NULL, &dwReaders)) { | |
case SCARD_S_SUCCESS: | |
break; | |
default: | |
printf("Error checking card readers (0x%08X)\n", lRet); | |
case SCARD_E_NO_READERS_AVAILABLE: | |
printf("No device found.\n"); | |
return; | |
} | |
WCHAR* mszReaders = new WCHAR[dwReaders]; | |
if((lRet = SCardListReaders(hContext, NULL, mszReaders.data(), &dwReaders))!=SCARD_S_SUCCESS) { | |
printf("Error listing card readers (0x%08X)\n", lRet); | |
return; | |
} | |
for(int i= 0; i< (int)dwReaders; i+= wcslen(mszReaders.data()+i)+1) { | |
if(mszReaders[i] == '\0') continue; | |
switch((lRet = SCardConnect(hContext, mszReaders+i, SCARD_SHARE_SHARED, SCARD_PROTOCOL_Tx, &hCard, &dwAP))) | |
{ | |
case SCARD_W_REMOVED_CARD: | |
continue; | |
case SCARD_S_SUCCESS: | |
break; | |
default: | |
printf("Error connecting to the card (0x%08X)\n", lRet); | |
continue; | |
} | |
printf("Reading card from device: %S\n",mmszReaders+i); | |
// Get Data - Read card serial number | |
memcpy(pbSend, "\xFF\xCA\x00\x00\x00", 5); | |
cbSend = 5; | |
cbRecv = MAX_APDU_SIZE; | |
if ((lRet = SCardTransmit(hCard, SCARD_PCI_T1, pbSend, cbSend, NULL, pbRecv, &cbRecv)) != SCARD_S_SUCCESS) | |
continue; | |
printf("Card UID: "); | |
for (DWORD i = 0; i < cbRecv - 2; i++) | |
{ | |
printf("%02X", pbRecv[i]); | |
if (i == cbRecv - 3) printf("\n"); | |
} | |
SCardDisconnect(hCard, SCARD_LEAVE_CARD); | |
} | |
SCardReleaseContext(hContext); | |
delete[] mszReaders; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment