Guest User

pcsclite

a guest
Jul 27th, 2022
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.87 KB | None | 0 0
  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace LibPCSCLite
  5. {
  6. public sealed class PCSCLite
  7. {
  8. public const String WINSCARD = "winscard.dll";
  9.  
  10. /*===========================================================
  11. ' STATE
  12. '===========================================================*/
  13. public const uint SCARD_UNKNOWN = 0x0001;
  14. public const uint SCARD_ABSENT = 0x0002;
  15. public const uint SCARD_PRESENT = 0x0004;
  16. public const uint SCARD_SWALLOWED = 0x0008;
  17. public const uint SCARD_POWERED = 0x0010;
  18. public const uint SCARD_NEGOTIABLE = 0x0020;
  19. public const uint SCARD_SPECIFIC = 0x0040;
  20. public const uint SCARD_STATE_UNAWARE = 0x0000;
  21. public const uint SCARD_STATE_IGNORE = 0x0001;
  22. public const uint SCARD_STATE_CHANGED = 0x0002;
  23. public const uint SCARD_STATE_UNKNOWN = 0x0004;
  24. public const uint SCARD_STATE_UNAVAILABLE = 0x0008;
  25. public const uint SCARD_STATE_EMPTY = 0x0010;
  26. public const uint SCARD_STATE_PRESENT = 0x0020;
  27. public const uint SCARD_STATE_EXCLUSIVE = 0x0080;
  28. public const uint SCARD_STATE_INUSE = 0x0100;
  29. public const uint SCARD_STATE_MUSE = 0x0200;
  30.  
  31. /*===========================================================
  32. ' SHARE MODE
  33. '===========================================================*/
  34. public const uint SCARD_SHARE_EXCLUSIVE = 0x0001;
  35. public const uint SCARD_SHARE_SHARED = 0x0002;
  36. public const uint SCARD_SHARE_DIRECT = 0x0003;
  37.  
  38. /*===========================================================
  39. ' PROTOCOL
  40. '===========================================================*/
  41. public const uint SCARD_PROTOCOL_UNDEFINED = 0x0000;
  42. public const uint SCARD_PROTOCOL_T0 = 0x0001;
  43. public const uint SCARD_PROTOCOL_T1 = 0x0002;
  44. public const uint SCARD_PROTOCOL_RAW = 0x0004;
  45. public const uint SCARD_PROTOCOL_T15 = 0x0008;
  46. public const uint SCARD_PROTOCOL_ANY = (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1);
  47.  
  48. /*===========================================================
  49. ' SCOPE
  50. '===========================================================*/
  51. public const uint SCARD_SCOPE_USER = 0x0000;
  52. public const uint SCARD_SCOPE_TERMINAL = 0x0001;
  53. public const uint SCARD_SCOPE_SYSTEM = 0x0002;
  54. public const uint SCARD_SCOPE_GLOBAL = 0x0003;
  55.  
  56. /*===========================================================
  57. ' DISPOSITION
  58. '===========================================================*/
  59. public const uint SCARD_LEAVE_CARD = 0x0000;
  60. public const uint SCARD_RESET_CARD = 0x0001;
  61. public const uint SCARD_UNPOWER_CARD = 0x0002;
  62. public const uint SCARD_EJECT_CARD = 0x0003;
  63.  
  64. /*===========================================================
  65. ' ERROR CODE
  66. '===========================================================*/
  67. public const int SCARD_S_SUCCESS = 0;
  68.  
  69.  
  70. public static SCARD_IO_REQUEST SCARD_PCI_T0()
  71. {
  72. return new SCARD_IO_REQUEST(SCARD_PROTOCOL_T0, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
  73. }
  74.  
  75. public static SCARD_IO_REQUEST SCARD_PCI_T1()
  76. {
  77. return new SCARD_IO_REQUEST(SCARD_PROTOCOL_T1, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
  78. }
  79.  
  80. public static SCARD_IO_REQUEST SCARD_PCI_RAW()
  81. {
  82. return new SCARD_IO_REQUEST(SCARD_PROTOCOL_RAW, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
  83. }
  84.  
  85. /// <summary>
  86. /// Creates an Application Context to the PC/SC Resource Manager.
  87. /// </summary>
  88. /// <param name="dwScope"></param>
  89. /// <param name="pvReserved1"></param>
  90. /// <param name="pvReserved2"></param>
  91. /// <param name="phContext"></param>
  92. /// <returns></returns>
  93. [DllImport(WINSCARD)]
  94. public static extern int SCardEstablishContext(
  95. [In] uint dwScope,
  96. [In] IntPtr pvReserved1,
  97. [In] IntPtr pvReserved2,
  98. [Out] out IntPtr phContext);
  99.  
  100. /// <summary>
  101. /// Destroys a communication context to the PC/SC Resource Manager.
  102. /// </summary>
  103. /// <param name="hContext"></param>
  104. /// <returns></returns>
  105. [DllImport(WINSCARD)]
  106. public static extern int SCardReleaseContext(
  107. [In] IntPtr hContext);
  108.  
  109. /// <summary>
  110. /// Establishes a connection to the reader specified in * szReader.
  111. /// </summary>
  112. /// <param name="hContext"></param>
  113. /// <param name="szReader"></param>
  114. /// <param name="dwShareMode"></param>
  115. /// <param name="dwPreferredProtocols"></param>
  116. /// <param name="phCard"></param>
  117. /// <param name="pdwActiveProtocol"></param>
  118. /// <returns></returns>
  119. [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
  120. public static extern int SCardConnect(
  121. [In] IntPtr hContext,
  122. [In] string szReader,
  123. [In] uint dwShareMode,
  124. [In] uint dwPreferredProtocols,
  125. [Out] out IntPtr phCard,
  126. [Out] out uint pdwActiveProtocol);
  127.  
  128. /// <summary>
  129. /// Reestablishes a connection to a reader that was previously connected to using SCardConnect().
  130. /// </summary>
  131. /// <param name="hCard"></param>
  132. /// <param name="dwShareMode"></param>
  133. /// <param name="dwPreferredProtocols"></param>
  134. /// <param name="dwInitialization"></param>
  135. /// <param name="pdActiveProtocol"></param>
  136. /// <returns></returns>
  137. [DllImport(WINSCARD)]
  138. public static extern int SCardReconnect(
  139. [In] IntPtr hCard,
  140. [In] uint dwShareMode,
  141. [In] uint dwPreferredProtocols,
  142. [In] uint dwInitialization,
  143. [Out] out uint pdActiveProtocol);
  144.  
  145. /// <summary>
  146. /// Terminates a connection made through SCardConnect().
  147. /// </summary>
  148. /// <param name="hCard"></param>
  149. /// <param name="dwDisposition"></param>
  150. /// <returns></returns>
  151. [DllImport(WINSCARD)]
  152. public static extern int SCardDisconnect(
  153. [In] IntPtr hCard,
  154. [In] uint dwDisposition);
  155.  
  156. /// <summary>
  157. /// Establishes a temporary exclusive access mode for doing a serie of commands in a transaction.
  158. /// </summary>
  159. /// <param name="hCard"></param>
  160. /// <returns></returns>
  161. [DllImport(WINSCARD)]
  162. public static extern int SCardBeginTransaction(
  163. [In] IntPtr hCard);
  164.  
  165. /// <summary>
  166. /// Ends a previously begun transaction.
  167. /// </summary>
  168. /// <param name="hCard"></param>
  169. /// <param name="dwDisposition"></param>
  170. /// <returns></returns>
  171. [DllImport(WINSCARD)]
  172. public static extern int SCardEndTransaction(
  173. [In] IntPtr hCard,
  174. [In] uint dwDisposition);
  175.  
  176. /// <summary>
  177. /// Returns the current status of the reader connected to by hCard.
  178. /// </summary>
  179. /// <param name="hCard"></param>
  180. /// <param name="szReaderName"></param>
  181. /// <param name="pcchReaderLen"></param>
  182. /// <param name="pdwState">Current state of this reader</param>
  183. /// <param name="pdwProtocol"> Current protocol of this reader</param>
  184. /// <param name="pbAtr"></param>
  185. /// <param name="pcbAtrLen"></param>
  186. /// <returns></returns>
  187. [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
  188. public static extern int SCardStatus(
  189. [In] IntPtr hCard,
  190. [In,Out] string szReaderName,
  191. [In, Out] ref uint pcchReaderLen,
  192. [Out] out uint pdwState,
  193. [Out] out uint pdwProtocol,
  194. [Out] byte pbAtr,
  195. [Out] out uint pcbAtrLen);
  196.  
  197. /// <summary>
  198. /// Blocks execution until the current availability of the cards in a specific set of readers changes.
  199. /// </summary>
  200. /// <param name="hContext"></param>
  201. /// <param name="dwTimeout"></param>
  202. /// <param name="rgReaderStates"></param>
  203. /// <param name="cReaders"></param>
  204. /// <returns></returns>
  205. [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
  206. public static extern int SCardGetStatusChange(
  207. [In] IntPtr hContext,
  208. [In] uint dwTimeout,
  209. [In,Out] SCARD_READERSTATE[] rgReaderStates,
  210. [In] uint cReaders);
  211.  
  212. /// <summary>
  213. /// Sends a command directly to the IFD Handler (reader driver) to be processed by the reader.
  214. /// </summary>
  215. /// <param name="hCard"></param>
  216. /// <param name="dwControlCode"></param>
  217. /// <param name="pbSendBuffer"></param>
  218. /// <param name="cbSendLength"></param>
  219. /// <param name="pbRecvBuffer"></param>
  220. /// <param name="cbRecvLength"></param>
  221. /// <param name="lpBytesReturned"></param>
  222. /// <returns></returns>
  223. [DllImport(WINSCARD)]
  224. public static extern int SCardControl(
  225. [In] IntPtr hCard,
  226. [In] uint dwControlCode,
  227. [In] byte[] pbSendBuffer,
  228. [In] uint cbSendLength,
  229. [Out] byte[] pbRecvBuffer,
  230. [In] uint cbRecvLength,
  231. [Out] out uint lpBytesReturned);
  232.  
  233. /// <summary>
  234. /// Get an attribute from the IFD Handler (reader driver).
  235. /// </summary>
  236. /// <param name="hCard"></param>
  237. /// <param name="dwAttrId"></param>
  238. /// <param name="pbAttr"></param>
  239. /// <param name="pcbAttrLen"></param>
  240. /// <returns></returns>
  241. [DllImport(WINSCARD)]
  242. public static extern int SCardGetAttrib(
  243. [In] IntPtr hCard,
  244. [In] uint dwAttrId,
  245. [Out] byte[] pbAttr,
  246. [In, Out] ref uint pcbAttrLen);
  247.  
  248. /// <summary>
  249. ///
  250. /// </summary>
  251. /// <param name="hCard"></param>
  252. /// <param name="dwAttrId"></param>
  253. /// <param name="pbAttr"></param>
  254. /// <param name="cbAttrLen"></param>
  255. /// <returns></returns>
  256. [DllImport(WINSCARD)]
  257. public static extern int SCardSetAttrib(
  258. [In] IntPtr hCard,
  259. [In] uint dwAttrId,
  260. [In] byte[] pbAttr,
  261. [In] uint cbAttrLen);
  262.  
  263. /// <summary>
  264. ///
  265. /// </summary>
  266. /// <param name="hCard"></param>
  267. /// <param name="pioSendPci"></param>
  268. /// <param name="pbSendBuffer"></param>
  269. /// <param name="cbSendLength"></param>
  270. /// <param name="pioRecvPci"></param>
  271. /// <param name="pbRecvBuffer"></param>
  272. /// <param name="pcbRecvLength"></param>
  273. /// <returns></returns>
  274. [DllImport(WINSCARD)]
  275. public static extern int SCardTransmit(
  276. [In] IntPtr hCard,
  277. [In] ref SCARD_IO_REQUEST pioSendPci,
  278. [In] byte[] pbSendBuffer,
  279. [In] uint cbSendLength,
  280. [In, Out] ref SCARD_IO_REQUEST pioRecvPci,
  281. [Out] byte[] pbRecvBuffer,
  282. [In, Out] ref uint pcbRecvLength);
  283.  
  284. [DllImport(WINSCARD)]
  285. public static extern int SCardTransmit(
  286. [In] IntPtr hCard,
  287. [In] ref SCARD_IO_REQUEST pioSendPci,
  288. [In] byte[] pbSendBuffer,
  289. [In] uint cbSendLength,
  290. [In, Out] IntPtr pioRecvPci,
  291. [Out] byte[] pbRecvBuffer,
  292. [In, Out] ref uint pcbRecvLength);
  293.  
  294. [DllImport(WINSCARD)]
  295. public static extern int SCardTransmit(
  296. [In] IntPtr hCard,
  297. [In] IntPtr pioSendPci,
  298. [In] byte[] pbSendBuffer,
  299. [In] uint cbSendLength,
  300. [In, Out] IntPtr pioRecvPci,
  301. [Out] byte[] pbRecvBuffer,
  302. [In, Out] ref uint pcbRecvLength);
  303.  
  304. /// <summary>
  305. ///
  306. /// </summary>
  307. /// <param name="hContext"></param>
  308. /// <param name="mszGroups"></param>
  309. /// <param name="pmszReaders"></param>
  310. /// <param name="pcchReaders"></param>
  311. /// <returns></returns>
  312. [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
  313. public static extern int SCardListReaders(
  314. [In] IntPtr hContext,
  315. [In] byte[] mszGroups,
  316. [Out] byte[] pmszReaders,
  317. [In, Out] ref uint pcchReaders);
  318.  
  319. /// <summary>
  320. ///
  321. /// </summary>
  322. /// <param name="hContext"></param>
  323. /// <param name="pvMem"></param>
  324. /// <returns></returns>
  325. [DllImport(WINSCARD)]
  326. public static extern int SCardFreeMemory(
  327. [In] IntPtr hContext,
  328. [In] IntPtr pvMem);
  329.  
  330. /// <summary>
  331. ///
  332. /// </summary>
  333. /// <param name="hContext"></param>
  334. /// <param name="szGroups"></param>
  335. /// <param name="pcchGroups"></param>
  336. /// <returns></returns>
  337. [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
  338. public static extern int SCardListReaderGroups(
  339. [In] IntPtr hContext,
  340. [Out] byte[] szGroups,
  341. [In, Out] ref uint pcchGroups);
  342.  
  343. /// <summary>
  344. ///
  345. /// </summary>
  346. /// <param name="hContext"></param>
  347. /// <returns></returns>
  348. [DllImport(WINSCARD)]
  349. public static extern int SCardCancel(
  350. [In] IntPtr hContext);
  351.  
  352. /// <summary>
  353. /// Check if a SCARDCONTEXT is valid.
  354. /// </summary>
  355. /// <param name="hContext"></param>
  356. /// <returns></returns>
  357. [DllImport(WINSCARD)]
  358. public static extern int SCardIsValidContext(
  359. [In] IntPtr hContext);
  360. }
  361. }
  362.  
Advertisement
Add Comment
Please, Sign In to add comment