/pyscard-1.6.12/smartcard/scard/scard.py

https://bitbucket.org/ufabdyop/ryant-tap-to-enable · Python · 1129 lines · 738 code · 48 blank · 343 comment · 51 complexity · dacb0f5dd6bf53505663487b051df406 MD5 · raw file

  1. # This file was automatically generated by SWIG (http://www.swig.org).
  2. # Version 1.3.40
  3. #
  4. # Do not make changes to this file unless you know what you are doing--modify
  5. # the SWIG interface file instead.
  6. # This file is compatible with both classic and new-style classes.
  7. """
  8. The smartcard.scard module is a simple wrapper on top of the C language
  9. PCSC SCardXXX API.
  10. The smartcard.scard module is the lower layer of the pyscard
  11. framework that provides a higher level interface.
  12. You should avoid using the smartcard.scard package directly, and use the
  13. pyscard directly because:
  14. - smartcard.scard being a C wrapper, the code tends to look like C code
  15. written in python syntax
  16. - the smartcard package provides higher level abstractions (e.g.
  17. CardType, CardConnection), and makes programming easier since it is
  18. totally written in Python
  19. You can still use the smartcard.scard package if you want to write your
  20. own framework, or if you want to perform quick-and-dirty port of C
  21. language programs using SCardXXX calls, or if there are features of
  22. SCardXXX API that you want to use and that are not available in the
  23. pyscard library.
  24. Introduction
  25. The smartcard.scard module is a Python wrapper around PCSC smart card base
  26. services. On Windows, the wrapper is performed around the smart card base
  27. components winscard library. On linux, the wrapper is performed around
  28. PCSC-lite library.
  29. On Windows using the smart card base components, the smartcard.scard
  30. module provides mapping for the following API functions:
  31. - SCardAddReaderToGroup
  32. - SCardBeginTransaction
  33. - SCardCancel
  34. - SCardConnect
  35. - SCardControl
  36. - SCardDisconnect
  37. - SCardEndTransaction
  38. - SCardEstablishContext
  39. - SCardForgetCardType
  40. - SCardForgetReader
  41. - SCardForgetReaderGroup
  42. - SCardGetAttrib
  43. - SCardGetCardTypeProviderName
  44. - SCardGetErrorMessage
  45. - SCardGetStatusChange
  46. - SCardIntroduceCardType
  47. - SCardIntroduceReader
  48. - SCardIntroduceReaderGroup
  49. - SCardIsValidContext
  50. - SCardListInterfaces
  51. - SCardListCards
  52. - SCardListReaders
  53. - SCardListReaderGroups
  54. - SCardLocateCards
  55. - SCardReconnect
  56. - SCardReleaseContext
  57. - SCardRemoveReaderFromGroup
  58. - SCardSetAttrib
  59. - SCardStatus
  60. - SCardTransmit
  61. On linux or Mac OS X Leopard with PCSC lite, the smartcard.scard module
  62. provides mapping for the following API functions:
  63. - SCardBeginTransaction
  64. - SCardCancel
  65. - SCardConnect
  66. - SCardControl
  67. - SCardDisconnect
  68. - SCardEndTransaction
  69. - SCardEstablishContext
  70. - SCardGetAttrib
  71. - SCardGetStatusChange
  72. - SCardIsValidContext
  73. - SCardListReaders
  74. - SCardListReaderGroups
  75. - SCardReconnect
  76. - SCardReleaseContext
  77. - SCardSetAttrib
  78. - SCardStatus
  79. - SCardTransmit
  80. On Mac OS X Tiger with PCSC lite, the smartcard.scard module provides
  81. mapping for the following API functions:
  82. - SCardBeginTransaction
  83. - SCardCancel
  84. - SCardConnect
  85. - SCardControl
  86. - SCardDisconnect
  87. - SCardEndTransaction
  88. - SCardEstablishContext
  89. - SCardGetStatusChange
  90. - SCardListReaders
  91. - SCardListReaderGroups
  92. - SCardReconnect
  93. - SCardReleaseContext
  94. - SCardStatus
  95. - SCardTransmit
  96. The following PCSC smart card functions are not wrapped by the scard
  97. module on any platform:
  98. - GetOpenCardName
  99. - SCardFreeMemory
  100. - SCardGetProviderId
  101. - SCardSetCartTypeProviderName
  102. - SCardUIDlgSelectCard
  103. Comments, bug reports, improvements welcome.
  104. -------------------------------------------------------------------------------
  105. Copyright 2001-2010 gemalto
  106. @Author: Jean-Daniel Aussel, mailto:jean-daniel.aussel@gemalto.com
  107. @Author: Ludovic Rousseau, mailto:ludovic.rousseau@free.fr
  108. This file is part of pyscard.
  109. pyscard is free software; you can redistribute it and/or modify it
  110. under the terms of the GNU Lesser General Public License as published by
  111. the Free Software Foundation; either version 2.1 of the License, or (at
  112. your option) any later version.
  113. pyscard is distributed in the hope that it will be useful, but
  114. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  115. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
  116. License for more details.
  117. You should have received a copy of the GNU Lesser General Public License
  118. along with pyscard; if not, write to the Free Software Foundation,
  119. Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  120. """
  121. from sys import version_info
  122. if version_info >= (2,6,0):
  123. def swig_import_helper():
  124. from os.path import dirname
  125. import imp
  126. fp = None
  127. try:
  128. fp, pathname, description = imp.find_module('_scard', [dirname(__file__)])
  129. except ImportError:
  130. import _scard
  131. return _scard
  132. if fp is not None:
  133. try:
  134. _mod = imp.load_module('_scard', fp, pathname, description)
  135. finally:
  136. fp.close()
  137. return _mod
  138. _scard = swig_import_helper()
  139. del swig_import_helper
  140. else:
  141. import _scard
  142. del version_info
  143. try:
  144. _swig_property = property
  145. except NameError:
  146. pass # Python < 2.2 doesn't have 'property'.
  147. def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
  148. if (name == "thisown"): return self.this.own(value)
  149. if (name == "this"):
  150. if type(value).__name__ == 'SwigPyObject':
  151. self.__dict__[name] = value
  152. return
  153. method = class_type.__swig_setmethods__.get(name,None)
  154. if method: return method(self,value)
  155. if (not static) or hasattr(self,name):
  156. self.__dict__[name] = value
  157. else:
  158. raise AttributeError("You cannot add attributes to %s" % self)
  159. def _swig_setattr(self,class_type,name,value):
  160. return _swig_setattr_nondynamic(self,class_type,name,value,0)
  161. def _swig_getattr(self,class_type,name):
  162. if (name == "thisown"): return self.this.own()
  163. method = class_type.__swig_getmethods__.get(name,None)
  164. if method: return method(self)
  165. raise AttributeError(name)
  166. def _swig_repr(self):
  167. try: strthis = "proxy of " + self.this.__repr__()
  168. except: strthis = ""
  169. return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
  170. try:
  171. _object = object
  172. _newclass = 1
  173. except AttributeError:
  174. class _object : pass
  175. _newclass = 0
  176. def SCardIsValidContext(*args):
  177. """
  178. SCardIsValidContext( hcontext) -> SCARDRETCODE
  179. Parameters:
  180. hcontext: context handle return from SCardEstablishContext()
  181. hcontext: context handle return from SCardEstablishContext()
  182. This function determines whether a smart card context handle is still
  183. valid. After a smart card context handle has been set by
  184. SCardEstablishContext(), it may become not valid if the resource manager
  185. service has been shut down.
  186. from smartcard.scard import *
  187. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  188. hresult = SCardIsValidContext(hcontext)
  189. if hresult != SCARD_S_SUCCESS:
  190. raise error, 'Invalid context: ' + SCardGetErrorMessage(hresult)
  191. ...
  192. """
  193. return _scard.SCardIsValidContext(*args)
  194. def SCardGetAttrib(*args):
  195. """
  196. SCardGetAttrib( hcard, dwAttrId) -> SCARDRETCODE
  197. Parameters:
  198. hcard: card handle return from SCardConnect()
  199. dwAttrId: value of attribute to get
  200. hcard: card handle return from SCardConnect()
  201. dwAttrId: value of attribute to get
  202. This function get an attribute from the IFD Handler.
  203. For PCSC lite, the list of possible attributes is:
  204. * SCARD_ATTR_ASYNC_PROTOCOL_TYPES
  205. * SCARD_ATTR_ATR_STRING
  206. * SCARD_ATTR_CHANNEL_ID
  207. * SCARD_ATTR_CHARACTERISTICS
  208. * SCARD_ATTR_CURRENT_BWT
  209. * SCARD_ATTR_CURRENT_CLK
  210. * SCARD_ATTR_CURRENT_CWT
  211. * SCARD_ATTR_CURRENT_D
  212. * SCARD_ATTR_CURRENT_EBC_ENCODING
  213. * SCARD_ATTR_CURRENT_F
  214. * SCARD_ATTR_CURRENT_IFSC
  215. * SCARD_ATTR_CURRENT_IFSD
  216. * SCARD_ATTR_CURRENT_IO_STATE
  217. * SCARD_ATTR_CURRENT_N
  218. * SCARD_ATTR_CURRENT_PROTOCOL_TYPE
  219. * SCARD_ATTR_CURRENT_W
  220. * SCARD_ATTR_DEFAULT_CLK
  221. * SCARD_ATTR_DEFAULT_DATA_RATE
  222. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
  223. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
  224. * SCARD_ATTR_DEVICE_IN_USE
  225. * SCARD_ATTR_DEVICE_SYSTEM_NAME_A
  226. * SCARD_ATTR_DEVICE_SYSTEM_NAME_W
  227. * SCARD_ATTR_DEVICE_UNIT
  228. * SCARD_ATTR_ESC_AUTHREQUEST
  229. * SCARD_ATTR_ESC_CANCEL
  230. * SCARD_ATTR_ESC_RESET
  231. * SCARD_ATTR_EXTENDED_BWT
  232. * SCARD_ATTR_ICC_INTERFACE_STATUS
  233. * SCARD_ATTR_ICC_PRESENCE
  234. * SCARD_ATTR_ICC_TYPE_PER_ATR
  235. * SCARD_ATTR_MAX_CLK
  236. * SCARD_ATTR_MAX_DATA_RATE
  237. * SCARD_ATTR_MAX_IFSD
  238. * SCARD_ATTR_MAXINPUT
  239. * SCARD_ATTR_POWER_MGMT_SUPPORT
  240. * SCARD_ATTR_SUPRESS_T1_IFS_REQUEST
  241. * SCARD_ATTR_SYNC_PROTOCOL_TYPES
  242. * SCARD_ATTR_USER_AUTH_INPUT_DEVICE
  243. * SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE
  244. * SCARD_ATTR_VENDOR_IFD_SERIAL_NO
  245. * SCARD_ATTR_VENDOR_IFD_TYPE
  246. * SCARD_ATTR_VENDOR_IFD_VERSION
  247. * SCARD_ATTR_VENDOR_NAME
  248. For Windows Resource Manager, the list of possible attributes is:
  249. * SCARD_ATTR_VENDOR_NAME
  250. * SCARD_ATTR_VENDOR_IFD_TYPE
  251. * SCARD_ATTR_VENDOR_IFD_VERSION
  252. * SCARD_ATTR_VENDOR_IFD_SERIAL_NO
  253. * SCARD_ATTR_CHANNEL_ID
  254. * SCARD_ATTR_DEFAULT_CLK
  255. * SCARD_ATTR_MAX_CLK
  256. * SCARD_ATTR_DEFAULT_DATA_RATE
  257. * SCARD_ATTR_MAX_DATA_RATE
  258. * SCARD_ATTR_MAX_IFSD
  259. * SCARD_ATTR_POWER_MGMT_SUPPORT
  260. * SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE
  261. * SCARD_ATTR_USER_AUTH_INPUT_DEVICE
  262. * SCARD_ATTR_CHARACTERISTICS
  263. * SCARD_ATTR_CURRENT_PROTOCOL_TYPE
  264. * SCARD_ATTR_CURRENT_CLK
  265. * SCARD_ATTR_CURRENT_F
  266. * SCARD_ATTR_CURRENT_D
  267. * SCARD_ATTR_CURRENT_N
  268. * SCARD_ATTR_CURRENT_W
  269. * SCARD_ATTR_CURRENT_IFSC
  270. * SCARD_ATTR_CURRENT_IFSD
  271. * SCARD_ATTR_CURRENT_BWT
  272. * SCARD_ATTR_CURRENT_CWT
  273. * SCARD_ATTR_CURRENT_EBC_ENCODING
  274. * SCARD_ATTR_EXTENDED_BWT
  275. * SCARD_ATTR_ICC_PRESENCE
  276. * SCARD_ATTR_ICC_INTERFACE_STATUS
  277. * SCARD_ATTR_CURRENT_IO_STATE
  278. * SCARD_ATTR_ATR_STRING
  279. * SCARD_ATTR_ICC_TYPE_PER_ATR
  280. * SCARD_ATTR_ESC_RESET
  281. * SCARD_ATTR_ESC_CANCEL
  282. * SCARD_ATTR_ESC_AUTHREQUEST
  283. * SCARD_ATTR_MAXINPUT
  284. * SCARD_ATTR_DEVICE_UNIT
  285. * SCARD_ATTR_DEVICE_IN_USE
  286. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
  287. * SCARD_ATTR_DEVICE_SYSTEM_NAME_A
  288. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
  289. * SCARD_ATTR_DEVICE_SYSTEM_NAME_W
  290. * SCARD_ATTR_SUPRESS_T1_IFS_REQUEST
  291. Not all the dwAttrId values listed above may be implemented in the IFD
  292. Handler you are using. And some dwAttrId values not listed here may be
  293. implemented.
  294. from smartcard.scard import *
  295. ... establish context and connect to card ...
  296. hresult, attrib = SCardGetAttrib(hcard, SCARD_ATTR_ATR_STRING)
  297. if hresult == SCARD_S_SUCCESS:
  298. for j in attrib:
  299. print '0x%.2X' % attrib,
  300. ...
  301. """
  302. return _scard.SCardGetAttrib(*args)
  303. def SCardSetAttrib(*args):
  304. """
  305. SCardSetAttrib( hcard, dwAttrId, BYTELIST ATTRIBUTESIN) -> SCARDRETCODE
  306. Parameters:
  307. hcard: card handle return from SCardConnect()
  308. dwAttrId: value of attribute to get
  309. ATTRIBUTESIN: BYTELIST * value
  310. hcard: card handle return from SCardConnect()
  311. dwAttrId: value of attribute to get
  312. ATTRIBUTESIN: BYTELIST * value
  313. This function sets an attribute from the IFD Handler. Not all
  314. attributes are supported by all readers nor can they be set at all
  315. times.
  316. For PCSC lite, the list of possible attributes is:
  317. * SCARD_ATTR_ASYNC_PROTOCOL_TYPES
  318. * SCARD_ATTR_ATR_STRING
  319. * SCARD_ATTR_CHANNEL_ID
  320. * SCARD_ATTR_CHARACTERISTICS
  321. * SCARD_ATTR_CURRENT_BWT
  322. * SCARD_ATTR_CURRENT_CLK
  323. * SCARD_ATTR_CURRENT_CWT
  324. * SCARD_ATTR_CURRENT_D
  325. * SCARD_ATTR_CURRENT_EBC_ENCODING
  326. * SCARD_ATTR_CURRENT_F
  327. * SCARD_ATTR_CURRENT_IFSC
  328. * SCARD_ATTR_CURRENT_IFSD
  329. * SCARD_ATTR_CURRENT_IO_STATE
  330. * SCARD_ATTR_CURRENT_N
  331. * SCARD_ATTR_CURRENT_PROTOCOL_TYPE
  332. * SCARD_ATTR_CURRENT_W
  333. * SCARD_ATTR_DEFAULT_CLK
  334. * SCARD_ATTR_DEFAULT_DATA_RATE
  335. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
  336. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
  337. * SCARD_ATTR_DEVICE_IN_USE
  338. * SCARD_ATTR_DEVICE_SYSTEM_NAME_A
  339. * SCARD_ATTR_DEVICE_SYSTEM_NAME_W
  340. * SCARD_ATTR_DEVICE_UNIT
  341. * SCARD_ATTR_ESC_AUTHREQUEST
  342. * SCARD_ATTR_ESC_CANCEL
  343. * SCARD_ATTR_ESC_RESET
  344. * SCARD_ATTR_EXTENDED_BWT
  345. * SCARD_ATTR_ICC_INTERFACE_STATUS
  346. * SCARD_ATTR_ICC_PRESENCE
  347. * SCARD_ATTR_ICC_TYPE_PER_ATR
  348. * SCARD_ATTR_MAX_CLK
  349. * SCARD_ATTR_MAX_DATA_RATE
  350. * SCARD_ATTR_MAX_IFSD
  351. * SCARD_ATTR_MAXINPUT
  352. * SCARD_ATTR_POWER_MGMT_SUPPORT
  353. * SCARD_ATTR_SUPRESS_T1_IFS_REQUEST
  354. * SCARD_ATTR_SYNC_PROTOCOL_TYPES
  355. * SCARD_ATTR_USER_AUTH_INPUT_DEVICE
  356. * SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE
  357. * SCARD_ATTR_VENDOR_IFD_SERIAL_NO
  358. * SCARD_ATTR_VENDOR_IFD_TYPE
  359. * SCARD_ATTR_VENDOR_IFD_VERSION
  360. * SCARD_ATTR_VENDOR_NAME
  361. For Windows Resource Manager, the list of possible attributes is:
  362. * SCARD_ATTR_VENDOR_NAME
  363. * SCARD_ATTR_VENDOR_IFD_TYPE
  364. * SCARD_ATTR_VENDOR_IFD_VERSION
  365. * SCARD_ATTR_VENDOR_IFD_SERIAL_NO
  366. * SCARD_ATTR_CHANNEL_ID
  367. * SCARD_ATTR_DEFAULT_CLK
  368. * SCARD_ATTR_MAX_CLK
  369. * SCARD_ATTR_DEFAULT_DATA_RATE
  370. * SCARD_ATTR_MAX_DATA_RATE
  371. * SCARD_ATTR_MAX_IFSD
  372. * SCARD_ATTR_POWER_MGMT_SUPPORT
  373. * SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE
  374. * SCARD_ATTR_USER_AUTH_INPUT_DEVICE
  375. * SCARD_ATTR_CHARACTERISTICS
  376. * SCARD_ATTR_CURRENT_PROTOCOL_TYPE
  377. * SCARD_ATTR_CURRENT_CLK
  378. * SCARD_ATTR_CURRENT_F
  379. * SCARD_ATTR_CURRENT_D
  380. * SCARD_ATTR_CURRENT_N
  381. * SCARD_ATTR_CURRENT_W
  382. * SCARD_ATTR_CURRENT_IFSC
  383. * SCARD_ATTR_CURRENT_IFSD
  384. * SCARD_ATTR_CURRENT_BWT
  385. * SCARD_ATTR_CURRENT_CWT
  386. * SCARD_ATTR_CURRENT_EBC_ENCODING
  387. * SCARD_ATTR_EXTENDED_BWT
  388. * SCARD_ATTR_ICC_PRESENCE
  389. * SCARD_ATTR_ICC_INTERFACE_STATUS
  390. * SCARD_ATTR_CURRENT_IO_STATE
  391. * SCARD_ATTR_ATR_STRING
  392. * SCARD_ATTR_ICC_TYPE_PER_ATR
  393. * SCARD_ATTR_ESC_RESET
  394. * SCARD_ATTR_ESC_CANCEL
  395. * SCARD_ATTR_ESC_AUTHREQUEST
  396. * SCARD_ATTR_MAXINPUT
  397. * SCARD_ATTR_DEVICE_UNIT
  398. * SCARD_ATTR_DEVICE_IN_USE
  399. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
  400. * SCARD_ATTR_DEVICE_SYSTEM_NAME_A
  401. * SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
  402. * SCARD_ATTR_DEVICE_SYSTEM_NAME_W
  403. * SCARD_ATTR_SUPRESS_T1_IFS_REQUEST
  404. Not all the dwAttrId values listed above may be implemented in the IFD
  405. Handler you are using. And some dwAttrId values not listed here may be
  406. implemented.
  407. from smartcard.scard import *
  408. ... establish context and connect to card ...
  409. hresult, attrib = SCardSetAttrib(hcard, SCARD_ATTR_VENDOR_NAME, ['G', 'e', 'm', 'a', 'l', 't', 'o'])
  410. if hresult != SCARD_S_SUCCESS:
  411. print 'Failed to set attribute'
  412. ...
  413. """
  414. return _scard.SCardSetAttrib(*args)
  415. def SCardControl(*args):
  416. """
  417. SCardControl( hcard, dwControlCode, byte[] INBUFFER) -> SCARDRETCODE
  418. Parameters:
  419. hcard: card handle return from SCardConnect()
  420. dwControlCode: the control code to send
  421. inbuffer: list of bytes to send with the control code
  422. hcard: card handle return from SCardConnect()
  423. dwControlCode: the control code to send
  424. inbuffer: list of bytes to send with the control code
  425. This function sends a control command to the reader connected to by
  426. SCardConnect(). It returns a result and the control response.
  427. from smartcard.scard import *
  428. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  429. hresult, hcard, dwActiveProtocol = SCardConnect(
  430. hcontext, 'SchlumbergerSema Reflex USB v.2 0', SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  431. CMD = [0x12, 0x34]
  432. hresult, response = SCardControl(hcard, 42, CMD)
  433. if hresult != SCARD_S_SUCCESS:
  434. raise error, 'Failed to control: ' + SCardGetErrorMessage(hresult)
  435. """
  436. return _scard.SCardControl(*args)
  437. def SCardBeginTransaction(*args):
  438. """
  439. SCardBeginTransaction( hcard) -> SCARDRETCODE
  440. Parameters:
  441. hcard: card handle return from SCardConnect()
  442. hcard: card handle return from SCardConnect()
  443. This function establishes a temporary exclusive access mode for doing a
  444. series of commands or transaction. You might want to use this when you
  445. are selecting a few files and then writing a large file so you can make
  446. sure that another application will not change the current file. If
  447. another application has a lock on this reader or this application is in
  448. SCARD_SHARE_EXCLUSIVE there will be no action taken.
  449. from smartcard.scard import *
  450. ... establish context ...
  451. hresult, hcard, dwActiveProtocol = SCardConnect(
  452. hcontext, 'SchlumbergerSema Reflex USB v.2 0', SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  453. if hresult!=SCARD_S_SUCCESS:
  454. raise error, 'unable to connect: ' + SCardGetErrorMessage(hresult)
  455. hresult = SCardBeginTransaction(hcard)
  456. if hresult != SCARD_S_SUCCESS:
  457. raise error, 'failed to begin transaction: ' + SCardGetErrorMessage(hresult)
  458. ...
  459. """
  460. return _scard.SCardBeginTransaction(*args)
  461. def SCardCancel(*args):
  462. """
  463. SCardCancel( hcontext) -> SCARDRETCODE
  464. Parameters:
  465. hcontext: context handle return from SCardEstablishContext()
  466. hcontext: context handle return from SCardEstablishContext()
  467. This function cancels all pending blocking requests on the
  468. ScardGetStatusChange() function.
  469. from smartcard.scard import *
  470. ... establish context ...
  471. hresult = SCardCancel(hcard)
  472. if hresult != SCARD_S_SUCCESS:
  473. raise error, 'failed to cancel pending actions: ' + SCardGetErrorMessage(hresult)
  474. ...
  475. """
  476. return _scard.SCardCancel(*args)
  477. def SCardConnect(*args):
  478. """
  479. SCardConnect( hcontext, szReaderName, dwShareMode, dwPreferredProtocols) -> SCARDRETCODE
  480. Parameters:
  481. hcontext: context handle return from SCardEstablishContext()
  482. readername: card reader name
  483. dwShareMode: share mode
  484. dwPreferredProtocols: preferred protocols
  485. hcontext: context handle return from SCardEstablishContext()
  486. readername: card reader name
  487. dwShareMode: share mode
  488. dwPreferredProtocols: preferred protocols
  489. This function establishes a connection to the friendly name of the reader
  490. specified in szReader. The first connection will power up and perform a
  491. reset on the card.
  492. Value of dwShareMode Meaning
  493. SCARD_SHARE_SHARED This application will allow others to share the reader
  494. SCARD_SHARE_EXCLUSIVE This application will NOT allow others to share the reader
  495. SCARD_SHARE_DIRECT Direct control of the reader, even without a card
  496. SCARD_SHARE_DIRECT can be used before using SCardControl() to send control
  497. commands to the reader even if a card is not present in the reader.
  498. Value of dwPreferredProtocols Meaning
  499. SCARD_PROTOCOL_T0 Use the T=0 protocol
  500. SCARD_PROTOCOL_T1 Use the T=1 protocol
  501. SCARD_PROTOCOL_RAW Use with memory type cards
  502. from smartcard.scard import *
  503. ... establish context ...
  504. hresult, readers = SCardListReaders(hcontext, 'NULL')
  505. if hresult != SCARD_S_SUCCESS:
  506. raise error, 'Failed to list readers:: ' + SCardGetErrorMessage(hresult)
  507. hresult, hcard, dwActiveProtocol = SCardConnect(
  508. hcontext, readers[0], SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  509. if hresult != SCARD_S_SUCCESS:
  510. raise error, 'unable to connect: ' + SCardGetErrorMessage(hresult)
  511. ...
  512. """
  513. return _scard.SCardConnect(*args)
  514. def SCardDisconnect(*args):
  515. """
  516. SCardDisconnect( hcard, dwDisposition) -> SCARDRETCODE
  517. Parameters:
  518. hcard: card handle return from SCardConnect()
  519. dwDisposition: card disposition on return
  520. hcard: card handle return from SCardConnect()
  521. dwDisposition: card disposition on return
  522. This function terminates a connection to the connection made through
  523. SCardConnect. disposition can have the following values:
  524. Value of disposition Meaning
  525. SCARD_LEAVE_CARD Do nothing
  526. SCARD_RESET_CARD Reset the card (warm reset)
  527. SCARD_UNPOWER_CARD Unpower the card (cold reset)
  528. SCARD_EJECT_CARD Eject the card
  529. from smartcard.scard import *
  530. ... establish context and connect to card ...
  531. hresult = SCardDisconnect(hcard, SCARD_UNPOWER_CARD)
  532. if hresult != SCARD_S_SUCCESS:
  533. raise error, 'failed to disconnect: ' + SCardGetErrorMessage(hresult)
  534. ...
  535. """
  536. return _scard.SCardDisconnect(*args)
  537. def SCardEndTransaction(*args):
  538. """
  539. SCardEndTransaction( hcard, dwDisposition) -> SCARDRETCODE
  540. Parameters:
  541. hcard: card handle return from SCardConnect()
  542. dwDisposition: card disposition on return
  543. hcard: card handle return from SCardConnect()
  544. dwDisposition: card disposition on return
  545. This function ends a previously begun transaction. The calling
  546. application must be the owner of the previously begun transaction or an
  547. error will occur. disposition can have the following values: The
  548. disposition action is not currently used in this release.
  549. Value of disposition Meaning
  550. SCARD_LEAVE_CARD Do nothing
  551. SCARD_RESET_CARD Reset the card
  552. SCARD_UNPOWER_CARD Unpower the card
  553. SCARD_EJECT_CARD Eject the card
  554. from smartcard.scard import *
  555. ... establish context, connect to card, begin transaction ...
  556. hresult = SCardEndTransaction(hcard, SCARD_LEAVE_CARD)
  557. if hresult != SCARD_S_SUCCESS:
  558. raise error, 'failed to end transaction: ' + SCardGetErrorMessage(hresult)
  559. """
  560. return _scard.SCardEndTransaction(*args)
  561. def SCardEstablishContext(*args):
  562. """
  563. SCardEstablishContext( dwScope) -> SCARDRETCODE
  564. Parameters:
  565. dwScope: context scope
  566. dwScope: context scope
  567. This function creates a communication context to the PC/SC Resource
  568. Manager. This must be the first function called in a PC/SC application.
  569. Value of dwScope Meaning
  570. SCARD_SCOPE_USER Operations performed within the scope of the User
  571. SCARD_SCOPE_TERMINAL Not used
  572. SCARD_SCOPE_GLOBAL Not used
  573. SCARD_SCOPE_SYSTEM Operations performed within the scope of the system
  574. from smartcard.scard import *
  575. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  576. if hresult != SCARD_S_SUCCESS:
  577. raise error, 'Failed to establish context: ' + SCardGetErrorMessage(hresult)
  578. """
  579. return _scard.SCardEstablishContext(*args)
  580. def SCardGetStatusChange(*args):
  581. """
  582. SCardGetStatusChange( hcontext, dwTimeout, tuple[] prsl) -> SCARDRETCODE
  583. Parameters:
  584. hcontext: context handle return from SCardEstablishContext()
  585. dwTimeout: timeout value, INFINITE for infinite time-out
  586. readerstatelist: in input/output, a list of reader state tuple (readername, state, atr)
  587. hcontext: context handle return from SCardEstablishContext()
  588. dwTimeout: timeout value, INFINITE for infinite time-out
  589. readerstatelist: in input/output, a list of reader state tuple (readername, state, atr)
  590. This function receives a structure or list of tuples containing reader
  591. states. A READERSTATE hast three fields (readername, state, atr).
  592. It then blocks for a change in state to occur on any of the OR'd
  593. values contained in the current state for a maximum blocking time of
  594. dwTimeout or forever if INFINITE is used. The new event state will be
  595. contained in state. A status change might be a card insertion or
  596. removal event, a change in ATR, etc.
  597. Value of state Meaning
  598. SCARD_STATE_UNAWARE The application is unaware of the current state, and would like to know. The use of this value results in an immediate return from state transition monitoring services. This is represented by all bits set to zero
  599. SCARD_STATE_IGNORE This reader should be ignored
  600. SCARD_STATE_CHANGED There is a difference between the state believed by the application, and the state known by the resource manager. When this bit is set, the application may assume a significant state change has occurred on this reader
  601. SCARD_STATE_UNKNOWN The given reader name is not recognized by the resource manager. If this bit is set, then SCARD_STATE_CHANGED and SCARD_STATE_IGNORE will also be set
  602. SCARD_STATE_UNAVAILABLE The actual state of this reader is not available. If this bit is set, then all the following bits are clear
  603. SCARD_STATE_EMPTY There is no card in the reader. If this bit is set, all the following bits will be clear
  604. SCARD_STATE_PRESENT There is a card in the reader
  605. SCARD_STATE_ATRMATCH There is a card in the reader with an ATR matching one of the target cards. If this bit is set, SCARD_STATE_PRESENT will also be set. This bit is only returned on the SCardLocateCards function
  606. SCARD_STATE_EXCLUSIVE The card in the reader is allocated for exclusive use by another application. If this bit is set, SCARD_STATE_PRESENT will also be set
  607. SCARD_STATE_INUSE The card in the reader is in use by one or more other applications, but may be connected to in shared mode. If this bit is set, SCARD_STATE_PRESENT will also be set
  608. SCARD_STATE_MUTE There is an unresponsive card in the reader
  609. from smartcard.scard import *
  610. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  611. hresult, readers = SCardListReaders(hcontext, [])
  612. readerstates = []
  613. cards = [ 'Schlumberger Cryptoflex 4k', 'Schlumberger Cryptoflex 8k', 'Schlumberger Cryptoflex 8k v2' ]
  614. for i in xrange(len(readers)):
  615. readerstates += [ (readers[i], SCARD_STATE_UNAWARE) ]
  616. hresult, newstates = SCardLocateCards(hcontext, cards, readerstates)
  617. print '----- Please insert or remove a card ------------'
  618. hresult, newstates = SCardGetStatusChange(hcontext, INFINITE, newstates)
  619. for i in newstates
  620. reader, eventstate, atr = i
  621. if eventstate & SCARD_STATE_ATRMATCH:
  622. print ' Card found'
  623. if eventstate & SCARD_STATE_EMPTY:
  624. print ' Reader empty'
  625. """
  626. return _scard.SCardGetStatusChange(*args)
  627. def SCardListReaders(*args):
  628. """
  629. SCardListReaders( hcontext, [] READERGROUPSIN) -> SCARDRETCODE
  630. Parameters:
  631. hcontext: context handle return from SCardEstablishContext()
  632. readergroups: a list of reader groups to search for readers
  633. hcontext: context handle return from SCardEstablishContext()
  634. readergroups: a list of reader groups to search for readers
  635. This function returns a list of currently available readers on the system.
  636. A list of group can be provided in input to list readers in a given
  637. group only.
  638. from smartcard.scard import *
  639. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  640. hresult, readers = SCardListReaders(hcontext, [])
  641. if hresult != SCARD_S_SUCCESS:
  642. raise error, 'Failed to list readers: ' + SCardGetErrorMessage(hresult)
  643. print 'PCSC Readers: ', readers
  644. hresult, readers = SCardListReaders(hcontext, ['SCard$T1ProtocolReaders', 'SCard$MyOwnGroup']
  645. ...
  646. """
  647. return _scard.SCardListReaders(*args)
  648. def SCardListReaderGroups(*args):
  649. """
  650. SCardListReaderGroups( hcontext) -> SCARDRETCODE
  651. Parameters:
  652. hcontext: context handle return from SCardEstablishContext()
  653. hcontext: context handle return from SCardEstablishContext()
  654. This function returns a list of currently available reader groups on the
  655. system.
  656. from smartcard.scard import *
  657. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  658. hresult, readerGroups = SCardListReaderGroups(hcontext)
  659. if hresult != SCARD_S_SUCCESS:
  660. raise error, 'Unable to list reader groups: ' + SCardGetErrorMessage(hresult)
  661. print 'PCSC Reader groups: ', readerGroups
  662. """
  663. return _scard.SCardListReaderGroups(*args)
  664. def SCardReconnect(*args):
  665. """
  666. SCardReconnect( hcard, dwShareMode, dwPreferredProtocols, dwInitialization) -> SCARDRETCODE
  667. Parameters:
  668. hcard: card handle return from SCardConnect()
  669. dwShareMode: share mode
  670. dwPreferredProtocols: preferred protocols
  671. dwInitialization: the type of initialization that should be performed on the card
  672. hcard: card handle return from SCardConnect()
  673. dwShareMode: share mode
  674. dwPreferredProtocols: preferred protocols
  675. dwInitialization: the type of initialization that should be performed on the card
  676. This function reestablishes a connection to a reader that was previously
  677. connected to using SCardConnect(). In a multi application environment it
  678. is possible for an application to reset the card in shared mode. When
  679. this occurs any other application trying to access certain commands will
  680. be returned the value SCARD_W_RESET_CARD. When this occurs
  681. SCardReconnect() must be called in order to acknowledge that the card was
  682. reset and allow it to change it's state accordingly.
  683. Value of dwShareMode Meaning
  684. SCARD_SHARE_SHARED This application will allow others to share the reader
  685. SCARD_SHARE_EXCLUSIVE This application will NOT allow others to share the reader
  686. Value of dwPreferredProtocols Meaning
  687. SCARD_PROTOCOL_T0 Use the T=0 protocol
  688. SCARD_PROTOCOL_T1 Use the T=1 protocol
  689. SCARD_PROTOCOL_RAW Use with memory type cards
  690. dwPreferredProtocols is a bit mask of acceptable protocols for the connection. You can use (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) if you do not have a preferred protocol.
  691. Value of dwInitialization Meaning
  692. SCARD_LEAVE_CARD Do nothing
  693. SCARD_RESET_CARD Reset the card (warm reset)
  694. SCARD_UNPOWER_CARD Unpower the card (cold reset)
  695. SCARD_EJECT_CARD Eject the card
  696. from smartcard.scard import *
  697. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  698. hresult, hcard, dwActiveProtocol = SCardConnect(
  699. hcontext, 'SchlumbergerSema Reflex USB v.2 0', SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  700. hresult, activeProtocol = SCardReconnect(hcard, SCARD_SHARE_EXCLUSIVE,
  701. SCARD_PROTOCOL_T0, SCARD_RESET_CARD)
  702. ...
  703. """
  704. return _scard.SCardReconnect(*args)
  705. def SCardReleaseContext(*args):
  706. """
  707. SCardReleaseContext( hcontext) -> SCARDRETCODE
  708. Parameters:
  709. hcontext: context handle return from SCardEstablishContext()
  710. hcontext: context handle return from SCardEstablishContext()
  711. """
  712. return _scard.SCardReleaseContext(*args)
  713. def SCardStatus(*args):
  714. """
  715. SCardStatus( hcard) -> SCARDRETCODE
  716. Parameters:
  717. hcard: card handle return from SCardConnect()
  718. hcard: card handle return from SCardConnect()
  719. This function returns the current status of the reader connected to by
  720. hcard. The reader friendly name is returned, as well as the state,
  721. protocol and ATR. The state is a DWORD possibly OR'd with the following
  722. values:
  723. Value of pdwState Meaning
  724. SCARD_ABSENT There is no card in the reader
  725. SCARD_PRESENT There is a card in the reader, but it has not been moved into position for use
  726. SCARD_SWALLOWED There is a card in the reader in position for use. The card is not powered
  727. SCARD_POWERED Power is being provided to the card, but the reader driver is unaware of the mode of the card
  728. SCARD_NEGOTIABLE The card has been reset and is awaiting PTS negotiation
  729. SCARD_SPECIFIC The card has been reset and specific communication protocols have been established
  730. Value of pdwProtocol Meaning
  731. SCARD_PROTOCOL_T0 Use the T=0 protocol
  732. SCARD_PROTOCOL_T1 Use the T=1 protocol
  733. from smartcard.scard import *
  734. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  735. hresult, hcard, dwActiveProtocol = SCardConnect(
  736. hcontext, 'SchlumbergerSema Reflex USB v.2 0', SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  737. hresult, reader, state, protocol, atr = SCardStatus(hcard)
  738. if hresult != SCARD_S_SUCCESS:
  739. raise error, 'failed to get status: ' + SCardGetErrorMessage(hresult)
  740. print 'Reader: ', reader
  741. print 'State: ', state
  742. print 'Protocol: ', protocol
  743. print 'ATR: ',
  744. for i in xrange(len(atr)):
  745. print '0x%.2X' % i,
  746. print
  747. ...
  748. """
  749. return _scard.SCardStatus(*args)
  750. def SCardTransmit(*args):
  751. """
  752. SCardTransmit( hcard, unsigned long pioSendPci, byte[] APDUCOMMAND) -> SCARDRETCODE
  753. Parameters:
  754. hcard: card handle return from SCardConnect()
  755. pioSendPci: unsigned long value
  756. apducommand: list of APDU bytes to transmit
  757. hcard: card handle return from SCardConnect()
  758. pioSendPci: unsigned long value
  759. apducommand: list of APDU bytes to transmit
  760. This function sends an APDU to the smart card contained in the reader
  761. connected to by SCardConnect().
  762. It returns a result and the card APDU response.
  763. Value of pioSendPci Meaning
  764. SCARD_PCI_T0 Pre-defined T=0 PCI structure
  765. SCARD_PCI_T1 Pre-defined T=1 PCI structure
  766. from smartcard.scard import *
  767. hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
  768. hresult, hcard, dwActiveProtocol = SCardConnect(
  769. hcontext, 'SchlumbergerSema Reflex USB v.2 0', SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0)
  770. SELECT = [0xA0, 0xA4, 0x00, 0x00, 0x02]
  771. DF_TELECOM = [0x7F, 0x10]
  772. hresult, response = SCardTransmit(hcard, SCARD_PCI_T0, SELECT + DF_TELECOM)
  773. if hresult != SCARD_S_SUCCESS:
  774. raise error, 'Failed to transmit: ' + SCardGetErrorMessage(hresult)
  775. """
  776. return _scard.SCardTransmit(*args)
  777. def SCARD_CTL_CODE(*args):
  778. """
  779. SCARD_CTL_CODE(long code) -> long
  780. Parameters:
  781. code: long value
  782. code: long value
  783. This function returns the value of a control code
  784. from smartcard.scard import *
  785. ...
  786. CM_IOCTL_GET_FEATURE_REQUEST = SCARD_CTL_CODE(3400)
  787. ...
  788. """
  789. return _scard.SCARD_CTL_CODE(*args)
  790. def SCardGetErrorMessage(*args):
  791. """
  792. SCardGetErrorMessage(long lErrCode) -> ERRORSTRING
  793. Parameters:
  794. lErrCode: long value
  795. lErrCode: long value
  796. This function return a human readable text for the given PC/SC error code.
  797. from smartcard.scard import *
  798. ...
  799. hresult, response = SCardTransmit(hcard, SCARD_PCI_T0, SELECT + DF_TELECOM)
  800. if hresult != SCARD_S_SUCCESS:
  801. raise error, 'Failed to transmit: ' + SCardGetErrorMessage(hresult)
  802. ...
  803. """
  804. return _scard.SCardGetErrorMessage(*args)
  805. error = _scard.error
  806. SCARD_SCOPE_USER = _scard.SCARD_SCOPE_USER
  807. SCARD_SCOPE_TERMINAL = _scard.SCARD_SCOPE_TERMINAL
  808. SCARD_SCOPE_SYSTEM = _scard.SCARD_SCOPE_SYSTEM
  809. SCARD_SHARE_SHARED = _scard.SCARD_SHARE_SHARED
  810. SCARD_SHARE_EXCLUSIVE = _scard.SCARD_SHARE_EXCLUSIVE
  811. SCARD_SHARE_DIRECT = _scard.SCARD_SHARE_DIRECT
  812. SCARD_LEAVE_CARD = _scard.SCARD_LEAVE_CARD
  813. SCARD_RESET_CARD = _scard.SCARD_RESET_CARD
  814. SCARD_UNPOWER_CARD = _scard.SCARD_UNPOWER_CARD
  815. SCARD_EJECT_CARD = _scard.SCARD_EJECT_CARD
  816. SCARD_STATE_UNAWARE = _scard.SCARD_STATE_UNAWARE
  817. SCARD_STATE_IGNORE = _scard.SCARD_STATE_IGNORE
  818. SCARD_STATE_CHANGED = _scard.SCARD_STATE_CHANGED
  819. SCARD_STATE_UNKNOWN = _scard.SCARD_STATE_UNKNOWN
  820. SCARD_STATE_UNAVAILABLE = _scard.SCARD_STATE_UNAVAILABLE
  821. SCARD_STATE_EMPTY = _scard.SCARD_STATE_EMPTY
  822. SCARD_STATE_PRESENT = _scard.SCARD_STATE_PRESENT
  823. SCARD_STATE_ATRMATCH = _scard.SCARD_STATE_ATRMATCH
  824. SCARD_STATE_EXCLUSIVE = _scard.SCARD_STATE_EXCLUSIVE
  825. SCARD_STATE_INUSE = _scard.SCARD_STATE_INUSE
  826. SCARD_STATE_MUTE = _scard.SCARD_STATE_MUTE
  827. SCARD_STATE_UNPOWERED = _scard.SCARD_STATE_UNPOWERED
  828. SCARD_PROTOCOL_UNSET = _scard.SCARD_PROTOCOL_UNSET
  829. SCARD_PROTOCOL_T0 = _scard.SCARD_PROTOCOL_T0
  830. SCARD_PROTOCOL_T1 = _scard.SCARD_PROTOCOL_T1
  831. SCARD_PROTOCOL_RAW = _scard.SCARD_PROTOCOL_RAW
  832. SCARD_PROTOCOL_T15 = _scard.SCARD_PROTOCOL_T15
  833. SCARD_PROTOCOL_ANY = _scard.SCARD_PROTOCOL_ANY
  834. SCARD_PROTOCOL_UNDEFINED = _scard.SCARD_PROTOCOL_UNDEFINED
  835. SCARD_PROTOCOL_OPTIMAL = _scard.SCARD_PROTOCOL_OPTIMAL
  836. SCARD_PROTOCOL_Tx = _scard.SCARD_PROTOCOL_Tx
  837. SCARD_PROTOCOL_DEFAULT = _scard.SCARD_PROTOCOL_DEFAULT
  838. SCARD_PCI_T0 = _scard.SCARD_PCI_T0
  839. SCARD_PCI_T1 = _scard.SCARD_PCI_T1
  840. SCARD_PCI_RAW = _scard.SCARD_PCI_RAW
  841. SCARD_ATTR_VENDOR_NAME = _scard.SCARD_ATTR_VENDOR_NAME
  842. SCARD_ATTR_VENDOR_IFD_TYPE = _scard.SCARD_ATTR_VENDOR_IFD_TYPE
  843. SCARD_ATTR_VENDOR_IFD_VERSION = _scard.SCARD_ATTR_VENDOR_IFD_VERSION
  844. SCARD_ATTR_VENDOR_IFD_SERIAL_NO = _scard.SCARD_ATTR_VENDOR_IFD_SERIAL_NO
  845. SCARD_ATTR_CHANNEL_ID = _scard.SCARD_ATTR_CHANNEL_ID
  846. SCARD_ATTR_ASYNC_PROTOCOL_TYPES = _scard.SCARD_ATTR_ASYNC_PROTOCOL_TYPES
  847. SCARD_ATTR_DEFAULT_CLK = _scard.SCARD_ATTR_DEFAULT_CLK
  848. SCARD_ATTR_MAX_CLK = _scard.SCARD_ATTR_MAX_CLK
  849. SCARD_ATTR_DEFAULT_DATA_RATE = _scard.SCARD_ATTR_DEFAULT_DATA_RATE
  850. SCARD_ATTR_MAX_DATA_RATE = _scard.SCARD_ATTR_MAX_DATA_RATE
  851. SCARD_ATTR_MAX_IFSD = _scard.SCARD_ATTR_MAX_IFSD
  852. SCARD_ATTR_SYNC_PROTOCOL_TYPES = _scard.SCARD_ATTR_SYNC_PROTOCOL_TYPES
  853. SCARD_ATTR_POWER_MGMT_SUPPORT = _scard.SCARD_ATTR_POWER_MGMT_SUPPORT
  854. SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE = _scard.SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE
  855. SCARD_ATTR_USER_AUTH_INPUT_DEVICE = _scard.SCARD_ATTR_USER_AUTH_INPUT_DEVICE
  856. SCARD_ATTR_CHARACTERISTICS = _scard.SCARD_ATTR_CHARACTERISTICS
  857. SCARD_ATTR_CURRENT_PROTOCOL_TYPE = _scard.SCARD_ATTR_CURRENT_PROTOCOL_TYPE
  858. SCARD_ATTR_CURRENT_CLK = _scard.SCARD_ATTR_CURRENT_CLK
  859. SCARD_ATTR_CURRENT_F = _scard.SCARD_ATTR_CURRENT_F
  860. SCARD_ATTR_CURRENT_D = _scard.SCARD_ATTR_CURRENT_D
  861. SCARD_ATTR_CURRENT_N = _scard.SCARD_ATTR_CURRENT_N
  862. SCARD_ATTR_CURRENT_W = _scard.SCARD_ATTR_CURRENT_W
  863. SCARD_ATTR_CURRENT_IFSC = _scard.SCARD_ATTR_CURRENT_IFSC
  864. SCARD_ATTR_CURRENT_IFSD = _scard.SCARD_ATTR_CURRENT_IFSD
  865. SCARD_ATTR_CURRENT_BWT = _scard.SCARD_ATTR_CURRENT_BWT
  866. SCARD_ATTR_CURRENT_CWT = _scard.SCARD_ATTR_CURRENT_CWT
  867. SCARD_ATTR_CURRENT_EBC_ENCODING = _scard.SCARD_ATTR_CURRENT_EBC_ENCODING
  868. SCARD_ATTR_EXTENDED_BWT = _scard.SCARD_ATTR_EXTENDED_BWT
  869. SCARD_ATTR_ICC_PRESENCE = _scard.SCARD_ATTR_ICC_PRESENCE
  870. SCARD_ATTR_ICC_INTERFACE_STATUS = _scard.SCARD_ATTR_ICC_INTERFACE_STATUS
  871. SCARD_ATTR_CURRENT_IO_STATE = _scard.SCARD_ATTR_CURRENT_IO_STATE
  872. SCARD_ATTR_ATR_STRING = _scard.SCARD_ATTR_ATR_STRING
  873. SCARD_ATTR_ICC_TYPE_PER_ATR = _scard.SCARD_ATTR_ICC_TYPE_PER_ATR
  874. SCARD_ATTR_ESC_RESET = _scard.SCARD_ATTR_ESC_RESET
  875. SCARD_ATTR_ESC_CANCEL = _scard.SCARD_ATTR_ESC_CANCEL
  876. SCARD_ATTR_ESC_AUTHREQUEST = _scard.SCARD_ATTR_ESC_AUTHREQUEST
  877. SCARD_ATTR_MAXINPUT = _scard.SCARD_ATTR_MAXINPUT
  878. SCARD_ATTR_DEVICE_UNIT = _scard.SCARD_ATTR_DEVICE_UNIT
  879. SCARD_ATTR_DEVICE_IN_USE = _scard.SCARD_ATTR_DEVICE_IN_USE
  880. SCARD_ATTR_DEVICE_FRIENDLY_NAME_A = _scard.SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
  881. SCARD_ATTR_DEVICE_SYSTEM_NAME_A = _scard.SCARD_ATTR_DEVICE_SYSTEM_NAME_A
  882. SCARD_ATTR_DEVICE_FRIENDLY_NAME_W = _scard.SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
  883. SCARD_ATTR_DEVICE_SYSTEM_NAME_W = _scard.SCARD_ATTR_DEVICE_SYSTEM_NAME_W
  884. SCARD_ATTR_SUPRESS_T1_IFS_REQUEST = _scard.SCARD_ATTR_SUPRESS_T1_IFS_REQUEST
  885. SCARD_ATTR_DEVICE_FRIENDLY_NAME = _scard.SCARD_ATTR_DEVICE_FRIENDLY_NAME
  886. SCARD_ATTR_DEVICE_SYSTEM_NAME = _scard.SCARD_ATTR_DEVICE_SYSTEM_NAME
  887. SCARD_S_SUCCESS = _scard.SCARD_S_SUCCESS
  888. SCARD_F_INTERNAL_ERROR = _scard.SCARD_F_INTERNAL_ERROR
  889. SCARD_E_CANCELLED = _scard.SCARD_E_CANCELLED
  890. SCARD_E_INVALID_HANDLE = _scard.SCARD_E_INVALID_HANDLE
  891. SCARD_E_INVALID_PARAMETER = _scard.SCARD_E_INVALID_PARAMETER
  892. SCARD_E_INVALID_TARGET = _scard.SCARD_E_INVALID_TARGET
  893. SCARD_E_NO_MEMORY = _scard.SCARD_E_NO_MEMORY
  894. SCARD_F_WAITED_TOO_LONG = _scard.SCARD_F_WAITED_TOO_LONG
  895. SCARD_E_INSUFFICIENT_BUFFER = _scard.SCARD_E_INSUFFICIENT_BUFFER
  896. SCARD_E_UNKNOWN_READER = _scard.SCARD_E_UNKNOWN_READER
  897. SCARD_E_TIMEOUT = _scard.SCARD_E_TIMEOUT
  898. SCARD_E_SHARING_VIOLATION = _scard.SCARD_E_SHARING_VIOLATION
  899. SCARD_E_NO_SMARTCARD = _scard.SCARD_E_NO_SMARTCARD
  900. SCARD_E_UNKNOWN_CARD = _scard.SCARD_E_UNKNOWN_CARD
  901. SCARD_E_CANT_DISPOSE = _scard.SCARD_E_CANT_DISPOSE
  902. SCARD_E_PROTO_MISMATCH = _scard.SCARD_E_PROTO_MISMATCH
  903. SCARD_E_NOT_READY = _scard.SCARD_E_NOT_READY
  904. SCARD_E_INVALID_VALUE = _scard.SCARD_E_INVALID_VALUE
  905. SCARD_E_SYSTEM_CANCELLED = _scard.SCARD_E_SYSTEM_CANCELLED
  906. SCARD_F_COMM_ERROR = _scard.SCARD_F_COMM_ERROR
  907. SCARD_F_UNKNOWN_ERROR = _scard.SCARD_F_UNKNOWN_ERROR
  908. SCARD_E_INVALID_ATR = _scard.SCARD_E_INVALID_ATR
  909. SCARD_E_NOT_TRANSACTED = _scard.SCARD_E_NOT_TRANSACTED
  910. SCARD_E_READER_UNAVAILABLE = _scard.SCARD_E_READER_UNAVAILABLE
  911. SCARD_E_PCI_TOO_SMALL = _scard.SCARD_E_PCI_TOO_SMALL
  912. SCARD_E_READER_UNSUPPORTED = _scard.SCARD_E_READER_UNSUPPORTED
  913. SCARD_E_DUPLICATE_READER = _scard.SCARD_E_DUPLICATE_READER
  914. SCARD_E_CARD_UNSUPPORTED = _scard.SCARD_E_CARD_UNSUPPORTED
  915. SCARD_E_NO_SERVICE = _scard.SCARD_E_NO_SERVICE
  916. SCARD_E_SERVICE_STOPPED = _scard.SCARD_E_SERVICE_STOPPED
  917. SCARD_E_NO_READERS_AVAILABLE = _scard.SCARD_E_NO_READERS_AVAILABLE
  918. SCARD_E_UNSUPPORTED_FEATURE = _scard.SCARD_E_UNSUPPORTED_FEATURE
  919. SCARD_W_UNSUPPORTED_CARD = _scard.SCARD_W_UNSUPPORTED_CARD
  920. SCARD_W_UNRESPONSIVE_CARD = _scard.SCARD_W_UNRESPONSIVE_CARD
  921. SCARD_W_UNPOWERED_CARD = _scard.SCARD_W_UNPOWERED_CARD
  922. SCARD_W_RESET_CARD = _scard.SCARD_W_RESET_CARD
  923. SCARD_W_REMOVED_CARD = _scard.SCARD_W_REMOVED_CARD
  924. SCARD_W_SECURITY_VIOLATION = _scard.SCARD_W_SECURITY_VIOLATION
  925. SCARD_W_WRONG_CHV = _scard.SCARD_W_WRONG_CHV
  926. SCARD_W_CHV_BLOCKED = _scard.SCARD_W_CHV_BLOCKED
  927. SCARD_W_EOF = _scard.SCARD_W_EOF
  928. SCARD_W_CANCELLED_BY_USER = _scard.SCARD_W_CANCELLED_BY_USER
  929. SCARD_W_CARD_NOT_AUTHENTICATED = _scard.SCARD_W_CARD_NOT_AUTHENTICATED
  930. SCARD_E_UNEXPECTED = _scard.SCARD_E_UNEXPECTED
  931. SCARD_E_ICC_INSTALLATION = _scard.SCARD_E_ICC_INSTALLATION
  932. SCARD_E_ICC_CREATEORDER = _scard.SCARD_E_ICC_CREATEORDER
  933. SCARD_E_DIR_NOT_FOUND = _scard.SCARD_E_DIR_NOT_FOUND
  934. SCARD_E_FILE_NOT_FOUND = _scard.SCARD_E_FILE_NOT_FOUND
  935. SCARD_E_NO_DIR = _scard.SCARD_E_NO_DIR
  936. SCARD_E_NO_FILE = _scard.SCARD_E_NO_FILE
  937. SCARD_E_NO_ACCESS = _scard.SCARD_E_NO_ACCESS
  938. SCARD_E_WRITE_TOO_MANY = _scard.SCARD_E_WRITE_TOO_MANY
  939. SCARD_E_BAD_SEEK = _scard.SCARD_E_BAD_SEEK
  940. SCARD_E_INVALID_CHV = _scard.SCARD_E_INVALID_CHV
  941. SCARD_E_UNKNOWN_RES_MNG = _scard.SCARD_E_UNKNOWN_RES_MNG
  942. SCARD_E_NO_SUCH_CERTIFICATE = _scard.SCARD_E_NO_SUCH_CERTIFICATE
  943. SCARD_E_CERTIFICATE_UNAVAILABLE = _scard.SCARD_E_CERTIFICATE_UNAVAILABLE
  944. SCARD_E_COMM_DATA_LOST = _scard.SCARD_E_COMM_DATA_LOST
  945. SCARD_E_NO_KEY_CONTAINER = _scard.SCARD_E_NO_KEY_CONTAINER
  946. SCARD_E_SERVER_TOO_BUSY = _scard.SCARD_E_SERVER_TOO_BUSY
  947. INVALID_HANDLE = _scard.INVALID_HANDLE
  948. SCARD_P_SHUTDOWN = _scard.SCARD_P_SHUTDOWN
  949. INFINITE = _scard.INFINITE
  950. resourceManager = _scard.resourceManager
  951. resourceManagerSubType = _scard.resourceManagerSubType