Hex Artifact Content

Artifact 7735605d6f06476b2cc5f3806b353b0e1e4b472d:


0000: 2f 2a 2b 2b 0d 0a 0d 0a 43 6f 70 79 72 69 67 68  /*++....Copyrigh
0010: 74 20 28 63 29 20 31 39 39 36 20 20 4d 69 63 72  t (c) 1996  Micr
0020: 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69 6f  osoft Corporatio
0030: 6e 0d 0a 0d 0a 4d 6f 64 75 6c 65 20 4e 61 6d 65  n....Module Name
0040: 3a 0d 0a 0d 0a 20 20 20 20 77 69 6e 73 6d 63 72  :....    winsmcr
0050: 64 2e 68 0d 0a 0d 0a 41 62 73 74 72 61 63 74 3a  d.h....Abstract:
0060: 0d 0a 20 20 20 20 53 6d 61 72 74 20 43 61 72 64  ..    Smart Card
0070: 20 63 6c 61 73 73 2f 70 6f 72 74 20 49 4f 43 54   class/port IOCT
0080: 4c 20 63 6f 64 65 73 2e 20 54 68 69 73 20 66 69  L codes. This fi
0090: 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  le is required f
00a0: 6f 72 20 61 6c 6c 20 63 6f 64 65 0d 0a 20 20 20  or all code..   
00b0: 20 75 73 65 72 20 6d 6f 64 65 20 61 6e 64 20 6b   user mode and k
00c0: 65 72 6e 65 6c 20 6d 6f 64 65 2c 20 75 73 69 6e  ernel mode, usin
00d0: 67 20 53 6d 61 72 74 20 43 61 72 64 20 49 4f 43  g Smart Card IOC
00e0: 54 4c 27 73 2c 20 64 65 66 69 6e 65 73 2c 0d 0a  TL's, defines,..
00f0: 20 20 20 20 64 61 74 61 20 73 74 72 75 63 74 75      data structu
0100: 72 65 73 0d 0a 0d 0a 52 65 76 69 73 69 6f 6e 20  res....Revision 
0110: 48 69 73 74 6f 72 79 3a 0d 0a 0d 0a 2d 2d 2a 2f  History:....--*/
0120: 0d 0a 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 5f 4e  ......#ifndef _N
0130: 54 44 44 53 43 52 44 5f 48 32 5f 0d 0a 23 64 65  TDDSCRD_H2_..#de
0140: 66 69 6e 65 20 5f 4e 54 44 44 53 43 52 44 5f 48  fine _NTDDSCRD_H
0150: 32 5f 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  2_....#if define
0160: 64 20 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  d (_MSC_VER) && 
0170: 28 5f 4d 53 43 5f 56 45 52 20 3e 3d 20 31 30 32  (_MSC_VER >= 102
0180: 30 29 0d 0a 23 70 72 61 67 6d 61 20 6f 6e 63 65  0)..#pragma once
0190: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 64  ..#endif....#ifd
01a0: 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0d 0a  ef __cplusplus..
01b0: 65 78 74 65 72 6e 20 22 43 22 20 7b 0d 0a 23 65  extern "C" {..#e
01c0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 64 65 66 20 5f  ndif....#ifdef _
01d0: 57 49 4e 53 43 41 52 44 5f 48 5f 0d 0a 74 79 70  WINSCARD_H_..typ
01e0: 65 64 65 66 20 44 57 4f 52 44 20 55 4c 4f 4e 47  edef DWORD ULONG
01f0: 3b 0d 0a 74 79 70 65 64 65 66 20 57 4f 52 44 20  ;..typedef WORD 
0200: 55 57 4f 52 44 3b 0d 0a 74 79 70 65 64 65 66 20  UWORD;..typedef 
0210: 42 59 54 45 20 55 43 48 41 52 3b 0d 0a 23 65 6c  BYTE UCHAR;..#el
0220: 73 65 0d 0a 74 79 70 65 64 65 66 20 55 4c 4f 4e  se..typedef ULON
0230: 47 20 44 57 4f 52 44 3b 0d 0a 2f 2f 20 74 79 70  G DWORD;..// typ
0240: 65 64 65 66 20 55 57 4f 52 44 20 57 4f 52 44 3b  edef UWORD WORD;
0250: 0d 0a 74 79 70 65 64 65 66 20 55 43 48 41 52 20  ..typedef UCHAR 
0260: 42 59 54 45 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  BYTE;..#endif...
0270: 0a 23 69 66 6e 64 65 66 20 44 45 56 49 43 45 5f  .#ifndef DEVICE_
0280: 54 59 50 45 5f 53 4d 41 52 54 43 41 52 44 0d 0a  TYPE_SMARTCARD..
0290: 23 69 66 6e 64 65 66 20 46 49 4c 45 5f 44 45 56  #ifndef FILE_DEV
02a0: 49 43 45 5f 53 4d 41 52 54 43 41 52 44 0d 0a 23  ICE_SMARTCARD..#
02b0: 64 65 66 69 6e 65 20 46 49 4c 45 5f 44 45 56 49  define FILE_DEVI
02c0: 43 45 5f 53 4d 41 52 54 43 41 52 44 20 20 20 20  CE_SMARTCARD    
02d0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 33         0x0000003
02e0: 31 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6c 73 65  1..#endif..#else
02f0: 0d 0a 23 69 66 20 30 78 30 30 30 30 30 30 33 31  ..#if 0x00000031
0300: 20 21 3d 20 46 49 4c 45 5f 44 45 56 49 43 45 5f   != FILE_DEVICE_
0310: 53 4d 41 52 54 43 41 52 44 0d 0a 23 65 72 72 6f  SMARTCARD..#erro
0320: 72 20 22 49 6e 63 6f 72 72 65 63 74 20 53 6d 61  r "Incorrect Sma
0330: 72 74 20 43 61 72 64 20 44 65 76 69 63 65 20 44  rt Card Device D
0340: 65 66 69 6e 69 74 69 6f 6e 22 0d 0a 23 65 6e 64  efinition"..#end
0350: 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 0d 0a  if..#endif......
0360: 2f 2f 0d 0a 2f 2f 20 56 61 72 69 6f 75 73 20 63  //..// Various c
0370: 6f 6e 73 74 61 6e 74 73 0d 0a 2f 2f 0d 0a 0d 0a  onstants..//....
0380: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
0390: 52 5f 4c 45 4e 47 54 48 20 33 33 20 20 2f 2f 20  R_LENGTH 33  // 
03a0: 49 53 4f 20 37 38 31 36 2d 33 20 73 70 65 63 2e  ISO 7816-3 spec.
03b0: 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f  ....//..////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0400: 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20  ///////..//..// 
0410: 20 50 72 6f 74 6f 63 6f 6c 20 46 6c 61 67 20 64   Protocol Flag d
0420: 65 66 69 6e 69 74 69 6f 6e 73 0d 0a 2f 2f 0d 0a  efinitions..//..
0430: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
0440: 50 52 4f 54 4f 43 4f 4c 5f 55 4e 44 45 46 49 4e  PROTOCOL_UNDEFIN
0450: 45 44 20 20 20 20 30 78 30 30 30 30 30 30 30 30  ED    0x00000000
0460: 20 20 2f 2f 20 54 68 65 72 65 20 69 73 20 6e 6f    // There is no
0470: 20 61 63 74 69 76 65 20 70 72 6f 74 6f 63 6f 6c   active protocol
0480: 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
0490: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 20 20 20  _PROTOCOL_T0    
04a0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30         0x0000000
04b0: 31 20 20 2f 2f 20 54 3d 30 20 69 73 20 74 68 65  1  // T=0 is the
04c0: 20 61 63 74 69 76 65 20 70 72 6f 74 6f 63 6f 6c   active protocol
04d0: 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
04e0: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 20 20 20 20  _PROTOCOL_T1    
04f0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30         0x0000000
0500: 32 20 20 2f 2f 20 54 3d 31 20 69 73 20 74 68 65  2  // T=1 is the
0510: 20 61 63 74 69 76 65 20 70 72 6f 74 6f 63 6f 6c   active protocol
0520: 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
0530: 5f 50 52 4f 54 4f 43 4f 4c 5f 52 41 57 20 20 20  _PROTOCOL_RAW   
0540: 20 20 20 20 20 20 20 30 78 30 30 30 31 30 30 30         0x0001000
0550: 30 20 20 2f 2f 20 52 61 77 20 69 73 20 74 68 65  0  // Raw is the
0560: 20 61 63 74 69 76 65 20 70 72 6f 74 6f 63 6f 6c   active protocol
0570: 2e 0d 0a 2f 2f 0d 0a 2f 2f 20 54 68 69 73 20 69  ...//..// This i
0580: 73 20 74 68 65 20 6d 61 73 6b 20 6f 66 20 49 53  s the mask of IS
0590: 4f 20 64 65 66 69 6e 65 64 20 74 72 61 6e 73 6d  O defined transm
05a0: 69 73 73 69 6f 6e 20 70 72 6f 74 6f 63 6f 6c 73  ission protocols
05b0: 0d 0a 2f 2f 0d 0a 23 64 65 66 69 6e 65 20 53 43  ..//..#define SC
05c0: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 78 20  ARD_PROTOCOL_Tx 
05d0: 20 20 20 20 20 20 20 20 20 20 28 53 43 41 52 44            (SCARD
05e0: 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 20 7c 20 53  _PROTOCOL_T0 | S
05f0: 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31  CARD_PROTOCOL_T1
0600: 29 0d 0a 2f 2f 0d 0a 2f 2f 20 55 73 65 20 74 68  )..//..// Use th
0610: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 6d  e default transm
0620: 69 73 73 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  ission parameter
0630: 73 20 2f 20 63 61 72 64 20 63 6c 6f 63 6b 20 66  s / card clock f
0640: 72 65 71 2e 0d 0a 2f 2f 0d 0a 23 64 65 66 69 6e  req...//..#defin
0650: 65 20 53 43 41 52 44 5f 50 52 4f 54 4f 43 4f 4c  e SCARD_PROTOCOL
0660: 5f 44 45 46 41 55 4c 54 20 20 20 20 20 20 30 78  _DEFAULT      0x
0670: 38 30 30 30 30 30 30 30 0d 0a 2f 2f 0d 0a 2f 2f  80000000..//..//
0680: 20 55 73 65 20 6f 70 74 69 6d 61 6c 20 74 72 61   Use optimal tra
0690: 6e 73 6d 69 73 73 69 6f 6e 20 70 61 72 61 6d 65  nsmission parame
06a0: 74 65 72 73 20 2f 20 63 61 72 64 20 63 6c 6f 63  ters / card cloc
06b0: 6b 20 66 72 65 71 2e 0d 0a 2f 2f 20 53 69 6e 63  k freq...// Sinc
06c0: 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 74 69  e using the opti
06d0: 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 69  mal parameters i
06e0: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61  s the default ca
06f0: 73 65 20 6e 6f 20 62 69 74 20 69 73 20 64 65 66  se no bit is def
0700: 69 6e 65 64 20 74 6f 20 62 65 20 31 0d 0a 2f 2f  ined to be 1..//
0710: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
0720: 50 52 4f 54 4f 43 4f 4c 5f 4f 50 54 49 4d 41 4c  PROTOCOL_OPTIMAL
0730: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 30        0x00000000
0740: 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 49 6f 63  ......//..// Ioc
0750: 74 6c 20 70 61 72 61 6d 65 74 65 72 73 20 31 20  tl parameters 1 
0760: 66 6f 72 20 49 4f 43 54 4c 5f 53 4d 41 52 54 43  for IOCTL_SMARTC
0770: 41 52 44 5f 50 4f 57 45 52 0d 0a 2f 2f 0d 0a 23  ARD_POWER..//..#
0780: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 50 4f 57  define SCARD_POW
0790: 45 52 5f 44 4f 57 4e 20 30 20 20 20 20 20 20 20  ER_DOWN 0       
07a0: 20 20 20 2f 2f 20 50 6f 77 65 72 20 64 6f 77 6e     // Power down
07b0: 20 74 68 65 20 63 61 72 64 2e 0d 0a 23 64 65 66   the card...#def
07c0: 69 6e 65 20 53 43 41 52 44 5f 43 4f 4c 44 5f 52  ine SCARD_COLD_R
07d0: 45 53 45 54 20 31 20 20 20 20 20 20 20 20 20 20  ESET 1          
07e0: 2f 2f 20 43 79 63 6c 65 20 70 6f 77 65 72 20 61  // Cycle power a
07f0: 6e 64 20 72 65 73 65 74 20 74 68 65 20 63 61 72  nd reset the car
0800: 64 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  d...#define SCAR
0810: 44 5f 57 41 52 4d 5f 52 45 53 45 54 20 32 20 20  D_WARM_RESET 2  
0820: 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 63 65          // Force
0830: 20 61 20 72 65 73 65 74 20 6f 6e 20 74 68 65 20   a reset on the 
0840: 63 61 72 64 2e 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f  card.....//..///
0850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f  ////////////..//
08a0: 0d 0a 2f 2f 20 20 52 65 61 64 65 72 20 41 63 74  ..//  Reader Act
08b0: 69 6f 6e 20 49 4f 43 54 4c 73 0d 0a 2f 2f 0d 0a  ion IOCTLs..//..
08c0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
08d0: 43 54 4c 5f 43 4f 44 45 28 63 6f 64 65 29 20 20  CTL_CODE(code)  
08e0: 20 20 20 20 20 20 43 54 4c 5f 43 4f 44 45 28 46        CTL_CODE(F
08f0: 49 4c 45 5f 44 45 56 49 43 45 5f 53 4d 41 52 54  ILE_DEVICE_SMART
0900: 43 41 52 44 2c 20 5c 0d 0a 20 20 20 20 20 20 20  CARD, \..       
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 20 20 28 63 6f 64 65 29 2c 20 5c 0d 0a       (code), \..
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0960: 20 20 20 20 20 20 20 20 20 20 20 20 4d 45 54 48              METH
0970: 4f 44 5f 42 55 46 46 45 52 45 44 2c 20 5c 0d 0a  OD_BUFFERED, \..
0980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 46 49 4c 45              FILE
09b0: 5f 41 4e 59 5f 41 43 43 45 53 53 29 0d 0a 0d 0a  _ANY_ACCESS)....
09c0: 23 64 65 66 69 6e 65 20 49 4f 43 54 4c 5f 53 4d  #define IOCTL_SM
09d0: 41 52 54 43 41 52 44 5f 50 4f 57 45 52 20 20 20  ARTCARD_POWER   
09e0: 20 20 20 20 20 20 20 20 53 43 41 52 44 5f 43 54          SCARD_CT
09f0: 4c 5f 43 4f 44 45 28 20 31 29 0d 0a 23 64 65 66  L_CODE( 1)..#def
0a00: 69 6e 65 20 49 4f 43 54 4c 5f 53 4d 41 52 54 43  ine IOCTL_SMARTC
0a10: 41 52 44 5f 47 45 54 5f 41 54 54 52 49 42 55 54  ARD_GET_ATTRIBUT
0a20: 45 20 20 20 53 43 41 52 44 5f 43 54 4c 5f 43 4f  E   SCARD_CTL_CO
0a30: 44 45 28 20 32 29 0d 0a 23 64 65 66 69 6e 65 20  DE( 2)..#define 
0a40: 49 4f 43 54 4c 5f 53 4d 41 52 54 43 41 52 44 5f  IOCTL_SMARTCARD_
0a50: 53 45 54 5f 41 54 54 52 49 42 55 54 45 20 20 20  SET_ATTRIBUTE   
0a60: 53 43 41 52 44 5f 43 54 4c 5f 43 4f 44 45 28 20  SCARD_CTL_CODE( 
0a70: 33 29 0d 0a 23 64 65 66 69 6e 65 20 49 4f 43 54  3)..#define IOCT
0a80: 4c 5f 53 4d 41 52 54 43 41 52 44 5f 43 4f 4e 46  L_SMARTCARD_CONF
0a90: 49 53 43 41 54 45 20 20 20 20 20 20 53 43 41 52  ISCATE      SCAR
0aa0: 44 5f 43 54 4c 5f 43 4f 44 45 28 20 34 29 0d 0a  D_CTL_CODE( 4)..
0ab0: 23 64 65 66 69 6e 65 20 49 4f 43 54 4c 5f 53 4d  #define IOCTL_SM
0ac0: 41 52 54 43 41 52 44 5f 54 52 41 4e 53 4d 49 54  ARTCARD_TRANSMIT
0ad0: 20 20 20 20 20 20 20 20 53 43 41 52 44 5f 43 54          SCARD_CT
0ae0: 4c 5f 43 4f 44 45 28 20 35 29 0d 0a 23 64 65 66  L_CODE( 5)..#def
0af0: 69 6e 65 20 49 4f 43 54 4c 5f 53 4d 41 52 54 43  ine IOCTL_SMARTC
0b00: 41 52 44 5f 45 4a 45 43 54 20 20 20 20 20 20 20  ARD_EJECT       
0b10: 20 20 20 20 53 43 41 52 44 5f 43 54 4c 5f 43 4f      SCARD_CTL_CO
0b20: 44 45 28 20 36 29 0d 0a 23 64 65 66 69 6e 65 20  DE( 6)..#define 
0b30: 49 4f 43 54 4c 5f 53 4d 41 52 54 43 41 52 44 5f  IOCTL_SMARTCARD_
0b40: 53 57 41 4c 4c 4f 57 20 20 20 20 20 20 20 20 20  SWALLOW         
0b50: 53 43 41 52 44 5f 43 54 4c 5f 43 4f 44 45 28 20  SCARD_CTL_CODE( 
0b60: 37 29 0d 0a 2f 2f 20 23 64 65 66 69 6e 65 20 49  7)..// #define I
0b70: 4f 43 54 4c 5f 53 4d 41 52 54 43 41 52 44 5f 52  OCTL_SMARTCARD_R
0b80: 45 41 44 20 20 20 20 20 20 20 20 20 20 20 20 53  EAD            S
0b90: 43 41 52 44 5f 43 54 4c 5f 43 4f 44 45 28 20 38  CARD_CTL_CODE( 8
0ba0: 29 20 6f 62 73 6f 6c 65 74 65 0d 0a 2f 2f 20 23  ) obsolete..// #
0bb0: 64 65 66 69 6e 65 20 49 4f 43 54 4c 5f 53 4d 41  define IOCTL_SMA
0bc0: 52 54 43 41 52 44 5f 57 52 49 54 45 20 20 20 20  RTCARD_WRITE    
0bd0: 20 20 20 20 20 20 20 53 43 41 52 44 5f 43 54 4c         SCARD_CTL
0be0: 5f 43 4f 44 45 28 20 39 29 20 6f 62 73 6f 6c 65  _CODE( 9) obsole
0bf0: 74 65 0d 0a 23 64 65 66 69 6e 65 20 49 4f 43 54  te..#define IOCT
0c00: 4c 5f 53 4d 41 52 54 43 41 52 44 5f 49 53 5f 50  L_SMARTCARD_IS_P
0c10: 52 45 53 45 4e 54 20 20 20 20 20 20 53 43 41 52  RESENT      SCAR
0c20: 44 5f 43 54 4c 5f 43 4f 44 45 28 31 30 29 0d 0a  D_CTL_CODE(10)..
0c30: 23 64 65 66 69 6e 65 20 49 4f 43 54 4c 5f 53 4d  #define IOCTL_SM
0c40: 41 52 54 43 41 52 44 5f 49 53 5f 41 42 53 45 4e  ARTCARD_IS_ABSEN
0c50: 54 20 20 20 20 20 20 20 53 43 41 52 44 5f 43 54  T       SCARD_CT
0c60: 4c 5f 43 4f 44 45 28 31 31 29 0d 0a 23 64 65 66  L_CODE(11)..#def
0c70: 69 6e 65 20 49 4f 43 54 4c 5f 53 4d 41 52 54 43  ine IOCTL_SMARTC
0c80: 41 52 44 5f 53 45 54 5f 50 52 4f 54 4f 43 4f 4c  ARD_SET_PROTOCOL
0c90: 20 20 20 20 53 43 41 52 44 5f 43 54 4c 5f 43 4f      SCARD_CTL_CO
0ca0: 44 45 28 31 32 29 0d 0a 23 64 65 66 69 6e 65 20  DE(12)..#define 
0cb0: 49 4f 43 54 4c 5f 53 4d 41 52 54 43 41 52 44 5f  IOCTL_SMARTCARD_
0cc0: 47 45 54 5f 53 54 41 54 45 20 20 20 20 20 20 20  GET_STATE       
0cd0: 53 43 41 52 44 5f 43 54 4c 5f 43 4f 44 45 28 31  SCARD_CTL_CODE(1
0ce0: 34 29 0d 0a 23 64 65 66 69 6e 65 20 49 4f 43 54  4)..#define IOCT
0cf0: 4c 5f 53 4d 41 52 54 43 41 52 44 5f 47 45 54 5f  L_SMARTCARD_GET_
0d00: 4c 41 53 54 5f 45 52 52 4f 52 20 20 53 43 41 52  LAST_ERROR  SCAR
0d10: 44 5f 43 54 4c 5f 43 4f 44 45 28 31 35 29 0d 0a  D_CTL_CODE(15)..
0d20: 23 64 65 66 69 6e 65 20 49 4f 43 54 4c 5f 53 4d  #define IOCTL_SM
0d30: 41 52 54 43 41 52 44 5f 47 45 54 5f 50 45 52 46  ARTCARD_GET_PERF
0d40: 5f 43 4e 54 52 20 20 20 53 43 41 52 44 5f 43 54  _CNTR   SCARD_CT
0d50: 4c 5f 43 4f 44 45 28 31 36 29 0d 0a 0d 0a 0d 0a  L_CODE(16)......
0d60: 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //..////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0db0: 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 54 61 67 73  ///..//..// Tags
0dc0: 20 66 6f 72 20 72 65 71 75 65 73 74 69 6e 67 20   for requesting 
0dd0: 63 61 72 64 20 61 6e 64 20 72 65 61 64 65 72 20  card and reader 
0de0: 61 74 74 72 69 62 75 74 65 73 0d 0a 2f 2f 0d 0a  attributes..//..
0df0: 0d 0a 23 64 65 66 69 6e 65 20 4d 41 58 49 4d 55  ..#define MAXIMU
0e00: 4d 5f 41 54 54 52 5f 53 54 52 49 4e 47 5f 4c 45  M_ATTR_STRING_LE
0e10: 4e 47 54 48 20 33 32 20 20 20 2f 2f 20 4e 6f 74  NGTH 32   // Not
0e20: 68 69 6e 67 20 62 69 67 67 65 72 20 74 68 61 6e  hing bigger than
0e30: 20 74 68 69 73 20 66 72 6f 6d 20 67 65 74 41 74   this from getAt
0e40: 74 72 0d 0a 23 64 65 66 69 6e 65 20 4d 41 58 49  tr..#define MAXI
0e50: 4d 55 4d 5f 53 4d 41 52 54 43 41 52 44 5f 52 45  MUM_SMARTCARD_RE
0e60: 41 44 45 52 53 20 20 31 30 20 20 20 2f 2f 20 4c  ADERS  10   // L
0e70: 69 6d 69 74 20 74 68 65 20 72 65 61 64 65 72 73  imit the readers
0e80: 20 6f 6e 20 74 68 65 20 73 79 73 74 65 6d 0d 0a   on the system..
0e90: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
0ea0: 41 54 54 52 5f 56 41 4c 55 45 28 43 6c 61 73 73  ATTR_VALUE(Class
0eb0: 2c 20 54 61 67 29 20 28 28 28 28 55 4c 4f 4e 47  , Tag) ((((ULONG
0ec0: 29 28 43 6c 61 73 73 29 29 20 3c 3c 20 31 36 29  )(Class)) << 16)
0ed0: 20 7c 20 28 28 55 4c 4f 4e 47 29 28 54 61 67 29   | ((ULONG)(Tag)
0ee0: 29 29 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43  ))....#define SC
0ef0: 41 52 44 5f 43 4c 41 53 53 5f 56 45 4e 44 4f 52  ARD_CLASS_VENDOR
0f00: 5f 49 4e 46 4f 20 20 20 20 20 31 20 20 20 2f 2f  _INFO     1   //
0f10: 20 56 65 6e 64 6f 72 20 69 6e 66 6f 72 6d 61 74   Vendor informat
0f20: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d  ion definitions.
0f30: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 43  .#define SCARD_C
0f40: 4c 41 53 53 5f 43 4f 4d 4d 55 4e 49 43 41 54 49  LASS_COMMUNICATI
0f50: 4f 4e 53 20 20 32 20 20 20 2f 2f 20 43 6f 6d 6d  ONS  2   // Comm
0f60: 75 6e 69 63 61 74 69 6f 6e 20 64 65 66 69 6e 69  unication defini
0f70: 74 69 6f 6e 73 0d 0a 23 64 65 66 69 6e 65 20 53  tions..#define S
0f80: 43 41 52 44 5f 43 4c 41 53 53 5f 50 52 4f 54 4f  CARD_CLASS_PROTO
0f90: 43 4f 4c 20 20 20 20 20 20 20 20 33 20 20 20 2f  COL        3   /
0fa0: 2f 20 50 72 6f 74 6f 63 6f 6c 20 64 65 66 69 6e  / Protocol defin
0fb0: 69 74 69 6f 6e 73 0d 0a 23 64 65 66 69 6e 65 20  itions..#define 
0fc0: 53 43 41 52 44 5f 43 4c 41 53 53 5f 50 4f 57 45  SCARD_CLASS_POWE
0fd0: 52 5f 4d 47 4d 54 20 20 20 20 20 20 34 20 20 20  R_MGMT      4   
0fe0: 2f 2f 20 50 6f 77 65 72 20 4d 61 6e 61 67 65 6d  // Power Managem
0ff0: 65 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d  ent definitions.
1000: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 43  .#define SCARD_C
1010: 4c 41 53 53 5f 53 45 43 55 52 49 54 59 20 20 20  LASS_SECURITY   
1020: 20 20 20 20 20 35 20 20 20 2f 2f 20 53 65 63 75       5   // Secu
1030: 72 69 74 79 20 41 73 73 75 72 61 6e 63 65 20 64  rity Assurance d
1040: 65 66 69 6e 69 74 69 6f 6e 73 0d 0a 23 64 65 66  efinitions..#def
1050: 69 6e 65 20 53 43 41 52 44 5f 43 4c 41 53 53 5f  ine SCARD_CLASS_
1060: 4d 45 43 48 41 4e 49 43 41 4c 20 20 20 20 20 20  MECHANICAL      
1070: 36 20 20 20 2f 2f 20 4d 65 63 68 61 6e 69 63 61  6   // Mechanica
1080: 6c 20 63 68 61 72 61 63 74 65 72 69 73 74 69 63  l characteristic
1090: 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d 0a 23 64   definitions..#d
10a0: 65 66 69 6e 65 20 53 43 41 52 44 5f 43 4c 41 53  efine SCARD_CLAS
10b0: 53 5f 56 45 4e 44 4f 52 5f 44 45 46 49 4e 45 44  S_VENDOR_DEFINED
10c0: 20 20 37 20 20 20 2f 2f 20 56 65 6e 64 6f 72 20    7   // Vendor 
10d0: 73 70 65 63 69 66 69 63 20 64 65 66 69 6e 69 74  specific definit
10e0: 69 6f 6e 73 0d 0a 23 64 65 66 69 6e 65 20 53 43  ions..#define SC
10f0: 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f 50 52  ARD_CLASS_IFD_PR
1100: 4f 54 4f 43 4f 4c 20 20 20 20 38 20 20 20 2f 2f  OTOCOL    8   //
1110: 20 49 6e 74 65 72 66 61 63 65 20 44 65 76 69 63   Interface Devic
1120: 65 20 50 72 6f 74 6f 63 6f 6c 20 6f 70 74 69 6f  e Protocol optio
1130: 6e 73 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  ns..#define SCAR
1140: 44 5f 43 4c 41 53 53 5f 49 43 43 5f 53 54 41 54  D_CLASS_ICC_STAT
1150: 45 20 20 20 20 20 20 20 39 20 20 20 2f 2f 20 49  E       9   // I
1160: 43 43 20 53 74 61 74 65 20 73 70 65 63 69 66 69  CC State specifi
1170: 63 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d 0a 23  c definitions..#
1180: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 43 4c 41  define SCARD_CLA
1190: 53 53 5f 50 45 52 46 20 20 20 20 20 20 20 30 78  SS_PERF       0x
11a0: 37 66 66 65 20 20 20 2f 2f 20 70 65 72 66 6f 72  7ffe   // perfor
11b0: 6d 61 63 65 20 63 6f 75 6e 74 65 72 73 0d 0a 23  mace counters..#
11c0: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 43 4c 41  define SCARD_CLA
11d0: 53 53 5f 53 59 53 54 45 4d 20 20 20 20 20 30 78  SS_SYSTEM     0x
11e0: 37 66 66 66 20 20 20 2f 2f 20 53 79 73 74 65 6d  7fff   // System
11f0: 2d 73 70 65 63 69 66 69 63 20 64 65 66 69 6e 69  -specific defini
1200: 74 69 6f 6e 73 0d 0a 0d 0a 23 64 65 66 69 6e 65  tions....#define
1210: 20 53 43 41 52 44 5f 41 54 54 52 5f 56 45 4e 44   SCARD_ATTR_VEND
1220: 4f 52 5f 4e 41 4d 45 20 53 43 41 52 44 5f 41 54  OR_NAME SCARD_AT
1230: 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43  TR_VALUE(SCARD_C
1240: 4c 41 53 53 5f 56 45 4e 44 4f 52 5f 49 4e 46 4f  LASS_VENDOR_INFO
1250: 2c 20 30 78 30 31 30 30 29 0d 0a 23 64 65 66 69  , 0x0100)..#defi
1260: 6e 65 20 53 43 41 52 44 5f 41 54 54 52 5f 56 45  ne SCARD_ATTR_VE
1270: 4e 44 4f 52 5f 49 46 44 5f 54 59 50 45 20 53 43  NDOR_IFD_TYPE SC
1280: 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53  ARD_ATTR_VALUE(S
1290: 43 41 52 44 5f 43 4c 41 53 53 5f 56 45 4e 44 4f  CARD_CLASS_VENDO
12a0: 52 5f 49 4e 46 4f 2c 20 30 78 30 31 30 31 29 0d  R_INFO, 0x0101).
12b0: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41  .#define SCARD_A
12c0: 54 54 52 5f 56 45 4e 44 4f 52 5f 49 46 44 5f 56  TTR_VENDOR_IFD_V
12d0: 45 52 53 49 4f 4e 20 53 43 41 52 44 5f 41 54 54  ERSION SCARD_ATT
12e0: 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c  R_VALUE(SCARD_CL
12f0: 41 53 53 5f 56 45 4e 44 4f 52 5f 49 4e 46 4f 2c  ASS_VENDOR_INFO,
1300: 20 30 78 30 31 30 32 29 0d 0a 23 64 65 66 69 6e   0x0102)..#defin
1310: 65 20 53 43 41 52 44 5f 41 54 54 52 5f 56 45 4e  e SCARD_ATTR_VEN
1320: 44 4f 52 5f 49 46 44 5f 53 45 52 49 41 4c 5f 4e  DOR_IFD_SERIAL_N
1330: 4f 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c  O SCARD_ATTR_VAL
1340: 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 56  UE(SCARD_CLASS_V
1350: 45 4e 44 4f 52 5f 49 4e 46 4f 2c 20 30 78 30 31  ENDOR_INFO, 0x01
1360: 30 33 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  03)..#define SCA
1370: 52 44 5f 41 54 54 52 5f 43 48 41 4e 4e 45 4c 5f  RD_ATTR_CHANNEL_
1380: 49 44 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41  ID SCARD_ATTR_VA
1390: 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f  LUE(SCARD_CLASS_
13a0: 43 4f 4d 4d 55 4e 49 43 41 54 49 4f 4e 53 2c 20  COMMUNICATIONS, 
13b0: 30 78 30 31 31 30 29 0d 0a 23 64 65 66 69 6e 65  0x0110)..#define
13c0: 20 53 43 41 52 44 5f 41 54 54 52 5f 50 52 4f 54   SCARD_ATTR_PROT
13d0: 4f 43 4f 4c 5f 54 59 50 45 53 20 53 43 41 52 44  OCOL_TYPES SCARD
13e0: 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52  _ATTR_VALUE(SCAR
13f0: 44 5f 43 4c 41 53 53 5f 50 52 4f 54 4f 43 4f 4c  D_CLASS_PROTOCOL
1400: 2c 20 30 78 30 31 32 30 29 0d 0a 2f 2f 20 23 64  , 0x0120)..// #d
1410: 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52  efine SCARD_ATTR
1420: 5f 41 53 59 4e 43 5f 50 52 4f 54 4f 43 4f 4c 5f  _ASYNC_PROTOCOL_
1430: 54 59 50 45 53 20 53 43 41 52 44 5f 41 54 54 52  TYPES SCARD_ATTR
1440: 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41  _VALUE(SCARD_CLA
1450: 53 53 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30  SS_PROTOCOL, 0x0
1460: 31 32 30 29 0d 0a 23 64 65 66 69 6e 65 20 53 43  120)..#define SC
1470: 41 52 44 5f 41 54 54 52 5f 44 45 46 41 55 4c 54  ARD_ATTR_DEFAULT
1480: 5f 43 4c 4b 20 53 43 41 52 44 5f 41 54 54 52 5f  _CLK SCARD_ATTR_
1490: 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53  VALUE(SCARD_CLAS
14a0: 53 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 31  S_PROTOCOL, 0x01
14b0: 32 31 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  21)..#define SCA
14c0: 52 44 5f 41 54 54 52 5f 4d 41 58 5f 43 4c 4b 20  RD_ATTR_MAX_CLK 
14d0: 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45  SCARD_ATTR_VALUE
14e0: 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 50 52 4f  (SCARD_CLASS_PRO
14f0: 54 4f 43 4f 4c 2c 20 30 78 30 31 32 32 29 0d 0a  TOCOL, 0x0122)..
1500: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
1510: 54 52 5f 44 45 46 41 55 4c 54 5f 44 41 54 41 5f  TR_DEFAULT_DATA_
1520: 52 41 54 45 20 53 43 41 52 44 5f 41 54 54 52 5f  RATE SCARD_ATTR_
1530: 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53  VALUE(SCARD_CLAS
1540: 53 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 31  S_PROTOCOL, 0x01
1550: 32 33 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  23)..#define SCA
1560: 52 44 5f 41 54 54 52 5f 4d 41 58 5f 44 41 54 41  RD_ATTR_MAX_DATA
1570: 5f 52 41 54 45 20 53 43 41 52 44 5f 41 54 54 52  _RATE SCARD_ATTR
1580: 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41  _VALUE(SCARD_CLA
1590: 53 53 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30  SS_PROTOCOL, 0x0
15a0: 31 32 34 29 0d 0a 23 64 65 66 69 6e 65 20 53 43  124)..#define SC
15b0: 41 52 44 5f 41 54 54 52 5f 4d 41 58 5f 49 46 53  ARD_ATTR_MAX_IFS
15c0: 44 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c  D SCARD_ATTR_VAL
15d0: 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 50  UE(SCARD_CLASS_P
15e0: 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 31 32 35 29  ROTOCOL, 0x0125)
15f0: 0d 0a 2f 2f 20 23 64 65 66 69 6e 65 20 53 43 41  ..// #define SCA
1600: 52 44 5f 41 54 54 52 5f 53 59 4e 43 5f 50 52 4f  RD_ATTR_SYNC_PRO
1610: 54 4f 43 4f 4c 5f 54 59 50 45 53 20 53 43 41 52  TOCOL_TYPES SCAR
1620: 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41  D_ATTR_VALUE(SCA
1630: 52 44 5f 43 4c 41 53 53 5f 50 52 4f 54 4f 43 4f  RD_CLASS_PROTOCO
1640: 4c 2c 20 30 78 30 31 32 36 29 0d 0a 23 64 65 66  L, 0x0126)..#def
1650: 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52 5f 50  ine SCARD_ATTR_P
1660: 4f 57 45 52 5f 4d 47 4d 54 5f 53 55 50 50 4f 52  OWER_MGMT_SUPPOR
1670: 54 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c  T SCARD_ATTR_VAL
1680: 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 50  UE(SCARD_CLASS_P
1690: 4f 57 45 52 5f 4d 47 4d 54 2c 20 30 78 30 31 33  OWER_MGMT, 0x013
16a0: 31 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  1)..#define SCAR
16b0: 44 5f 41 54 54 52 5f 55 53 45 52 5f 54 4f 5f 43  D_ATTR_USER_TO_C
16c0: 41 52 44 5f 41 55 54 48 5f 44 45 56 49 43 45 20  ARD_AUTH_DEVICE 
16d0: 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45  SCARD_ATTR_VALUE
16e0: 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 53 45 43  (SCARD_CLASS_SEC
16f0: 55 52 49 54 59 2c 20 30 78 30 31 34 30 29 0d 0a  URITY, 0x0140)..
1700: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
1710: 54 52 5f 55 53 45 52 5f 41 55 54 48 5f 49 4e 50  TR_USER_AUTH_INP
1720: 55 54 5f 44 45 56 49 43 45 20 53 43 41 52 44 5f  UT_DEVICE SCARD_
1730: 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44  ATTR_VALUE(SCARD
1740: 5f 43 4c 41 53 53 5f 53 45 43 55 52 49 54 59 2c  _CLASS_SECURITY,
1750: 20 30 78 30 31 34 32 29 0d 0a 23 64 65 66 69 6e   0x0142)..#defin
1760: 65 20 53 43 41 52 44 5f 41 54 54 52 5f 43 48 41  e SCARD_ATTR_CHA
1770: 52 41 43 54 45 52 49 53 54 49 43 53 20 53 43 41  RACTERISTICS SCA
1780: 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43  RD_ATTR_VALUE(SC
1790: 41 52 44 5f 43 4c 41 53 53 5f 4d 45 43 48 41 4e  ARD_CLASS_MECHAN
17a0: 49 43 41 4c 2c 20 30 78 30 31 35 30 29 0d 0a 0d  ICAL, 0x0150)...
17b0: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41  .#define SCARD_A
17c0: 54 54 52 5f 43 55 52 52 45 4e 54 5f 50 52 4f 54  TTR_CURRENT_PROT
17d0: 4f 43 4f 4c 5f 54 59 50 45 20 53 43 41 52 44 5f  OCOL_TYPE SCARD_
17e0: 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44  ATTR_VALUE(SCARD
17f0: 5f 43 4c 41 53 53 5f 49 46 44 5f 50 52 4f 54 4f  _CLASS_IFD_PROTO
1800: 43 4f 4c 2c 20 30 78 30 32 30 31 29 0d 0a 23 64  COL, 0x0201)..#d
1810: 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52  efine SCARD_ATTR
1820: 5f 43 55 52 52 45 4e 54 5f 43 4c 4b 20 53 43 41  _CURRENT_CLK SCA
1830: 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43  RD_ATTR_VALUE(SC
1840: 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f 50 52  ARD_CLASS_IFD_PR
1850: 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30 32 29 0d  OTOCOL, 0x0202).
1860: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41  .#define SCARD_A
1870: 54 54 52 5f 43 55 52 52 45 4e 54 5f 46 20 53 43  TTR_CURRENT_F SC
1880: 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53  ARD_ATTR_VALUE(S
1890: 43 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f 50  CARD_CLASS_IFD_P
18a0: 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30 33 29  ROTOCOL, 0x0203)
18b0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
18c0: 41 54 54 52 5f 43 55 52 52 45 4e 54 5f 44 20 53  ATTR_CURRENT_D S
18d0: 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28  CARD_ATTR_VALUE(
18e0: 53 43 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f  SCARD_CLASS_IFD_
18f0: 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30 34  PROTOCOL, 0x0204
1900: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
1910: 5f 41 54 54 52 5f 43 55 52 52 45 4e 54 5f 4e 20  _ATTR_CURRENT_N 
1920: 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45  SCARD_ATTR_VALUE
1930: 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 49 46 44  (SCARD_CLASS_IFD
1940: 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30  _PROTOCOL, 0x020
1950: 35 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  5)..#define SCAR
1960: 44 5f 41 54 54 52 5f 43 55 52 52 45 4e 54 5f 57  D_ATTR_CURRENT_W
1970: 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55   SCARD_ATTR_VALU
1980: 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 49 46  E(SCARD_CLASS_IF
1990: 44 5f 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32  D_PROTOCOL, 0x02
19a0: 30 36 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  06)..#define SCA
19b0: 52 44 5f 41 54 54 52 5f 43 55 52 52 45 4e 54 5f  RD_ATTR_CURRENT_
19c0: 49 46 53 43 20 53 43 41 52 44 5f 41 54 54 52 5f  IFSC SCARD_ATTR_
19d0: 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53  VALUE(SCARD_CLAS
19e0: 53 5f 49 46 44 5f 50 52 4f 54 4f 43 4f 4c 2c 20  S_IFD_PROTOCOL, 
19f0: 30 78 30 32 30 37 29 0d 0a 23 64 65 66 69 6e 65  0x0207)..#define
1a00: 20 53 43 41 52 44 5f 41 54 54 52 5f 43 55 52 52   SCARD_ATTR_CURR
1a10: 45 4e 54 5f 49 46 53 44 20 53 43 41 52 44 5f 41  ENT_IFSD SCARD_A
1a20: 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f  TTR_VALUE(SCARD_
1a30: 43 4c 41 53 53 5f 49 46 44 5f 50 52 4f 54 4f 43  CLASS_IFD_PROTOC
1a40: 4f 4c 2c 20 30 78 30 32 30 38 29 0d 0a 23 64 65  OL, 0x0208)..#de
1a50: 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52 5f  fine SCARD_ATTR_
1a60: 43 55 52 52 45 4e 54 5f 42 57 54 20 53 43 41 52  CURRENT_BWT SCAR
1a70: 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41  D_ATTR_VALUE(SCA
1a80: 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f 50 52 4f  RD_CLASS_IFD_PRO
1a90: 54 4f 43 4f 4c 2c 20 30 78 30 32 30 39 29 0d 0a  TOCOL, 0x0209)..
1aa0: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
1ab0: 54 52 5f 43 55 52 52 45 4e 54 5f 43 57 54 20 53  TR_CURRENT_CWT S
1ac0: 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28  CARD_ATTR_VALUE(
1ad0: 53 43 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f  SCARD_CLASS_IFD_
1ae0: 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30 61  PROTOCOL, 0x020a
1af0: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
1b00: 5f 41 54 54 52 5f 43 55 52 52 45 4e 54 5f 45 42  _ATTR_CURRENT_EB
1b10: 43 5f 45 4e 43 4f 44 49 4e 47 20 53 43 41 52 44  C_ENCODING SCARD
1b20: 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52  _ATTR_VALUE(SCAR
1b30: 44 5f 43 4c 41 53 53 5f 49 46 44 5f 50 52 4f 54  D_CLASS_IFD_PROT
1b40: 4f 43 4f 4c 2c 20 30 78 30 32 30 62 29 0d 0a 23  OCOL, 0x020b)..#
1b50: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54  define SCARD_ATT
1b60: 52 5f 45 58 54 45 4e 44 45 44 5f 42 57 54 20 53  R_EXTENDED_BWT S
1b70: 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28  CARD_ATTR_VALUE(
1b80: 53 43 41 52 44 5f 43 4c 41 53 53 5f 49 46 44 5f  SCARD_CLASS_IFD_
1b90: 50 52 4f 54 4f 43 4f 4c 2c 20 30 78 30 32 30 63  PROTOCOL, 0x020c
1ba0: 29 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  )....#define SCA
1bb0: 52 44 5f 41 54 54 52 5f 49 43 43 5f 50 52 45 53  RD_ATTR_ICC_PRES
1bc0: 45 4e 43 45 20 53 43 41 52 44 5f 41 54 54 52 5f  ENCE SCARD_ATTR_
1bd0: 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53  VALUE(SCARD_CLAS
1be0: 53 5f 49 43 43 5f 53 54 41 54 45 2c 20 30 78 30  S_ICC_STATE, 0x0
1bf0: 33 30 30 29 0d 0a 23 64 65 66 69 6e 65 20 53 43  300)..#define SC
1c00: 41 52 44 5f 41 54 54 52 5f 49 43 43 5f 49 4e 54  ARD_ATTR_ICC_INT
1c10: 45 52 46 41 43 45 5f 53 54 41 54 55 53 20 53 43  ERFACE_STATUS SC
1c20: 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53  ARD_ATTR_VALUE(S
1c30: 43 41 52 44 5f 43 4c 41 53 53 5f 49 43 43 5f 53  CARD_CLASS_ICC_S
1c40: 54 41 54 45 2c 20 30 78 30 33 30 31 29 0d 0a 23  TATE, 0x0301)..#
1c50: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54  define SCARD_ATT
1c60: 52 5f 43 55 52 52 45 4e 54 5f 49 4f 5f 53 54 41  R_CURRENT_IO_STA
1c70: 54 45 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41  TE SCARD_ATTR_VA
1c80: 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f  LUE(SCARD_CLASS_
1c90: 49 43 43 5f 53 54 41 54 45 2c 20 30 78 30 33 30  ICC_STATE, 0x030
1ca0: 32 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  2)..#define SCAR
1cb0: 44 5f 41 54 54 52 5f 41 54 52 5f 53 54 52 49 4e  D_ATTR_ATR_STRIN
1cc0: 47 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c  G SCARD_ATTR_VAL
1cd0: 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 49  UE(SCARD_CLASS_I
1ce0: 43 43 5f 53 54 41 54 45 2c 20 30 78 30 33 30 33  CC_STATE, 0x0303
1cf0: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
1d00: 5f 41 54 54 52 5f 49 43 43 5f 54 59 50 45 5f 50  _ATTR_ICC_TYPE_P
1d10: 45 52 5f 41 54 52 20 53 43 41 52 44 5f 41 54 54  ER_ATR SCARD_ATT
1d20: 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c  R_VALUE(SCARD_CL
1d30: 41 53 53 5f 49 43 43 5f 53 54 41 54 45 2c 20 30  ASS_ICC_STATE, 0
1d40: 78 30 33 30 34 29 0d 0a 0d 0a 23 64 65 66 69 6e  x0304)....#defin
1d50: 65 20 53 43 41 52 44 5f 41 54 54 52 5f 45 53 43  e SCARD_ATTR_ESC
1d60: 5f 52 45 53 45 54 20 53 43 41 52 44 5f 41 54 54  _RESET SCARD_ATT
1d70: 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c  R_VALUE(SCARD_CL
1d80: 41 53 53 5f 56 45 4e 44 4f 52 5f 44 45 46 49 4e  ASS_VENDOR_DEFIN
1d90: 45 44 2c 20 30 78 41 30 30 30 29 0d 0a 23 64 65  ED, 0xA000)..#de
1da0: 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52 5f  fine SCARD_ATTR_
1db0: 45 53 43 5f 43 41 4e 43 45 4c 20 53 43 41 52 44  ESC_CANCEL SCARD
1dc0: 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52  _ATTR_VALUE(SCAR
1dd0: 44 5f 43 4c 41 53 53 5f 56 45 4e 44 4f 52 5f 44  D_CLASS_VENDOR_D
1de0: 45 46 49 4e 45 44 2c 20 30 78 41 30 30 33 29 0d  EFINED, 0xA003).
1df0: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41  .#define SCARD_A
1e00: 54 54 52 5f 45 53 43 5f 41 55 54 48 52 45 51 55  TTR_ESC_AUTHREQU
1e10: 45 53 54 20 53 43 41 52 44 5f 41 54 54 52 5f 56  EST SCARD_ATTR_V
1e20: 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53  ALUE(SCARD_CLASS
1e30: 5f 56 45 4e 44 4f 52 5f 44 45 46 49 4e 45 44 2c  _VENDOR_DEFINED,
1e40: 20 30 78 41 30 30 35 29 0d 0a 23 64 65 66 69 6e   0xA005)..#defin
1e50: 65 20 53 43 41 52 44 5f 41 54 54 52 5f 4d 41 58  e SCARD_ATTR_MAX
1e60: 49 4e 50 55 54 20 53 43 41 52 44 5f 41 54 54 52  INPUT SCARD_ATTR
1e70: 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41  _VALUE(SCARD_CLA
1e80: 53 53 5f 56 45 4e 44 4f 52 5f 44 45 46 49 4e 45  SS_VENDOR_DEFINE
1e90: 44 2c 20 30 78 41 30 30 37 29 0d 0a 0d 0a 23 64  D, 0xA007)....#d
1ea0: 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52  efine SCARD_ATTR
1eb0: 5f 44 45 56 49 43 45 5f 55 4e 49 54 20 53 43 41  _DEVICE_UNIT SCA
1ec0: 52 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43  RD_ATTR_VALUE(SC
1ed0: 41 52 44 5f 43 4c 41 53 53 5f 53 59 53 54 45 4d  ARD_CLASS_SYSTEM
1ee0: 2c 20 30 78 30 30 30 31 29 0d 0a 23 64 65 66 69  , 0x0001)..#defi
1ef0: 6e 65 20 53 43 41 52 44 5f 41 54 54 52 5f 44 45  ne SCARD_ATTR_DE
1f00: 56 49 43 45 5f 49 4e 5f 55 53 45 20 53 43 41 52  VICE_IN_USE SCAR
1f10: 44 5f 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41  D_ATTR_VALUE(SCA
1f20: 52 44 5f 43 4c 41 53 53 5f 53 59 53 54 45 4d 2c  RD_CLASS_SYSTEM,
1f30: 20 30 78 30 30 30 32 29 0d 0a 23 64 65 66 69 6e   0x0002)..#defin
1f40: 65 20 53 43 41 52 44 5f 41 54 54 52 5f 44 45 56  e SCARD_ATTR_DEV
1f50: 49 43 45 5f 46 52 49 45 4e 44 4c 59 5f 4e 41 4d  ICE_FRIENDLY_NAM
1f60: 45 5f 41 20 53 43 41 52 44 5f 41 54 54 52 5f 56  E_A SCARD_ATTR_V
1f70: 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53  ALUE(SCARD_CLASS
1f80: 5f 53 59 53 54 45 4d 2c 20 30 78 30 30 30 33 29  _SYSTEM, 0x0003)
1f90: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
1fa0: 41 54 54 52 5f 44 45 56 49 43 45 5f 53 59 53 54  ATTR_DEVICE_SYST
1fb0: 45 4d 5f 4e 41 4d 45 5f 41 20 53 43 41 52 44 5f  EM_NAME_A SCARD_
1fc0: 41 54 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44  ATTR_VALUE(SCARD
1fd0: 5f 43 4c 41 53 53 5f 53 59 53 54 45 4d 2c 20 30  _CLASS_SYSTEM, 0
1fe0: 78 30 30 30 34 29 0d 0a 23 64 65 66 69 6e 65 20  x0004)..#define 
1ff0: 53 43 41 52 44 5f 41 54 54 52 5f 44 45 56 49 43  SCARD_ATTR_DEVIC
2000: 45 5f 46 52 49 45 4e 44 4c 59 5f 4e 41 4d 45 5f  E_FRIENDLY_NAME_
2010: 57 20 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c  W SCARD_ATTR_VAL
2020: 55 45 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 53  UE(SCARD_CLASS_S
2030: 59 53 54 45 4d 2c 20 30 78 30 30 30 35 29 0d 0a  YSTEM, 0x0005)..
2040: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
2050: 54 52 5f 44 45 56 49 43 45 5f 53 59 53 54 45 4d  TR_DEVICE_SYSTEM
2060: 5f 4e 41 4d 45 5f 57 20 53 43 41 52 44 5f 41 54  _NAME_W SCARD_AT
2070: 54 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43  TR_VALUE(SCARD_C
2080: 4c 41 53 53 5f 53 59 53 54 45 4d 2c 20 30 78 30  LASS_SYSTEM, 0x0
2090: 30 30 36 29 0d 0a 23 64 65 66 69 6e 65 20 53 43  006)..#define SC
20a0: 41 52 44 5f 41 54 54 52 5f 53 55 50 52 45 53 53  ARD_ATTR_SUPRESS
20b0: 5f 54 31 5f 49 46 53 5f 52 45 51 55 45 53 54 20  _T1_IFS_REQUEST 
20c0: 53 43 41 52 44 5f 41 54 54 52 5f 56 41 4c 55 45  SCARD_ATTR_VALUE
20d0: 28 53 43 41 52 44 5f 43 4c 41 53 53 5f 53 59 53  (SCARD_CLASS_SYS
20e0: 54 45 4d 2c 20 30 78 30 30 30 37 29 0d 0a 0d 0a  TEM, 0x0007)....
20f0: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 50 45  #define SCARD_PE
2100: 52 46 5f 4e 55 4d 5f 54 52 41 4e 53 4d 49 53 53  RF_NUM_TRANSMISS
2110: 49 4f 4e 53 20 53 43 41 52 44 5f 41 54 54 52 5f  IONS SCARD_ATTR_
2120: 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41 53  VALUE(SCARD_CLAS
2130: 53 5f 50 45 52 46 2c 20 30 78 30 30 30 31 29 0d  S_PERF, 0x0001).
2140: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 50  .#define SCARD_P
2150: 45 52 46 5f 42 59 54 45 53 5f 54 52 41 4e 53 4d  ERF_BYTES_TRANSM
2160: 49 54 54 45 44 20 53 43 41 52 44 5f 41 54 54 52  ITTED SCARD_ATTR
2170: 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c 41  _VALUE(SCARD_CLA
2180: 53 53 5f 50 45 52 46 2c 20 30 78 30 30 30 32 29  SS_PERF, 0x0002)
2190: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
21a0: 50 45 52 46 5f 54 52 41 4e 53 4d 49 53 53 49 4f  PERF_TRANSMISSIO
21b0: 4e 5f 54 49 4d 45 20 53 43 41 52 44 5f 41 54 54  N_TIME SCARD_ATT
21c0: 52 5f 56 41 4c 55 45 28 53 43 41 52 44 5f 43 4c  R_VALUE(SCARD_CL
21d0: 41 53 53 5f 50 45 52 46 2c 20 30 78 30 30 30 33  ASS_PERF, 0x0003
21e0: 29 0d 0a 0d 0a 23 69 66 64 65 66 20 55 4e 49 43  )....#ifdef UNIC
21f0: 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  ODE..#define SCA
2200: 52 44 5f 41 54 54 52 5f 44 45 56 49 43 45 5f 46  RD_ATTR_DEVICE_F
2210: 52 49 45 4e 44 4c 59 5f 4e 41 4d 45 20 53 43 41  RIENDLY_NAME SCA
2220: 52 44 5f 41 54 54 52 5f 44 45 56 49 43 45 5f 46  RD_ATTR_DEVICE_F
2230: 52 49 45 4e 44 4c 59 5f 4e 41 4d 45 5f 57 0d 0a  RIENDLY_NAME_W..
2240: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54  #define SCARD_AT
2250: 54 52 5f 44 45 56 49 43 45 5f 53 59 53 54 45 4d  TR_DEVICE_SYSTEM
2260: 5f 4e 41 4d 45 20 53 43 41 52 44 5f 41 54 54 52  _NAME SCARD_ATTR
2270: 5f 44 45 56 49 43 45 5f 53 59 53 54 45 4d 5f 4e  _DEVICE_SYSTEM_N
2280: 41 4d 45 5f 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  AME_W..#else..#d
2290: 65 66 69 6e 65 20 53 43 41 52 44 5f 41 54 54 52  efine SCARD_ATTR
22a0: 5f 44 45 56 49 43 45 5f 46 52 49 45 4e 44 4c 59  _DEVICE_FRIENDLY
22b0: 5f 4e 41 4d 45 20 53 43 41 52 44 5f 41 54 54 52  _NAME SCARD_ATTR
22c0: 5f 44 45 56 49 43 45 5f 46 52 49 45 4e 44 4c 59  _DEVICE_FRIENDLY
22d0: 5f 4e 41 4d 45 5f 41 0d 0a 23 64 65 66 69 6e 65  _NAME_A..#define
22e0: 20 53 43 41 52 44 5f 41 54 54 52 5f 44 45 56 49   SCARD_ATTR_DEVI
22f0: 43 45 5f 53 59 53 54 45 4d 5f 4e 41 4d 45 20 53  CE_SYSTEM_NAME S
2300: 43 41 52 44 5f 41 54 54 52 5f 44 45 56 49 43 45  CARD_ATTR_DEVICE
2310: 5f 53 59 53 54 45 4d 5f 4e 41 4d 45 5f 41 0d 0a  _SYSTEM_NAME_A..
2320: 23 65 6e 64 69 66 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a  #endif......//..
2330: 2f 2f 20 54 3d 30 20 50 72 6f 74 6f 63 6f 6c 20  // T=0 Protocol 
2340: 44 65 66 69 6e 65 73 0d 0a 2f 2f 0d 0a 0d 0a 23  Defines..//....#
2350: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 54 30 5f  define SCARD_T0_
2360: 48 45 41 44 45 52 5f 4c 45 4e 47 54 48 20 37 0d  HEADER_LENGTH 7.
2370: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 54  .#define SCARD_T
2380: 30 5f 43 4d 44 5f 4c 45 4e 47 54 48 20 35 0d 0a  0_CMD_LENGTH 5..
2390: 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 54 3d 31 20 50  ....//..// T=1 P
23a0: 72 6f 74 6f 63 6f 6c 20 44 65 66 69 6e 65 73 0d  rotocol Defines.
23b0: 0a 2f 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53  .//....#define S
23c0: 43 41 52 44 5f 54 31 5f 50 52 4f 4c 4f 47 55 45  CARD_T1_PROLOGUE
23d0: 5f 4c 45 4e 47 54 48 20 33 0d 0a 23 64 65 66 69  _LENGTH 3..#defi
23e0: 6e 65 20 53 43 41 52 44 5f 54 31 5f 45 50 49 4c  ne SCARD_T1_EPIL
23f0: 4f 47 55 45 5f 4c 45 4e 47 54 48 20 32 0d 0a 23  OGUE_LENGTH 2..#
2400: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 54 31 5f  define SCARD_T1_
2410: 4d 41 58 5f 49 46 53 20 32 35 34 0d 0a 0d 0a 0d  MAX_IFS 254.....
2420: 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .//..///////////
2430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 20 52 65  ////..//..//  Re
2480: 61 64 65 72 20 73 74 61 74 65 73 0d 0a 2f 2f 0d  ader states..//.
2490: 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
24a0: 5f 55 4e 4b 4e 4f 57 4e 20 20 20 20 20 30 20 20  _UNKNOWN     0  
24b0: 20 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 69   // This value i
24c0: 6d 70 6c 69 65 73 20 74 68 65 20 64 72 69 76 65  mplies the drive
24d0: 72 20 69 73 20 75 6e 61 77 61 72 65 0d 0a 20 20  r is unaware..  
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6f              // o
2500: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
2510: 61 74 65 20 6f 66 20 74 68 65 20 72 65 61 64 65  ate of the reade
2520: 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  r...#define SCAR
2530: 44 5f 41 42 53 45 4e 54 20 20 20 20 20 20 31 20  D_ABSENT      1 
2540: 20 20 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20    // This value 
2550: 69 6d 70 6c 69 65 73 20 74 68 65 72 65 20 69 73  implies there is
2560: 20 6e 6f 20 63 61 72 64 20 69 6e 0d 0a 20 20 20   no card in..   
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68             // th
2590: 65 20 72 65 61 64 65 72 2e 0d 0a 23 64 65 66 69  e reader...#defi
25a0: 6e 65 20 53 43 41 52 44 5f 50 52 45 53 45 4e 54  ne SCARD_PRESENT
25b0: 20 20 20 20 20 32 20 20 20 2f 2f 20 54 68 69 73       2   // This
25c0: 20 76 61 6c 75 65 20 69 6d 70 6c 69 65 73 20 74   value implies t
25d0: 68 65 72 65 20 69 73 20 61 20 63 61 72 64 20 69  here is a card i
25e0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 2f 2f 20 70 72 65 73 65 6e 74 20 69 6e 20 74   // present in t
2610: 68 65 20 72 65 61 64 65 72 2c 20 62 75 74 20 74  he reader, but t
2620: 68 61 74 20 69 74 20 68 61 73 0d 0a 20 20 20 20  hat it has..    
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6e 6f 74            // not
2650: 20 62 65 65 6e 20 6d 6f 76 65 64 20 69 6e 74 6f   been moved into
2660: 20 70 6f 73 69 74 69 6f 6e 20 66 6f 72 20 75 73   position for us
2670: 65 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  e...#define SCAR
2680: 44 5f 53 57 41 4c 4c 4f 57 45 44 20 20 20 33 20  D_SWALLOWED   3 
2690: 20 20 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20    // This value 
26a0: 69 6d 70 6c 69 65 73 20 74 68 65 72 65 20 69 73  implies there is
26b0: 20 61 20 63 61 72 64 20 69 6e 20 74 68 65 0d 0a   a card in the..
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26e0: 20 72 65 61 64 65 72 20 69 6e 20 70 6f 73 69 74   reader in posit
26f0: 69 6f 6e 20 66 6f 72 20 75 73 65 2e 20 20 54 68  ion for use.  Th
2700: 65 20 63 61 72 64 20 69 73 0d 0a 20 20 20 20 20  e card is..     
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 20 20 20 20 20 20 20 2f 2f 20 6e 6f 74 20           // not 
2730: 70 6f 77 65 72 65 64 2e 0d 0a 23 64 65 66 69 6e  powered...#defin
2740: 65 20 53 43 41 52 44 5f 50 4f 57 45 52 45 44 20  e SCARD_POWERED 
2750: 20 20 20 20 34 20 20 20 2f 2f 20 54 68 69 73 20      4   // This 
2760: 76 61 6c 75 65 20 69 6d 70 6c 69 65 73 20 74 68  value implies th
2770: 65 72 65 20 69 73 20 70 6f 77 65 72 20 69 73 0d  ere is power is.
2780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27a0: 2f 20 62 65 69 6e 67 20 70 72 6f 76 69 64 65 64  / being provided
27b0: 20 74 6f 20 74 68 65 20 63 61 72 64 2c 20 62 75   to the card, bu
27c0: 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  t the..         
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e0: 20 20 20 20 20 2f 2f 20 52 65 61 64 65 72 20 44       // Reader D
27f0: 72 69 76 65 72 20 69 73 20 75 6e 61 77 61 72 65  river is unaware
2800: 20 6f 66 20 74 68 65 20 6d 6f 64 65 20 6f 66 0d   of the mode of.
2810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2830: 2f 20 74 68 65 20 63 61 72 64 2e 0d 0a 23 64 65  / the card...#de
2840: 66 69 6e 65 20 53 43 41 52 44 5f 4e 45 47 4f 54  fine SCARD_NEGOT
2850: 49 41 42 4c 45 20 20 35 20 20 20 2f 2f 20 54 68  IABLE  5   // Th
2860: 69 73 20 76 61 6c 75 65 20 69 6d 70 6c 69 65 73  is value implies
2870: 20 74 68 65 20 63 61 72 64 20 68 61 73 20 62 65   the card has be
2880: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 2f 2f 20 72 65 73 65 74 20 61 6e 64 20 69    // reset and i
28b0: 73 20 61 77 61 69 74 69 6e 67 20 50 54 53 20 6e  s awaiting PTS n
28c0: 65 67 6f 74 69 61 74 69 6f 6e 2e 0d 0a 23 64 65  egotiation...#de
28d0: 66 69 6e 65 20 53 43 41 52 44 5f 53 50 45 43 49  fine SCARD_SPECI
28e0: 46 49 43 20 20 20 20 36 20 20 20 2f 2f 20 54 68  FIC    6   // Th
28f0: 69 73 20 76 61 6c 75 65 20 69 6d 70 6c 69 65 73  is value implies
2900: 20 74 68 65 20 63 61 72 64 20 68 61 73 20 62 65   the card has be
2910: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2930: 20 20 2f 2f 20 72 65 73 65 74 20 61 6e 64 20 73    // reset and s
2940: 70 65 63 69 66 69 63 20 63 6f 6d 6d 75 6e 69 63  pecific communic
2950: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ation..         
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 20 20 20 20 2f 2f 20 70 72 6f 74 6f 63 6f 6c       // protocol
2980: 73 20 68 61 76 65 20 62 65 65 6e 20 65 73 74 61  s have been esta
2990: 62 6c 69 73 68 65 64 2e 0d 0a 0d 0a 2f 2f 2f 2f  blished.....////
29a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f  ////////////..//
29f0: 0d 0a 2f 2f 20 20 49 2f 4f 20 53 65 72 76 69 63  ..//  I/O Servic
2a00: 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20  es..//..//      
2a10: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  The following se
2a20: 72 76 69 63 65 73 20 70 72 6f 76 69 64 65 20 61  rvices provide a
2a30: 63 63 65 73 73 20 74 6f 20 74 68 65 20 49 2f 4f  ccess to the I/O
2a40: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   capabilities of
2a50: 20 74 68 65 0d 0a 2f 2f 20 20 20 20 20 20 72 65   the..//      re
2a60: 61 64 65 72 20 64 72 69 76 65 72 73 2e 20 20 53  ader drivers.  S
2a70: 65 72 76 69 63 65 73 20 6f 66 20 74 68 65 20 53  ervices of the S
2a80: 6d 61 72 74 20 43 61 72 64 20 61 72 65 20 72 65  mart Card are re
2a90: 71 75 65 73 74 65 64 20 62 79 20 70 6c 61 63 69  quested by placi
2aa0: 6e 67 20 74 68 65 0d 0a 2f 2f 20 20 20 20 20 20  ng the..//      
2ab0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
2ac0: 75 72 65 20 69 6e 74 6f 20 74 68 65 20 70 72 6f  ure into the pro
2ad0: 74 6f 63 6f 6c 20 62 75 66 66 65 72 3a 0d 0a 2f  tocol buffer:../
2ae0: 2f 0d 0a 0d 0a 0d 0a 74 79 70 65 64 65 66 20 73  /......typedef s
2af0: 74 72 75 63 74 20 5f 53 43 41 52 44 5f 49 4f 5f  truct _SCARD_IO_
2b00: 52 45 51 55 45 53 54 7b 0d 0a 20 20 20 20 44 57  REQUEST{..    DW
2b10: 4f 52 44 20 64 77 50 72 6f 74 6f 63 6f 6c 3b 20  ORD dwProtocol; 
2b20: 20 20 2f 2f 20 50 72 6f 74 6f 63 6f 6c 20 69 64    // Protocol id
2b30: 65 6e 74 69 66 69 65 72 0d 0a 20 20 20 20 44 57  entifier..    DW
2b40: 4f 52 44 20 63 62 50 63 69 4c 65 6e 67 74 68 3b  ORD cbPciLength;
2b50: 20 20 2f 2f 20 50 72 6f 74 6f 63 6f 6c 20 43 6f    // Protocol Co
2b60: 6e 74 72 6f 6c 20 49 6e 66 6f 72 6d 61 74 69 6f  ntrol Informatio
2b70: 6e 20 4c 65 6e 67 74 68 0d 0a 7d 20 53 43 41 52  n Length..} SCAR
2b80: 44 5f 49 4f 5f 52 45 51 55 45 53 54 2c 20 2a 50  D_IO_REQUEST, *P
2b90: 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54  SCARD_IO_REQUEST
2ba0: 2c 20 2a 4c 50 53 43 41 52 44 5f 49 4f 5f 52 45  , *LPSCARD_IO_RE
2bb0: 51 55 45 53 54 3b 0d 0a 74 79 70 65 64 65 66 20  QUEST;..typedef 
2bc0: 63 6f 6e 73 74 20 53 43 41 52 44 5f 49 4f 5f 52  const SCARD_IO_R
2bd0: 45 51 55 45 53 54 20 2a 4c 50 43 53 43 41 52 44  EQUEST *LPCSCARD
2be0: 5f 49 4f 5f 52 45 51 55 45 53 54 3b 0d 0a 0d 0a  _IO_REQUEST;....
2bf0: 0d 0a 2f 2f 0d 0a 2f 2f 20 54 3d 30 20 70 72 6f  ..//..// T=0 pro
2c00: 74 6f 63 6f 6c 20 73 65 72 76 69 63 65 73 2e 0d  tocol services..
2c10: 0a 2f 2f 0d 0a 0d 0a 74 79 70 65 64 65 66 20 73  .//....typedef s
2c20: 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 42 59 54  truct {..    BYT
2c30: 45 0d 0a 20 20 20 20 20 20 20 20 62 43 6c 61 2c  E..        bCla,
2c40: 20 20 20 2f 2f 20 54 68 65 20 69 6e 73 74 72 75     // The instru
2c50: 63 74 69 6f 6e 20 63 6c 61 73 73 0d 0a 20 20 20  ction class..   
2c60: 20 20 20 20 20 62 49 6e 73 2c 20 20 20 2f 2f 20       bIns,   // 
2c70: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
2c80: 63 6f 64 65 20 77 69 74 68 69 6e 20 74 68 65 20  code within the 
2c90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6c 61 73  instruction clas
2ca0: 73 0d 0a 20 20 20 20 20 20 20 20 62 50 31 2c 0d  s..        bP1,.
2cb0: 0a 20 20 20 20 20 20 20 20 62 50 32 2c 20 20 20  .        bP2,   
2cc0: 20 2f 2f 20 50 61 72 61 6d 65 74 65 72 73 20 74   // Parameters t
2cd0: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
2ce0: 6e 0d 0a 20 20 20 20 20 20 20 20 62 50 33 3b 20  n..        bP3; 
2cf0: 20 20 20 2f 2f 20 53 69 7a 65 20 6f 66 20 49 2f     // Size of I/
2d00: 4f 20 54 72 61 6e 73 66 65 72 0d 0a 7d 20 53 43  O Transfer..} SC
2d10: 41 52 44 5f 54 30 5f 43 4f 4d 4d 41 4e 44 2c 20  ARD_T0_COMMAND, 
2d20: 2a 4c 50 53 43 41 52 44 5f 54 30 5f 43 4f 4d 4d  *LPSCARD_T0_COMM
2d30: 41 4e 44 3b 0d 0a 0d 0a 74 79 70 65 64 65 66 20  AND;....typedef 
2d40: 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 53 43  struct {..    SC
2d50: 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 20 69  ARD_IO_REQUEST i
2d60: 6f 52 65 71 75 65 73 74 3b 0d 0a 20 20 20 20 42  oRequest;..    B
2d70: 59 54 45 0d 0a 20 20 20 20 20 20 20 20 62 53 77  YTE..        bSw
2d80: 31 2c 0d 0a 20 20 20 20 20 20 20 20 62 53 77 32  1,..        bSw2
2d90: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52  ;           // R
2da0: 65 74 75 72 6e 20 63 6f 64 65 73 20 66 72 6f 6d  eturn codes from
2db0: 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   the instruction
2dc0: 0d 0a 20 20 20 20 75 6e 69 6f 6e 0d 0a 20 20 20  ..    union..   
2dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52   {..        SCAR
2de0: 44 5f 54 30 5f 43 4f 4d 4d 41 4e 44 20 43 6d 64  D_T0_COMMAND Cmd
2df0: 42 79 74 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  Bytes;..        
2e00: 42 59 54 45 20 72 67 62 48 65 61 64 65 72 5b 35  BYTE rgbHeader[5
2e10: 5d 3b 0d 0a 20 20 20 20 7d 20 44 55 4d 4d 59 55  ];..    } DUMMYU
2e20: 4e 49 4f 4e 4e 41 4d 45 3b 0d 0a 7d 20 53 43 41  NIONNAME;..} SCA
2e30: 52 44 5f 54 30 5f 52 45 51 55 45 53 54 3b 0d 0a  RD_T0_REQUEST;..
2e40: 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 44 5f  ..typedef SCARD_
2e50: 54 30 5f 52 45 51 55 45 53 54 20 2a 50 53 43 41  T0_REQUEST *PSCA
2e60: 52 44 5f 54 30 5f 52 45 51 55 45 53 54 2c 20 2a  RD_T0_REQUEST, *
2e70: 4c 50 53 43 41 52 44 5f 54 30 5f 52 45 51 55 45  LPSCARD_T0_REQUE
2e80: 53 54 3b 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20  ST;......//..// 
2e90: 20 54 3d 31 20 50 72 6f 74 6f 63 6f 6c 20 53 65   T=1 Protocol Se
2ea0: 72 76 69 63 65 73 0d 0a 2f 2f 0d 0a 0d 0a 74 79  rvices..//....ty
2eb0: 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a  pedef struct {..
2ec0: 20 20 20 20 53 43 41 52 44 5f 49 4f 5f 52 45 51      SCARD_IO_REQ
2ed0: 55 45 53 54 20 69 6f 52 65 71 75 65 73 74 3b 0d  UEST ioRequest;.
2ee0: 0a 7d 20 53 43 41 52 44 5f 54 31 5f 52 45 51 55  .} SCARD_T1_REQU
2ef0: 45 53 54 3b 0d 0a 74 79 70 65 64 65 66 20 53 43  EST;..typedef SC
2f00: 41 52 44 5f 54 31 5f 52 45 51 55 45 53 54 20 2a  ARD_T1_REQUEST *
2f10: 50 53 43 41 52 44 5f 54 31 5f 52 45 51 55 45 53  PSCARD_T1_REQUES
2f20: 54 2c 20 2a 4c 50 53 43 41 52 44 5f 54 31 5f 52  T, *LPSCARD_T1_R
2f30: 45 51 55 45 53 54 3b 0d 0a 0d 0a 0d 0a 2f 2f 0d  EQUEST;......//.
2f40: 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .///////////////
2f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f90: 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 20 44 72 69 76 65  /..//..//  Drive
2fa0: 72 20 61 74 74 72 69 62 75 74 65 20 66 6c 61 67  r attribute flag
2fb0: 73 0d 0a 2f 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65  s..//....#define
2fc0: 20 53 43 41 52 44 5f 52 45 41 44 45 52 5f 53 57   SCARD_READER_SW
2fd0: 41 4c 4c 4f 57 53 20 20 20 20 20 20 20 30 78 30  ALLOWS       0x0
2fe0: 30 30 30 30 30 30 31 20 20 2f 2f 20 52 65 61 64  0000001  // Read
2ff0: 65 72 20 68 61 73 20 61 20 63 61 72 64 20 73 77  er has a card sw
3000: 61 6c 6c 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20  allowing..      
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6d 65 63            // mec
3040: 68 61 6e 69 73 6d 2e 0d 0a 23 64 65 66 69 6e 65  hanism...#define
3050: 20 53 43 41 52 44 5f 52 45 41 44 45 52 5f 45 4a   SCARD_READER_EJ
3060: 45 43 54 53 20 20 20 20 20 20 20 20 20 30 78 30  ECTS         0x0
3070: 30 30 30 30 30 30 32 20 20 2f 2f 20 52 65 61 64  0000002  // Read
3080: 65 72 20 68 61 73 20 61 20 63 61 72 64 20 65 6a  er has a card ej
3090: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..        
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 20 20 20 20 20 20 20 20 2f 2f 20 6d 65 63 68 61          // mecha
30d0: 6e 69 73 6d 2e 0d 0a 23 64 65 66 69 6e 65 20 53  nism...#define S
30e0: 43 41 52 44 5f 52 45 41 44 45 52 5f 43 4f 4e 46  CARD_READER_CONF
30f0: 49 53 43 41 54 45 53 20 20 20 20 30 78 30 30 30  ISCATES    0x000
3100: 30 30 30 30 34 20 20 2f 2f 20 52 65 61 64 65 72  00004  // Reader
3110: 20 68 61 73 20 61 20 63 61 72 64 20 63 61 70 74   has a card capt
3120: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ure..           
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3150: 20 20 20 20 20 2f 2f 20 6d 65 63 68 61 6e 69 73       // mechanis
3160: 6d 2e 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f  m.....//..//////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f  /////////..//../
31c0: 2f 20 54 79 70 65 20 6f 66 20 72 65 61 64 65 72  / Type of reader
31d0: 0d 0a 2f 2f 0d 0a 23 64 65 66 69 6e 65 20 53 43  ..//..#define SC
31e0: 41 52 44 5f 52 45 41 44 45 52 5f 54 59 50 45 5f  ARD_READER_TYPE_
31f0: 53 45 52 49 41 4c 20 20 20 20 30 78 30 31 0d 0a  SERIAL    0x01..
3200: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 52 45  #define SCARD_RE
3210: 41 44 45 52 5f 54 59 50 45 5f 50 41 52 41 4c 45  ADER_TYPE_PARALE
3220: 4c 4c 20 20 30 78 30 32 0d 0a 23 64 65 66 69 6e  LL  0x02..#defin
3230: 65 20 53 43 41 52 44 5f 52 45 41 44 45 52 5f 54  e SCARD_READER_T
3240: 59 50 45 5f 4b 45 59 42 4f 41 52 44 20 20 30 78  YPE_KEYBOARD  0x
3250: 30 34 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  04..#define SCAR
3260: 44 5f 52 45 41 44 45 52 5f 54 59 50 45 5f 53 43  D_READER_TYPE_SC
3270: 53 49 20 20 20 20 20 20 30 78 30 38 0d 0a 23 64  SI      0x08..#d
3280: 65 66 69 6e 65 20 53 43 41 52 44 5f 52 45 41 44  efine SCARD_READ
3290: 45 52 5f 54 59 50 45 5f 49 44 45 20 20 20 20 20  ER_TYPE_IDE     
32a0: 20 20 30 78 31 30 0d 0a 23 64 65 66 69 6e 65 20    0x10..#define 
32b0: 53 43 41 52 44 5f 52 45 41 44 45 52 5f 54 59 50  SCARD_READER_TYP
32c0: 45 5f 55 53 42 20 20 20 20 20 20 20 30 78 32 30  E_USB       0x20
32d0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
32e0: 52 45 41 44 45 52 5f 54 59 50 45 5f 50 43 4d 43  READER_TYPE_PCMC
32f0: 49 41 20 20 20 20 30 78 34 30 0d 0a 23 64 65 66  IA    0x40..#def
3300: 69 6e 65 20 53 43 41 52 44 5f 52 45 41 44 45 52  ine SCARD_READER
3310: 5f 54 59 50 45 5f 56 45 4e 44 4f 52 20 20 20 20  _TYPE_VENDOR    
3320: 30 78 46 30 0d 0a 0d 0a 23 69 66 64 65 66 20 5f  0xF0....#ifdef _
3330: 5f 63 70 6c 75 73 70 6c 75 73 0d 0a 7d 0d 0a 23  _cplusplus..}..#
3340: 65 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 0d  endif..#endif...
3350: 0a 0d 0a                                         ...