Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <winscard.h>
  5.  
  6. #pragma comment(lib, "Winscard.lib");
  7.  
  8. #define MAX_ATR_SIZE 33
  9. #define MAX_READER_NAME_SIZE 40
  10.  
  11. int main(int argc, char** argv)
  12. {
  13. SCARDCONTEXT hContext;
  14. SCARDHANDLE hCard;
  15. SCARD_READERSTATE_A rgReaderStates[1];
  16. DWORD dwReaderLen, dwState, dwProt, dwAtrLen;
  17. DWORD dwPref, dwReaders, dwRespLen;
  18. LPSTR pcReaders;
  19. LPSTR mszReaders;
  20. BYTE pbAtr[MAX_ATR_SIZE];
  21. BYTE pbResp[10];
  22. LPCSTR mszGroups;
  23. LONG repeat;
  24. int i, p, iReader;
  25. int iReaders[16];
  26.  
  27. BYTE GET_CARD_UID[] = { 0x0F, 0xCA, 0x00, 0x00, 0x00 };
  28.  
  29. printf("SCardEstablishContext: ");
  30. repeat = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
  31. if(repeat != SCARD_S_SUCCESS)
  32. {
  33. printf("Blad!\n");
  34. return -1;
  35. }
  36. else printf("Sukces!\n");
  37. mszGroups = 0;
  38. printf("SCardListReaders: ");
  39. repeat = SCardListReaders(hContext, mszGroups, 0, &dwReaders);
  40. if(repeat != SCARD_S_SUCCESS)
  41. {
  42. SCardReleaseContext(hContext);
  43. printf("Blad!\n");
  44. return -1;
  45. }
  46. else printf("Sukces!\n");
  47. mszReaders = (LPSTR)malloc(sizeof(char) * dwReaders);
  48. printf("SCardListReaders: ");
  49. repeat = SCardListReaders(hContext, mszGroups, mszReaders, &dwReaders);
  50.  
  51. if(repeat != SCARD_S_SUCCESS)
  52. {
  53. SCardReleaseContext(hContext);
  54. free(mszReaders);
  55. printf("Blad!\n");;
  56. return -1;
  57. }
  58. else printf("Sukces!\n");
  59. p = 0;
  60. printf("\nLista dostepnych czytnikow:\n");
  61. for (i = 0; i < dwReaders -1; ++i)
  62. {
  63. iReaders[++p] = i;
  64. printf("Czytnik %02d: %s\n", p, &mszReaders[i]);
  65. while (mszReaders[++i] != '\0');
  66. }
  67. do
  68. {
  69. printf("Wybierz czytnik: ");
  70. scanf_s("%d", &iReader);
  71. }
  72. while (iReader > p || iReader <= 0);
  73.  
  74. printf("\n");
  75. rgReaderStates[0].szReader = &mszReaders[iReaders[iReader]];
  76. rgReaderStates[0].dwCurrentState = SCARD_STATE_EMPTY;
  77. printf("SCardGetStatusChange: ");
  78. repeat = SCardGetStatusChange(hContext, INFINITE, rgReaderStates, 1);
  79. printf("[%02d]\n", repeat);
  80. printf("SCardConnect: ");
  81. repeat = SCardConnect(hContext, &mszReaders[iReaders[iReader]],
  82. SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
  83. &hCard, &dwPref);
  84.  
  85. if(repeat != SCARD_S_SUCCESS)
  86. {
  87. SCardReleaseContext(hContext);
  88. free(mszReaders);
  89. printf("Blad!\n");
  90. return -1;
  91. }
  92. else printf("Sukces!\n");
  93. printf("SCardStatus: ");
  94. dwReaderLen = MAX_READER_NAME_SIZE;
  95. pcReaders = (LPSTR)malloc(sizeof(char)* MAX_READER_NAME_SIZE);
  96. repeat = SCardStatus(hCard, pcReaders, &dwReaderLen, &dwState,
  97. &dwProt, pbAtr, &dwAtrLen);
  98. if(repeat != SCARD_S_SUCCESS)
  99. {
  100. SCardDisconnect(hCard, SCARD_RESET_CARD);
  101. SCardReleaseContext(hContext);
  102. free(mszReaders);
  103. free(pcReaders);
  104. printf("Blad!\n");
  105. return -1;
  106. }
  107. else printf("Sukces!\n");
  108. printf("\nInformacje o czytniku:\n");
  109. printf("Nazwa: %s\n", pcReaders);
  110. printf("Stan: %lx\n", dwState);
  111. printf("Protokol: %lx\n", dwProt - 1);
  112. printf("Rozmiar ATR: %d\n", dwAtrLen);
  113. printf("Wartosc ATR: ");
  114.  
  115. for (i = 0; i < dwAtrLen; i++)
  116. {
  117. printf("%02X ", pbAtr[i]);
  118. }
  119. printf("\n\n");
  120. free(pcReaders);
  121. printf("SCardBeginTransaction: ");
  122. repeat = SCardBeginTransaction(hCard);
  123. if(repeat != SCARD_S_SUCCESS)
  124. {
  125. SCardDisconnect(hCard, SCARD_RESET_CARD);
  126. SCardReleaseContext(hContext);
  127. printf("Blad!\n");
  128. free(mszReaders);
  129. return -1;
  130. }
  131. else printf("Sukces!\n");
  132. printf("SCardTransmit: ");
  133. dwRespLen = 10;
  134. repeat = SCardTransmit(hCard, SCARD_PCI_T0, GET_CARD_UID,
  135. 5, NULL, pbResp, &dwRespLen);
  136. if(repeat != SCARD_S_SUCCESS)
  137. {
  138. SCardDisconnect(hCard, SCARD_RESET_CARD);
  139. SCardReleaseContext(hContext);
  140. printf("Blad!\n");
  141. free(mszReaders);
  142. return -1;
  143.  
  144. }
  145. else printf("Sukces!\n");
  146. printf("Odpowiedz APDU: ");
  147. for (i = 0; i < dwRespLen; i++)
  148. {
  149. printf("%02X ", pbResp[i]);
  150. }
  151. printf("\n\n");
  152. printf("SCardEndTransaction: ");
  153. repeat = SCardEndTransaction(hCard, SCARD_LEAVE_CARD);
  154. if(repeat != SCARD_S_SUCCESS)
  155. {
  156. SCardDisconnect(hCard, SCARD_RESET_CARD);
  157. SCardReleaseContext(hContext);
  158. printf("Blad!\n");
  159. free(mszReaders);
  160. return -1;
  161. }
  162. else printf("Sukces!\n");
  163. printf("SCardDisconnect: ");
  164. repeat = SCardDisconnect(hCard, SCARD_UNPOWER_CARD);
  165. if(repeat != SCARD_S_SUCCESS)
  166. {
  167. SCardReleaseContext(hContext);
  168. printf("Blad!\n");
  169. free(mszReaders);
  170. return -1;
  171. }
  172. else printf("Sukces!\n");
  173. printf("SCardReleaseContext: ");
  174. repeat = SCardReleaseContext(hContext);
  175.  
  176. if(repeat != SCARD_S_SUCCESS)
  177. {
  178. printf("Blad!\n");
  179. free(mszReaders);
  180. return -1;
  181. }
  182. else printf("Sukces!\n");
  183. free(mszReaders);
  184.  
  185. _getch();
  186.  
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement