Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <winscard.h>
- #pragma comment(lib, "Winscard.lib");
- #define MAX_ATR_SIZE 33
- #define MAX_READER_NAME_SIZE 40
- int main(int argc, char** argv)
- {
- SCARDCONTEXT hContext;
- SCARDHANDLE hCard;
- SCARD_READERSTATE_A rgReaderStates[1];
- DWORD dwReaderLen, dwState, dwProt, dwAtrLen;
- DWORD dwPref, dwReaders, dwRespLen;
- LPSTR pcReaders;
- LPSTR mszReaders;
- BYTE pbAtr[MAX_ATR_SIZE];
- BYTE pbResp[10];
- LPCSTR mszGroups;
- LONG repeat;
- int i, p, iReader;
- int iReaders[16];
- BYTE GET_CARD_UID[] = { 0x0F, 0xCA, 0x00, 0x00, 0x00 };
- printf("SCardEstablishContext: ");
- repeat = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
- if(repeat != SCARD_S_SUCCESS)
- {
- printf("Blad!\n");
- return -1;
- }
- else printf("Sukces!\n");
- mszGroups = 0;
- printf("SCardListReaders: ");
- repeat = SCardListReaders(hContext, mszGroups, 0, &dwReaders);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardReleaseContext(hContext);
- printf("Blad!\n");
- return -1;
- }
- else printf("Sukces!\n");
- mszReaders = (LPSTR)malloc(sizeof(char) * dwReaders);
- printf("SCardListReaders: ");
- repeat = SCardListReaders(hContext, mszGroups, mszReaders, &dwReaders);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardReleaseContext(hContext);
- free(mszReaders);
- printf("Blad!\n");;
- return -1;
- }
- else printf("Sukces!\n");
- p = 0;
- printf("\nLista dostepnych czytnikow:\n");
- for (i = 0; i < dwReaders -1; ++i)
- {
- iReaders[++p] = i;
- printf("Czytnik %02d: %s\n", p, &mszReaders[i]);
- while (mszReaders[++i] != '\0');
- }
- do
- {
- printf("Wybierz czytnik: ");
- scanf_s("%d", &iReader);
- }
- while (iReader > p || iReader <= 0);
- printf("\n");
- rgReaderStates[0].szReader = &mszReaders[iReaders[iReader]];
- rgReaderStates[0].dwCurrentState = SCARD_STATE_EMPTY;
- printf("SCardGetStatusChange: ");
- repeat = SCardGetStatusChange(hContext, INFINITE, rgReaderStates, 1);
- printf("[%02d]\n", repeat);
- printf("SCardConnect: ");
- repeat = SCardConnect(hContext, &mszReaders[iReaders[iReader]],
- SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
- &hCard, &dwPref);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardReleaseContext(hContext);
- free(mszReaders);
- printf("Blad!\n");
- return -1;
- }
- else printf("Sukces!\n");
- printf("SCardStatus: ");
- dwReaderLen = MAX_READER_NAME_SIZE;
- pcReaders = (LPSTR)malloc(sizeof(char)* MAX_READER_NAME_SIZE);
- repeat = SCardStatus(hCard, pcReaders, &dwReaderLen, &dwState,
- &dwProt, pbAtr, &dwAtrLen);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardDisconnect(hCard, SCARD_RESET_CARD);
- SCardReleaseContext(hContext);
- free(mszReaders);
- free(pcReaders);
- printf("Blad!\n");
- return -1;
- }
- else printf("Sukces!\n");
- printf("\nInformacje o czytniku:\n");
- printf("Nazwa: %s\n", pcReaders);
- printf("Stan: %lx\n", dwState);
- printf("Protokol: %lx\n", dwProt - 1);
- printf("Rozmiar ATR: %d\n", dwAtrLen);
- printf("Wartosc ATR: ");
- for (i = 0; i < dwAtrLen; i++)
- {
- printf("%02X ", pbAtr[i]);
- }
- printf("\n\n");
- free(pcReaders);
- printf("SCardBeginTransaction: ");
- repeat = SCardBeginTransaction(hCard);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardDisconnect(hCard, SCARD_RESET_CARD);
- SCardReleaseContext(hContext);
- printf("Blad!\n");
- free(mszReaders);
- return -1;
- }
- else printf("Sukces!\n");
- printf("SCardTransmit: ");
- dwRespLen = 10;
- repeat = SCardTransmit(hCard, SCARD_PCI_T0, GET_CARD_UID,
- 5, NULL, pbResp, &dwRespLen);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardDisconnect(hCard, SCARD_RESET_CARD);
- SCardReleaseContext(hContext);
- printf("Blad!\n");
- free(mszReaders);
- return -1;
- }
- else printf("Sukces!\n");
- printf("Odpowiedz APDU: ");
- for (i = 0; i < dwRespLen; i++)
- {
- printf("%02X ", pbResp[i]);
- }
- printf("\n\n");
- printf("SCardEndTransaction: ");
- repeat = SCardEndTransaction(hCard, SCARD_LEAVE_CARD);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardDisconnect(hCard, SCARD_RESET_CARD);
- SCardReleaseContext(hContext);
- printf("Blad!\n");
- free(mszReaders);
- return -1;
- }
- else printf("Sukces!\n");
- printf("SCardDisconnect: ");
- repeat = SCardDisconnect(hCard, SCARD_UNPOWER_CARD);
- if(repeat != SCARD_S_SUCCESS)
- {
- SCardReleaseContext(hContext);
- printf("Blad!\n");
- free(mszReaders);
- return -1;
- }
- else printf("Sukces!\n");
- printf("SCardReleaseContext: ");
- repeat = SCardReleaseContext(hContext);
- if(repeat != SCARD_S_SUCCESS)
- {
- printf("Blad!\n");
- free(mszReaders);
- return -1;
- }
- else printf("Sukces!\n");
- free(mszReaders);
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement