Hex Artifact Content

Artifact 62b1252f083b04d0a606a0a64ab5addd3150e1b3:


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 57 69 6e 53 43 61 72  :....    WinSCar
0050: 64 0d 0a 0d 0a 41 62 73 74 72 61 63 74 3a 0d 0a  d....Abstract:..
0060: 0d 0a 20 20 20 20 54 68 69 73 20 68 65 61 64 65  ..    This heade
0070: 72 20 66 69 6c 65 20 70 72 6f 76 69 64 65 73 20  r file provides 
0080: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  the definitions 
0090: 61 6e 64 20 73 79 6d 62 6f 6c 73 20 6e 65 63 65  and symbols nece
00a0: 73 73 61 72 79 20 66 6f 72 20 61 6e 0d 0a 20 20  ssary for an..  
00b0: 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 6f 72    Application or
00c0: 20 53 6d 61 72 74 20 43 61 72 64 20 53 65 72 76   Smart Card Serv
00d0: 69 63 65 20 50 72 6f 76 69 64 65 72 20 74 6f 20  ice Provider to 
00e0: 61 63 63 65 73 73 20 74 68 65 20 53 6d 61 72 74  access the Smart
00f0: 63 61 72 64 0d 0a 20 20 20 20 53 75 62 73 79 73  card..    Subsys
0100: 74 65 6d 2e 0d 0a 0d 0a 45 6e 76 69 72 6f 6e 6d  tem.....Environm
0110: 65 6e 74 3a 0d 0a 0d 0a 20 20 20 20 57 69 6e 33  ent:....    Win3
0120: 32 0d 0a 0d 0a 4e 6f 74 65 73 3a 0d 0a 0d 0a 2d  2....Notes:....-
0130: 2d 2a 2f 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 5f  -*/....#ifndef _
0140: 57 49 4e 53 43 41 52 44 5f 48 5f 0d 0a 23 64 65  WINSCARD_H_..#de
0150: 66 69 6e 65 20 5f 57 49 4e 53 43 41 52 44 5f 48  fine _WINSCARD_H
0160: 5f 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  _....#if defined
0170: 20 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 28   (_MSC_VER) && (
0180: 5f 4d 53 43 5f 56 45 52 20 3e 3d 20 31 30 32 30  _MSC_VER >= 1020
0190: 29 0d 0a 23 70 72 61 67 6d 61 20 6f 6e 63 65 0d  )..#pragma once.
01a0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 6e 63 6c  .#endif....#incl
01b0: 75 64 65 20 3c 77 74 79 70 65 73 2e 68 3e 0d 0a  ude <wtypes.h>..
01c0: 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e 69 6f 63  #include <winioc
01d0: 74 6c 2e 68 3e 0d 0a 23 69 6e 63 6c 75 64 65 20  tl.h>..#include 
01e0: 22 77 69 6e 73 6d 63 72 64 2e 68 22 0d 0a 23 69  "winsmcrd.h"..#i
01f0: 66 6e 64 65 66 20 53 43 41 52 44 5f 53 5f 53 55  fndef SCARD_S_SU
0200: 43 43 45 53 53 0d 0a 23 69 6e 63 6c 75 64 65 20  CCESS..#include 
0210: 22 53 43 61 72 64 45 72 72 2e 68 22 0d 0a 23 65  "SCardErr.h"..#e
0220: 6e 64 69 66 0d 0a 0d 0a 23 69 66 64 65 66 20 5f  ndif....#ifdef _
0230: 5f 63 70 6c 75 73 70 6c 75 73 0d 0a 65 78 74 65  _cplusplus..exte
0240: 72 6e 20 22 43 22 20 7b 0d 0a 23 65 6e 64 69 66  rn "C" {..#endif
0250: 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 5f 4c 50 43  ....#ifndef _LPC
0260: 42 59 54 45 5f 44 45 46 49 4e 45 44 0d 0a 23 64  BYTE_DEFINED..#d
0270: 65 66 69 6e 65 20 5f 4c 50 43 42 59 54 45 5f 44  efine _LPCBYTE_D
0280: 45 46 49 4e 45 44 0d 0a 74 79 70 65 64 65 66 20  EFINED..typedef 
0290: 63 6f 6e 73 74 20 42 59 54 45 20 2a 4c 50 43 42  const BYTE *LPCB
02a0: 59 54 45 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  YTE;..#endif..#i
02b0: 66 6e 64 65 66 20 5f 4c 50 43 56 4f 49 44 5f 44  fndef _LPCVOID_D
02c0: 45 46 49 4e 45 44 0d 0a 23 64 65 66 69 6e 65 20  EFINED..#define 
02d0: 5f 4c 50 43 56 4f 49 44 5f 44 45 46 49 4e 45 44  _LPCVOID_DEFINED
02e0: 0d 0a 74 79 70 65 64 65 66 20 63 6f 6e 73 74 20  ..typedef const 
02f0: 56 4f 49 44 20 2a 4c 50 43 56 4f 49 44 3b 0d 0a  VOID *LPCVOID;..
0300: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65  #endif....#ifnde
0310: 66 20 57 49 4e 53 43 41 52 44 41 50 49 0d 0a 23  f WINSCARDAPI..#
0320: 64 65 66 69 6e 65 20 57 49 4e 53 43 41 52 44 41  define WINSCARDA
0330: 50 49 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 6e  PI..#endif..#ifn
0340: 64 65 66 20 57 49 4e 53 43 41 52 44 44 41 54 41  def WINSCARDDATA
0350: 0d 0a 23 64 65 66 69 6e 65 20 57 49 4e 53 43 41  ..#define WINSCA
0360: 52 44 44 41 54 41 20 5f 5f 64 65 63 6c 73 70 65  RDDATA __declspe
0370: 63 28 64 6c 6c 69 6d 70 6f 72 74 29 0d 0a 23 65  c(dllimport)..#e
0380: 6e 64 69 66 0d 0a 0d 0a 2f 2a 20 49 6e 20 63 6c  ndif..../* In cl
0390: 72 3a 70 75 72 65 20 77 65 20 63 61 6e 6e 6f 74  r:pure we cannot
03a0: 20 6d 61 72 6b 20 64 61 74 61 20 65 78 70 6f 72   mark data expor
03b0: 74 20 77 69 74 68 20 64 6c 6c 69 6d 70 6f 72 74  t with dllimport
03c0: 2e 0d 0a 20 2a 20 57 65 20 73 68 6f 75 6c 64 20  ... * We should 
03d0: 61 64 64 20 73 6d 61 6c 6c 20 66 75 6e 63 74 69  add small functi
03e0: 6f 6e 73 20 77 68 69 63 68 20 72 65 74 75 72 6e  ons which return
03f0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0d 0a  s the value of..
0400: 20 2a 20 74 68 65 20 67 6c 6f 62 61 6c 2e 0d 0a   * the global...
0410: 20 2a 2f 0d 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
0420: 64 28 5f 4d 5f 43 45 45 5f 50 55 52 45 29 0d 0a  d(_M_CEE_PURE)..
0430: 57 49 4e 53 43 41 52 44 44 41 54 41 20 65 78 74  WINSCARDDATA ext
0440: 65 72 6e 20 63 6f 6e 73 74 20 53 43 41 52 44 5f  ern const SCARD_
0450: 49 4f 5f 52 45 51 55 45 53 54 0d 0a 20 20 20 20  IO_REQUEST..    
0460: 67 5f 72 67 53 43 61 72 64 54 30 50 63 69 2c 0d  g_rgSCardT0Pci,.
0470: 0a 20 20 20 20 67 5f 72 67 53 43 61 72 64 54 31  .    g_rgSCardT1
0480: 50 63 69 2c 0d 0a 20 20 20 20 67 5f 72 67 53 43  Pci,..    g_rgSC
0490: 61 72 64 52 61 77 50 63 69 3b 0d 0a 23 64 65 66  ardRawPci;..#def
04a0: 69 6e 65 20 53 43 41 52 44 5f 50 43 49 5f 54 30  ine SCARD_PCI_T0
04b0: 20 20 28 26 67 5f 72 67 53 43 61 72 64 54 30 50    (&g_rgSCardT0P
04c0: 63 69 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  ci)..#define SCA
04d0: 52 44 5f 50 43 49 5f 54 31 20 20 28 26 67 5f 72  RD_PCI_T1  (&g_r
04e0: 67 53 43 61 72 64 54 31 50 63 69 29 0d 0a 23 64  gSCardT1Pci)..#d
04f0: 65 66 69 6e 65 20 53 43 41 52 44 5f 50 43 49 5f  efine SCARD_PCI_
0500: 52 41 57 20 28 26 67 5f 72 67 53 43 61 72 64 52  RAW (&g_rgSCardR
0510: 61 77 50 63 69 29 0d 0a 23 65 6e 64 69 66 0d 0a  awPci)..#endif..
0520: 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..//..//////////
0530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0570: 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 20  //////..//..//  
0580: 53 65 72 76 69 63 65 20 4d 61 6e 61 67 65 72 20  Service Manager 
0590: 41 63 63 65 73 73 20 53 65 72 76 69 63 65 73 0d  Access Services.
05a0: 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65  .//..//      The
05b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69   following servi
05c0: 63 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ces are used to 
05d0: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 6e 64 20  manage user and 
05e0: 74 65 72 6d 69 6e 61 6c 20 63 6f 6e 74 65 78 74  terminal context
05f0: 73 20 66 6f 72 0d 0a 2f 2f 20 20 20 20 20 20 53  s for..//      S
0600: 6d 61 72 74 20 43 61 72 64 73 2e 0d 0a 2f 2f 0d  mart Cards...//.
0610: 0a 0d 0a 74 79 70 65 64 65 66 20 55 4c 4f 4e 47  ...typedef ULONG
0620: 5f 50 54 52 20 53 43 41 52 44 43 4f 4e 54 45 58  _PTR SCARDCONTEX
0630: 54 3b 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52  T;..typedef SCAR
0640: 44 43 4f 4e 54 45 58 54 20 2a 50 53 43 41 52 44  DCONTEXT *PSCARD
0650: 43 4f 4e 54 45 58 54 2c 20 2a 4c 50 53 43 41 52  CONTEXT, *LPSCAR
0660: 44 43 4f 4e 54 45 58 54 3b 0d 0a 0d 0a 74 79 70  DCONTEXT;....typ
0670: 65 64 65 66 20 55 4c 4f 4e 47 5f 50 54 52 20 53  edef ULONG_PTR S
0680: 43 41 52 44 48 41 4e 44 4c 45 3b 0d 0a 74 79 70  CARDHANDLE;..typ
0690: 65 64 65 66 20 53 43 41 52 44 48 41 4e 44 4c 45  edef SCARDHANDLE
06a0: 20 2a 50 53 43 41 52 44 48 41 4e 44 4c 45 2c 20   *PSCARDHANDLE, 
06b0: 2a 4c 50 53 43 41 52 44 48 41 4e 44 4c 45 3b 0d  *LPSCARDHANDLE;.
06c0: 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
06d0: 5f 41 55 54 4f 41 4c 4c 4f 43 41 54 45 20 28 44  _AUTOALLOCATE (D
06e0: 57 4f 52 44 29 28 2d 31 29 0d 0a 0d 0a 23 64 65  WORD)(-1)....#de
06f0: 66 69 6e 65 20 53 43 41 52 44 5f 53 43 4f 50 45  fine SCARD_SCOPE
0700: 5f 55 53 45 52 20 20 20 20 20 30 20 20 2f 2f 20  _USER     0  // 
0710: 54 68 65 20 63 6f 6e 74 65 78 74 20 69 73 20 61  The context is a
0720: 20 75 73 65 72 20 63 6f 6e 74 65 78 74 2c 20 61   user context, a
0730: 6e 64 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20  nd any..        
0740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0750: 20 20 20 20 20 20 20 20 2f 2f 20 64 61 74 61 62          // datab
0760: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  ase operations a
0770: 72 65 20 70 65 72 66 6f 72 6d 65 64 20 77 69 74  re performed wit
0780: 68 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hin the..       
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 6d 61           // doma
07b0: 69 6e 20 6f 66 20 74 68 65 20 75 73 65 72 2e 0d  in of the user..
07c0: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53  .#define SCARD_S
07d0: 43 4f 50 45 5f 54 45 52 4d 49 4e 41 4c 20 31 20  COPE_TERMINAL 1 
07e0: 20 2f 2f 20 54 68 65 20 63 6f 6e 74 65 78 74 20   // The context 
07f0: 69 73 20 74 68 61 74 20 6f 66 20 74 68 65 20 63  is that of the c
0800: 75 72 72 65 6e 74 20 74 65 72 6d 69 6e 61 6c 2c  urrent terminal,
0810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 20 2f 2f 20 61 6e 64 20 61 6e 79 20 64 61 74    // and any dat
0840: 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73  abase operations
0850: 20 61 72 65 20 70 65 72 66 6f 72 6d 65 64 0d 0a   are performed..
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0880: 2f 2f 20 77 69 74 68 69 6e 20 74 68 65 20 64 6f  // within the do
0890: 6d 61 69 6e 20 6f 66 20 74 68 61 74 20 74 65 72  main of that ter
08a0: 6d 69 6e 61 6c 2e 20 20 28 54 68 65 0d 0a 20 20  minal.  (The..  
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
08d0: 20 63 61 6c 6c 69 6e 67 20 61 70 70 6c 69 63 61   calling applica
08e0: 74 69 6f 6e 20 6d 75 73 74 20 68 61 76 65 20 61  tion must have a
08f0: 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20  ppropriate..    
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61              // a
0920: 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e  ccess permission
0930: 73 20 66 6f 72 20 61 6e 79 20 64 61 74 61 62 61  s for any databa
0940: 73 65 20 61 63 74 69 6f 6e 73 2e 29 0d 0a 23 64  se actions.)..#d
0950: 65 66 69 6e 65 20 53 43 41 52 44 5f 53 43 4f 50  efine SCARD_SCOP
0960: 45 5f 53 59 53 54 45 4d 20 20 20 20 32 20 2f 2f  E_SYSTEM    2 //
0970: 20 54 68 65 20 63 6f 6e 74 65 78 74 20 69 73 20   The context is 
0980: 74 68 65 20 73 79 73 74 65 6d 20 63 6f 6e 74 65  the system conte
0990: 78 74 2c 20 61 6e 64 20 61 6e 79 0d 0a 20 20 20  xt, and any..   
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
09c0: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
09d0: 6f 6e 73 20 61 72 65 20 70 65 72 66 6f 72 6d 65  ons are performe
09e0: 64 20 77 69 74 68 69 6e 20 74 68 65 0d 0a 20 20  d within the..  
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0a10: 20 64 6f 6d 61 69 6e 20 6f 66 20 74 68 65 20 73   domain of the s
0a20: 79 73 74 65 6d 2e 20 20 28 54 68 65 20 63 61 6c  ystem.  (The cal
0a30: 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ling..          
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a50: 20 20 20 20 20 20 2f 2f 20 61 70 70 6c 69 63 61        // applica
0a60: 74 69 6f 6e 20 6d 75 73 74 20 68 61 76 65 20 61  tion must have a
0a70: 70 70 72 6f 70 72 69 61 74 65 20 61 63 63 65 73  ppropriate acces
0a80: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0aa0: 20 20 20 2f 2f 20 70 65 72 6d 69 73 73 69 6f 6e     // permission
0ab0: 73 20 66 6f 72 20 61 6e 79 20 64 61 74 61 62 61  s for any databa
0ac0: 73 65 20 61 63 74 69 6f 6e 73 2e 29 0d 0a 0d 0a  se actions.)....
0ad0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
0ae0: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
0af0: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f  SCardEstablishCo
0b00: 6e 74 65 78 74 28 0d 0a 20 20 20 20 5f 5f 69 6e  ntext(..    __in
0b10: 20 20 44 57 4f 52 44 20 64 77 53 63 6f 70 65 2c    DWORD dwScope,
0b20: 0d 0a 20 20 20 20 5f 5f 72 65 73 65 72 76 65 64  ..    __reserved
0b30: 20 20 4c 50 43 56 4f 49 44 20 70 76 52 65 73 65    LPCVOID pvRese
0b40: 72 76 65 64 31 2c 0d 0a 20 20 20 20 5f 5f 72 65  rved1,..    __re
0b50: 73 65 72 76 65 64 20 20 4c 50 43 56 4f 49 44 20  served  LPCVOID 
0b60: 70 76 52 65 73 65 72 76 65 64 32 2c 0d 0a 20 20  pvReserved2,..  
0b70: 20 20 5f 5f 6f 75 74 20 4c 50 53 43 41 52 44 43    __out LPSCARDC
0b80: 4f 4e 54 45 58 54 20 70 68 43 6f 6e 74 65 78 74  ONTEXT phContext
0b90: 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e  );....extern WIN
0ba0: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
0bb0: 4e 41 50 49 0d 0a 53 43 61 72 64 52 65 6c 65 61  NAPI..SCardRelea
0bc0: 73 65 43 6f 6e 74 65 78 74 28 0d 0a 20 20 20 20  seContext(..    
0bd0: 5f 5f 69 6e 20 20 20 20 20 20 53 43 41 52 44 43  __in      SCARDC
0be0: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 29  ONTEXT hContext)
0bf0: 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  ;....extern WINS
0c00: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
0c10: 41 50 49 0d 0a 53 43 61 72 64 49 73 56 61 6c 69  API..SCardIsVali
0c20: 64 43 6f 6e 74 65 78 74 28 0d 0a 20 20 20 20 5f  dContext(..    _
0c30: 5f 69 6e 20 20 20 20 20 20 53 43 41 52 44 43 4f  _in      SCARDCO
0c40: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 29 3b  NTEXT hContext);
0c50: 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f  ......//..//////
0c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a  //////////..//..
0cb0: 2f 2f 20 20 53 6d 61 72 74 20 43 61 72 64 20 44  //  Smart Card D
0cc0: 61 74 61 62 61 73 65 20 4d 61 6e 61 67 65 6d 65  atabase Manageme
0cd0: 6e 74 20 53 65 72 76 69 63 65 73 0d 0a 2f 2f 0d  nt Services..//.
0ce0: 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 66 6f 6c  .//      The fol
0cf0: 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 65 73 20  lowing services 
0d00: 70 72 6f 76 69 64 65 20 66 6f 72 20 6d 61 6e 61  provide for mana
0d10: 67 69 6e 67 20 74 68 65 20 53 6d 61 72 74 20 43  ging the Smart C
0d20: 61 72 64 20 44 61 74 61 62 61 73 65 2e 0d 0a 2f  ard Database.../
0d30: 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  /....#define SCA
0d40: 52 44 5f 41 4c 4c 5f 52 45 41 44 45 52 53 20 20  RD_ALL_READERS  
0d50: 20 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64       TEXT("SCard
0d60: 24 41 6c 6c 52 65 61 64 65 72 73 5c 30 30 30 22  $AllReaders\000"
0d70: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
0d80: 5f 44 45 46 41 55 4c 54 5f 52 45 41 44 45 52 53  _DEFAULT_READERS
0d90: 20 20 20 54 45 58 54 28 22 53 43 61 72 64 24 44     TEXT("SCard$D
0da0: 65 66 61 75 6c 74 52 65 61 64 65 72 73 5c 30 30  efaultReaders\00
0db0: 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  0")..#define SCA
0dc0: 52 44 5f 4c 4f 43 41 4c 5f 52 45 41 44 45 52 53  RD_LOCAL_READERS
0dd0: 20 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64       TEXT("SCard
0de0: 24 4c 6f 63 61 6c 52 65 61 64 65 72 73 5c 30 30  $LocalReaders\00
0df0: 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  0")..#define SCA
0e00: 52 44 5f 53 59 53 54 45 4d 5f 52 45 41 44 45 52  RD_SYSTEM_READER
0e10: 53 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64  S    TEXT("SCard
0e20: 24 53 79 73 74 65 6d 52 65 61 64 65 72 73 5c 30  $SystemReaders\0
0e30: 30 30 22 29 0d 0a 0d 0a 23 64 65 66 69 6e 65 20  00")....#define 
0e40: 53 43 41 52 44 5f 50 52 4f 56 49 44 45 52 5f 50  SCARD_PROVIDER_P
0e50: 52 49 4d 41 52 59 20 20 31 20 20 20 2f 2f 20 50  RIMARY  1   // P
0e60: 72 69 6d 61 72 79 20 50 72 6f 76 69 64 65 72 20  rimary Provider 
0e70: 49 64 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  Id..#define SCAR
0e80: 44 5f 50 52 4f 56 49 44 45 52 5f 43 53 50 20 20  D_PROVIDER_CSP  
0e90: 20 20 20 20 32 20 20 20 2f 2f 20 43 72 79 70 74      2   // Crypt
0ea0: 6f 20 53 65 72 76 69 63 65 20 50 72 6f 76 69 64  o Service Provid
0eb0: 65 72 20 49 64 0d 0a 23 64 65 66 69 6e 65 20 53  er Id..#define S
0ec0: 43 41 52 44 5f 50 52 4f 56 49 44 45 52 5f 4b 53  CARD_PROVIDER_KS
0ed0: 50 20 20 20 20 20 20 33 20 20 20 2f 2f 20 4b 65  P      3   // Ke
0ee0: 79 20 53 74 6f 72 61 67 65 20 50 72 6f 76 69 64  y Storage Provid
0ef0: 65 72 20 49 64 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f  er Id......//../
0f00: 2f 20 44 61 74 61 62 61 73 65 20 52 65 61 64 65  / Database Reade
0f10: 72 20 72 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a  r routines..//..
0f20: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
0f30: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
0f40: 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  ..SCardListReade
0f50: 72 47 72 6f 75 70 73 41 28 0d 0a 20 20 20 20 5f  rGroupsA(..    _
0f60: 5f 69 6e 20 20 20 20 53 43 41 52 44 43 4f 4e 54  _in    SCARDCONT
0f70: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20  EXT hContext,.. 
0f80: 20 20 20 5f 5f 6e 75 6c 6c 6e 75 6c 6c 74 65 72     __nullnullter
0f90: 6d 69 6e 61 74 65 64 20 5f 5f 6f 75 74 5f 65 63  minated __out_ec
0fa0: 6f 75 6e 74 5f 6f 70 74 28 2a 70 63 63 68 47 72  ount_opt(*pcchGr
0fb0: 6f 75 70 73 29 20 20 20 4c 50 53 54 52 20 6d 73  oups)   LPSTR ms
0fc0: 7a 47 72 6f 75 70 73 2c 0d 0a 20 20 20 20 5f 5f  zGroups,..    __
0fd0: 69 6e 6f 75 74 20 4c 50 44 57 4f 52 44 20 70 63  inout LPDWORD pc
0fe0: 63 68 47 72 6f 75 70 73 29 3b 0d 0a 65 78 74 65  chGroups);..exte
0ff0: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
1000: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
1010: 64 4c 69 73 74 52 65 61 64 65 72 47 72 6f 75 70  dListReaderGroup
1020: 73 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  sW(..    __in   
1030: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
1040: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 6e  ontext,..    __n
1050: 75 6c 6c 6e 75 6c 6c 74 65 72 6d 69 6e 61 74 65  ullnullterminate
1060: 64 20 5f 5f 6f 75 74 5f 65 63 6f 75 6e 74 5f 6f  d __out_ecount_o
1070: 70 74 28 2a 70 63 63 68 47 72 6f 75 70 73 29 20  pt(*pcchGroups) 
1080: 20 20 4c 50 57 53 54 52 20 6d 73 7a 47 72 6f 75    LPWSTR mszGrou
1090: 70 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75 74  ps,..    __inout
10a0: 20 4c 50 44 57 4f 52 44 20 70 63 63 68 47 72 6f   LPDWORD pcchGro
10b0: 75 70 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  ups);..#ifdef UN
10c0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
10d0: 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 47 72  CardListReaderGr
10e0: 6f 75 70 73 20 20 53 43 61 72 64 4c 69 73 74 52  oups  SCardListR
10f0: 65 61 64 65 72 47 72 6f 75 70 73 57 0d 0a 23 65  eaderGroupsW..#e
1100: 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  lse..#define SCa
1110: 72 64 4c 69 73 74 52 65 61 64 65 72 47 72 6f 75  rdListReaderGrou
1120: 70 73 20 20 53 43 61 72 64 4c 69 73 74 52 65 61  ps  SCardListRea
1130: 64 65 72 47 72 6f 75 70 73 41 0d 0a 23 65 6e 64  derGroupsA..#end
1140: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
1150: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
1160: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
1170: 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  ..SCardListReade
1180: 72 73 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20  rsA(..    __in  
1190: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
11a0: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f  hContext,..    _
11b0: 5f 69 6e 5f 6f 70 74 20 4c 50 43 53 54 52 20 6d  _in_opt LPCSTR m
11c0: 73 7a 47 72 6f 75 70 73 2c 0d 0a 20 20 20 20 5f  szGroups,..    _
11d0: 5f 6e 75 6c 6c 6e 75 6c 6c 74 65 72 6d 69 6e 61  _nullnulltermina
11e0: 74 65 64 20 5f 5f 6f 75 74 5f 65 63 6f 75 6e 74  ted __out_ecount
11f0: 5f 6f 70 74 28 2a 70 63 63 68 52 65 61 64 65 72  _opt(*pcchReader
1200: 73 29 20 4c 50 53 54 52 20 6d 73 7a 52 65 61 64  s) LPSTR mszRead
1210: 65 72 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75  ers,..    __inou
1220: 74 20 20 4c 50 44 57 4f 52 44 20 70 63 63 68 52  t  LPDWORD pcchR
1230: 65 61 64 65 72 73 29 3b 0d 0a 65 78 74 65 72 6e  eaders);..extern
1240: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
1250: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c  G WINAPI..SCardL
1260: 69 73 74 52 65 61 64 65 72 73 57 28 0d 0a 20 20  istReadersW(..  
1270: 20 20 5f 5f 69 6e 20 20 20 20 20 53 43 41 52 44    __in     SCARD
1280: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
1290: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f 6f 70 74 20  ,..    __in_opt 
12a0: 4c 50 43 57 53 54 52 20 6d 73 7a 47 72 6f 75 70  LPCWSTR mszGroup
12b0: 73 2c 0d 0a 20 20 20 20 5f 5f 6e 75 6c 6c 6e 75  s,..    __nullnu
12c0: 6c 6c 74 65 72 6d 69 6e 61 74 65 64 20 5f 5f 6f  llterminated __o
12d0: 75 74 5f 65 63 6f 75 6e 74 5f 6f 70 74 28 2a 70  ut_ecount_opt(*p
12e0: 63 63 68 52 65 61 64 65 72 73 29 20 4c 50 57 53  cchReaders) LPWS
12f0: 54 52 20 6d 73 7a 52 65 61 64 65 72 73 2c 0d 0a  TR mszReaders,..
1300: 20 20 20 20 5f 5f 69 6e 6f 75 74 20 20 4c 50 44      __inout  LPD
1310: 57 4f 52 44 20 70 63 63 68 52 65 61 64 65 72 73  WORD pcchReaders
1320: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f  );..#ifdef UNICO
1330: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  DE..#define SCar
1340: 64 4c 69 73 74 52 65 61 64 65 72 73 20 20 53 43  dListReaders  SC
1350: 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 57 0d  ardListReadersW.
1360: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
1370: 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73  SCardListReaders
1380: 20 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65    SCardListReade
1390: 72 73 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21  rsA..#endif // !
13a0: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72  UNICODE....exter
13b0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
13c0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
13d0: 4c 69 73 74 43 61 72 64 73 41 28 0d 0a 20 20 20  ListCardsA(..   
13e0: 20 5f 5f 69 6e 20 20 20 20 20 20 53 43 41 52 44   __in      SCARD
13f0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
1400: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f 6f 70 74 20  ,..    __in_opt 
1410: 20 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d   LPCBYTE pbAtr,.
1420: 0a 20 20 20 20 5f 5f 69 6e 5f 65 63 6f 75 6e 74  .    __in_ecount
1430: 5f 6f 70 74 28 63 67 75 69 64 49 6e 74 65 72 66  _opt(cguidInterf
1440: 61 63 65 43 6f 75 6e 74 29 20 20 4c 50 43 47 55  aceCount)  LPCGU
1450: 49 44 20 72 67 71 75 69 64 49 6e 74 65 72 66 61  ID rgquidInterfa
1460: 63 65 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20  ces,..    __in  
1470: 20 20 20 20 44 57 4f 52 44 20 63 67 75 69 64 49      DWORD cguidI
1480: 6e 74 65 72 66 61 63 65 43 6f 75 6e 74 2c 0d 0a  nterfaceCount,..
1490: 20 20 20 20 5f 5f 6e 75 6c 6c 6e 75 6c 6c 74 65      __nullnullte
14a0: 72 6d 69 6e 61 74 65 64 20 5f 5f 6f 75 74 5f 65  rminated __out_e
14b0: 63 6f 75 6e 74 5f 6f 70 74 28 2a 70 63 63 68 43  count_opt(*pcchC
14c0: 61 72 64 73 29 20 4c 50 53 54 52 20 6d 73 7a 43  ards) LPSTR mszC
14d0: 61 72 64 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f  ards,..    __ino
14e0: 75 74 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63  ut   LPDWORD pcc
14f0: 68 43 61 72 64 73 29 3b 0d 0a 65 78 74 65 72 6e  hCards);..extern
1500: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
1510: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c  G WINAPI..SCardL
1520: 69 73 74 43 61 72 64 73 57 28 0d 0a 20 20 20 20  istCardsW(..    
1530: 5f 5f 69 6e 20 20 20 20 20 20 53 43 41 52 44 43  __in      SCARDC
1540: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
1550: 0d 0a 20 20 20 20 5f 5f 69 6e 5f 6f 70 74 20 20  ..    __in_opt  
1560: 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d 0a  LPCBYTE pbAtr,..
1570: 20 20 20 20 5f 5f 69 6e 5f 65 63 6f 75 6e 74 5f      __in_ecount_
1580: 6f 70 74 28 63 67 75 69 64 49 6e 74 65 72 66 61  opt(cguidInterfa
1590: 63 65 43 6f 75 6e 74 29 20 20 4c 50 43 47 55 49  ceCount)  LPCGUI
15a0: 44 20 72 67 71 75 69 64 49 6e 74 65 72 66 61 63  D rgquidInterfac
15b0: 65 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  es,..    __in   
15c0: 20 20 20 44 57 4f 52 44 20 63 67 75 69 64 49 6e     DWORD cguidIn
15d0: 74 65 72 66 61 63 65 43 6f 75 6e 74 2c 0d 0a 20  terfaceCount,.. 
15e0: 20 20 20 5f 5f 6e 75 6c 6c 6e 75 6c 6c 74 65 72     __nullnullter
15f0: 6d 69 6e 61 74 65 64 20 5f 5f 6f 75 74 5f 65 63  minated __out_ec
1600: 6f 75 6e 74 5f 6f 70 74 28 2a 70 63 63 68 43 61  ount_opt(*pcchCa
1610: 72 64 73 29 20 4c 50 57 53 54 52 20 6d 73 7a 43  rds) LPWSTR mszC
1620: 61 72 64 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f  ards,..    __ino
1630: 75 74 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63  ut   LPDWORD pcc
1640: 68 43 61 72 64 73 29 3b 0d 0a 23 69 66 64 65 66  hCards);..#ifdef
1650: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e   UNICODE..#defin
1660: 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73  e SCardListCards
1670: 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73    SCardListCards
1680: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e  W..#else..#defin
1690: 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73  e SCardListCards
16a0: 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73    SCardListCards
16b0: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
16c0: 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f  ICODE..//..// NO
16d0: 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69  TE:    The routi
16e0: 6e 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64  ne SCardListCard
16f0: 73 20 6e 61 6d 65 20 64 69 66 66 65 72 73 20 66  s name differs f
1700: 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 64 65  rom the PC/SC de
1710: 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f 2f 20 20 20  finition...//   
1720: 20 20 20 20 20 20 20 49 74 20 73 68 6f 75 6c 64         It should
1730: 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20   be:..//..//    
1740: 20 20 20 20 20 20 20 20 20 20 65 78 74 65 72 6e            extern
1750: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
1760: 47 20 57 49 4e 41 50 49 0d 0a 2f 2f 20 20 20 20  G WINAPI..//    
1770: 20 20 20 20 20 20 20 20 20 20 53 43 61 72 64 4c            SCardL
1780: 69 73 74 43 61 72 64 54 79 70 65 73 28 0d 0a 2f  istCardTypes(../
1790: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
17a0: 20 20 20 5f 5f 69 6e 20 20 20 20 20 20 53 43 41     __in      SCA
17b0: 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65  RDCONTEXT hConte
17c0: 78 74 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20  xt,..//         
17d0: 20 20 20 20 20 20 20 20 20 5f 5f 69 6e 5f 6f 70           __in_op
17e0: 74 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 72  t  LPCBYTE pbAtr
17f0: 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20  ,..//           
1800: 20 20 20 20 20 20 20 5f 5f 69 6e 5f 6f 70 74 20         __in_opt 
1810: 20 4c 50 43 47 55 49 44 20 72 67 71 75 69 64 49   LPCGUID rgquidI
1820: 6e 74 65 72 66 61 63 65 73 2c 0d 0a 2f 2f 20 20  nterfaces,..//  
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 5f 5f 69 6e 20 20 20 20 20 20 44 57 4f 52 44 20  __in      DWORD 
1850: 63 67 75 69 64 49 6e 74 65 72 66 61 63 65 43 6f  cguidInterfaceCo
1860: 75 6e 74 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20  unt,..//        
1870: 20 20 20 20 20 20 20 20 20 20 5f 5f 6f 75 74 5f            __out_
1880: 6f 70 74 20 4c 50 54 53 54 52 20 6d 73 7a 43 61  opt LPTSTR mszCa
1890: 72 64 73 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20  rds,..//        
18a0: 20 20 20 20 20 20 20 20 20 20 5f 5f 69 6e 6f 75            __inou
18b0: 74 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63 68  t   LPDWORD pcch
18c0: 43 61 72 64 73 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20  Cards);..//..// 
18d0: 20 20 20 20 20 20 20 20 20 48 65 72 65 27 73 20           Here's 
18e0: 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d 41  a work-around MA
18f0: 43 52 4f 3a 0d 0a 23 64 65 66 69 6e 65 20 53 43  CRO:..#define SC
1900: 61 72 64 4c 69 73 74 43 61 72 64 54 79 70 65 73  ardListCardTypes
1910: 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73 0d   SCardListCards.
1920: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
1930: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
1940: 49 0d 0a 53 43 61 72 64 4c 69 73 74 49 6e 74 65  I..SCardListInte
1950: 72 66 61 63 65 73 41 28 0d 0a 20 20 20 20 5f 5f  rfacesA(..    __
1960: 69 6e 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54  in     SCARDCONT
1970: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20  EXT hContext,.. 
1980: 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c 50 43 53     __in     LPCS
1990: 54 52 20 73 7a 43 61 72 64 2c 0d 0a 20 20 20 20  TR szCard,..    
19a0: 5f 5f 6f 75 74 20 20 20 20 4c 50 47 55 49 44 20  __out    LPGUID 
19b0: 70 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c  pguidInterfaces,
19c0: 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75 74 20 20 4c  ..    __inout  L
19d0: 50 44 57 4f 52 44 20 70 63 67 75 69 64 49 6e 74  PDWORD pcguidInt
19e0: 65 72 66 61 63 65 73 29 3b 0d 0a 65 78 74 65 72  erfaces);..exter
19f0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
1a00: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
1a10: 4c 69 73 74 49 6e 74 65 72 66 61 63 65 73 57 28  ListInterfacesW(
1a20: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 53  ..    __in     S
1a30: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
1a40: 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  text,..    __in 
1a50: 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a 43 61      LPCWSTR szCa
1a60: 72 64 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 20 20  rd,..    __out  
1a70: 20 20 4c 50 47 55 49 44 20 70 67 75 69 64 49 6e    LPGUID pguidIn
1a80: 74 65 72 66 61 63 65 73 2c 0d 0a 20 20 20 20 5f  terfaces,..    _
1a90: 5f 69 6e 6f 75 74 20 20 4c 50 44 57 4f 52 44 20  _inout  LPDWORD 
1aa0: 70 63 67 75 69 64 49 6e 74 65 72 66 61 63 65 73  pcguidInterfaces
1ab0: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f  );..#ifdef UNICO
1ac0: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  DE..#define SCar
1ad0: 64 4c 69 73 74 49 6e 74 65 72 66 61 63 65 73 20  dListInterfaces 
1ae0: 20 53 43 61 72 64 4c 69 73 74 49 6e 74 65 72 66   SCardListInterf
1af0: 61 63 65 73 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  acesW..#else..#d
1b00: 65 66 69 6e 65 20 53 43 61 72 64 4c 69 73 74 49  efine SCardListI
1b10: 6e 74 65 72 66 61 63 65 73 20 20 53 43 61 72 64  nterfaces  SCard
1b20: 4c 69 73 74 49 6e 74 65 72 66 61 63 65 73 41 0d  ListInterfacesA.
1b30: 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43  .#endif // !UNIC
1b40: 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49  ODE....extern WI
1b50: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
1b60: 49 4e 41 50 49 0d 0a 53 43 61 72 64 47 65 74 50  INAPI..SCardGetP
1b70: 72 6f 76 69 64 65 72 49 64 41 28 0d 0a 20 20 20  roviderIdA(..   
1b80: 20 5f 5f 69 6e 20 20 20 20 20 53 43 41 52 44 43   __in     SCARDC
1b90: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
1ba0: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c  ..    __in     L
1bb0: 50 43 53 54 52 20 73 7a 43 61 72 64 2c 0d 0a 20  PCSTR szCard,.. 
1bc0: 20 20 20 5f 5f 6f 75 74 20 20 20 20 4c 50 47 55     __out    LPGU
1bd0: 49 44 20 70 67 75 69 64 50 72 6f 76 69 64 65 72  ID pguidProvider
1be0: 49 64 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e  Id);..extern WIN
1bf0: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
1c00: 4e 41 50 49 0d 0a 53 43 61 72 64 47 65 74 50 72  NAPI..SCardGetPr
1c10: 6f 76 69 64 65 72 49 64 57 28 0d 0a 20 20 20 20  oviderIdW(..    
1c20: 5f 5f 69 6e 20 20 20 20 20 53 43 41 52 44 43 4f  __in     SCARDCO
1c30: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
1c40: 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c 50  .    __in     LP
1c50: 43 57 53 54 52 20 73 7a 43 61 72 64 2c 0d 0a 20  CWSTR szCard,.. 
1c60: 20 20 20 5f 5f 6f 75 74 20 20 20 20 4c 50 47 55     __out    LPGU
1c70: 49 44 20 70 67 75 69 64 50 72 6f 76 69 64 65 72  ID pguidProvider
1c80: 49 64 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49  Id);..#ifdef UNI
1c90: 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43  CODE..#define SC
1ca0: 61 72 64 47 65 74 50 72 6f 76 69 64 65 72 49 64  ardGetProviderId
1cb0: 20 20 53 43 61 72 64 47 65 74 50 72 6f 76 69 64    SCardGetProvid
1cc0: 65 72 49 64 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  erIdW..#else..#d
1cd0: 65 66 69 6e 65 20 53 43 61 72 64 47 65 74 50 72  efine SCardGetPr
1ce0: 6f 76 69 64 65 72 49 64 20 20 53 43 61 72 64 47  oviderId  SCardG
1cf0: 65 74 50 72 6f 76 69 64 65 72 49 64 41 0d 0a 23  etProviderIdA..#
1d00: 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44  endif // !UNICOD
1d10: 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20  E..//..// NOTE: 
1d20: 20 20 20 54 68 65 20 72 6f 75 74 69 6e 65 20 53     The routine S
1d30: 43 61 72 64 47 65 74 50 72 6f 76 69 64 65 72 49  CardGetProviderI
1d40: 64 20 69 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d  d in this implem
1d50: 65 6e 74 61 74 69 6f 6e 20 75 73 65 73 20 47 55  entation uses GU
1d60: 49 44 73 2e 0d 0a 2f 2f 20 20 20 20 20 20 20 20  IDs...//        
1d70: 20 20 54 68 65 20 50 43 2f 53 43 20 64 65 66 69    The PC/SC defi
1d80: 6e 69 74 69 6f 6e 20 75 73 65 73 20 42 59 54 45  nition uses BYTE
1d90: 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e  s...//....extern
1da0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
1db0: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 47  G WINAPI..SCardG
1dc0: 65 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 64  etCardTypeProvid
1dd0: 65 72 4e 61 6d 65 41 28 0d 0a 20 20 20 20 5f 5f  erNameA(..    __
1de0: 69 6e 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e  in      SCARDCON
1df0: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a  TEXT hContext,..
1e00: 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20 4c 50      __in      LP
1e10: 43 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c  CSTR szCardName,
1e20: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20  ..    __in      
1e30: 44 57 4f 52 44 20 64 77 50 72 6f 76 69 64 65 72  DWORD dwProvider
1e40: 49 64 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 5f 65  Id,..    __out_e
1e50: 63 6f 75 6e 74 5f 6f 70 74 28 2a 70 63 63 68 50  count_opt(*pcchP
1e60: 72 6f 76 69 64 65 72 29 20 4c 50 53 54 52 20 73  rovider) LPSTR s
1e70: 7a 50 72 6f 76 69 64 65 72 2c 0d 0a 20 20 20 20  zProvider,..    
1e80: 5f 5f 69 6e 6f 75 74 20 20 20 4c 50 44 57 4f 52  __inout   LPDWOR
1e90: 44 20 70 63 63 68 50 72 6f 76 69 64 65 72 29 3b  D pcchProvider);
1ea0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
1eb0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
1ec0: 0d 0a 53 43 61 72 64 47 65 74 43 61 72 64 54 79  ..SCardGetCardTy
1ed0: 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65 57 28  peProviderNameW(
1ee0: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20  ..    __in      
1ef0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
1f00: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e  ntext,..    __in
1f10: 20 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a        LPCWSTR sz
1f20: 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 5f  CardName,..    _
1f30: 5f 69 6e 20 20 20 20 20 20 44 57 4f 52 44 20 64  _in      DWORD d
1f40: 77 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20  wProviderId,..  
1f50: 20 20 5f 5f 6f 75 74 5f 65 63 6f 75 6e 74 5f 6f    __out_ecount_o
1f60: 70 74 28 2a 70 63 63 68 50 72 6f 76 69 64 65 72  pt(*pcchProvider
1f70: 29 20 4c 50 57 53 54 52 20 73 7a 50 72 6f 76 69  ) LPWSTR szProvi
1f80: 64 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75  der,..    __inou
1f90: 74 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63 68  t   LPDWORD pcch
1fa0: 50 72 6f 76 69 64 65 72 29 3b 0d 0a 23 69 66 64  Provider);..#ifd
1fb0: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66  ef UNICODE..#def
1fc0: 69 6e 65 20 53 43 61 72 64 47 65 74 43 61 72 64  ine SCardGetCard
1fd0: 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65  TypeProviderName
1fe0: 20 20 53 43 61 72 64 47 65 74 43 61 72 64 54 79    SCardGetCardTy
1ff0: 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65 57 0d  peProviderNameW.
2000: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
2010: 53 43 61 72 64 47 65 74 43 61 72 64 54 79 70 65  SCardGetCardType
2020: 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 20 53 43  ProviderName  SC
2030: 61 72 64 47 65 74 43 61 72 64 54 79 70 65 50 72  ardGetCardTypePr
2040: 6f 76 69 64 65 72 4e 61 6d 65 41 0d 0a 23 65 6e  oviderNameA..#en
2050: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d  dif // !UNICODE.
2060: 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20  .//..// NOTE:   
2070: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
2080: 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f   an extension to
2090: 20 74 68 65 20 50 43 2f 53 43 20 64 65 66 69 6e   the PC/SC defin
20a0: 69 74 69 6f 6e 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 0d  itions...//.....
20b0: 0a 2f 2f 0d 0a 2f 2f 20 44 61 74 61 62 61 73 65  .//..// Database
20c0: 20 57 72 69 74 65 72 20 72 6f 75 74 69 6e 65 73   Writer routines
20d0: 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e 20 57  ..//....extern W
20e0: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
20f0: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e 74  WINAPI..SCardInt
2100: 72 6f 64 75 63 65 52 65 61 64 65 72 47 72 6f 75  roduceReaderGrou
2110: 70 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43  pA(..    __in SC
2120: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
2130: 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c  ext,..    __in L
2140: 50 43 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d  PCSTR szGroupNam
2150: 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  e);..extern WINS
2160: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
2170: 41 50 49 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64  API..SCardIntrod
2180: 75 63 65 52 65 61 64 65 72 47 72 6f 75 70 57 28  uceReaderGroupW(
2190: 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43 41 52 44  ..    __in SCARD
21a0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
21b0: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57  ,..    __in LPCW
21c0: 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d 65 29  STR szGroupName)
21d0: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44  ;..#ifdef UNICOD
21e0: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  E..#define SCard
21f0: 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72 47  IntroduceReaderG
2200: 72 6f 75 70 20 20 53 43 61 72 64 49 6e 74 72 6f  roup  SCardIntro
2210: 64 75 63 65 52 65 61 64 65 72 47 72 6f 75 70 57  duceReaderGroupW
2220: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65  ..#else..#define
2230: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52   SCardIntroduceR
2240: 65 61 64 65 72 47 72 6f 75 70 20 20 53 43 61 72  eaderGroup  SCar
2250: 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72  dIntroduceReader
2260: 47 72 6f 75 70 41 0d 0a 23 65 6e 64 69 66 20 2f  GroupA..#endif /
2270: 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78  / !UNICODE....ex
2280: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
2290: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
22a0: 61 72 64 46 6f 72 67 65 74 52 65 61 64 65 72 47  ardForgetReaderG
22b0: 72 6f 75 70 41 28 0d 0a 20 20 20 20 5f 5f 69 6e  roupA(..    __in
22c0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
22d0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69  ontext,..    __i
22e0: 6e 20 4c 50 43 53 54 52 20 73 7a 47 72 6f 75 70  n LPCSTR szGroup
22f0: 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57  Name);..extern W
2300: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
2310: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72  WINAPI..SCardFor
2320: 67 65 74 52 65 61 64 65 72 47 72 6f 75 70 57 28  getReaderGroupW(
2330: 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43 41 52 44  ..    __in SCARD
2340: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
2350: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57  ,..    __in LPCW
2360: 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d 65 29  STR szGroupName)
2370: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44  ;..#ifdef UNICOD
2380: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  E..#define SCard
2390: 46 6f 72 67 65 74 52 65 61 64 65 72 47 72 6f 75  ForgetReaderGrou
23a0: 70 20 20 53 43 61 72 64 46 6f 72 67 65 74 52 65  p  SCardForgetRe
23b0: 61 64 65 72 47 72 6f 75 70 57 0d 0a 23 65 6c 73  aderGroupW..#els
23c0: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  e..#define SCard
23d0: 46 6f 72 67 65 74 52 65 61 64 65 72 47 72 6f 75  ForgetReaderGrou
23e0: 70 20 20 53 43 61 72 64 46 6f 72 67 65 74 52 65  p  SCardForgetRe
23f0: 61 64 65 72 47 72 6f 75 70 41 0d 0a 23 65 6e 64  aderGroupA..#end
2400: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
2410: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
2420: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
2430: 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65  ..SCardIntroduce
2440: 52 65 61 64 65 72 41 28 0d 0a 20 20 20 20 5f 5f  ReaderA(..    __
2450: 69 6e 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20  in SCARDCONTEXT 
2460: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f  hContext,..    _
2470: 5f 69 6e 20 4c 50 43 53 54 52 20 73 7a 52 65 61  _in LPCSTR szRea
2480: 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 20 5f 5f  derName,..    __
2490: 69 6e 20 4c 50 43 53 54 52 20 73 7a 44 65 76 69  in LPCSTR szDevi
24a0: 63 65 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e  ceName);..extern
24b0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
24c0: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49  G WINAPI..SCardI
24d0: 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72 57 28  ntroduceReaderW(
24e0: 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43 41 52 44  ..    __in SCARD
24f0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
2500: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57  ,..    __in LPCW
2510: 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61 6d 65  STR szReaderName
2520: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57  ,..    __in LPCW
2530: 53 54 52 20 73 7a 44 65 76 69 63 65 4e 61 6d 65  STR szDeviceName
2540: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f  );..#ifdef UNICO
2550: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  DE..#define SCar
2560: 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72  dIntroduceReader
2570: 20 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65    SCardIntroduce
2580: 52 65 61 64 65 72 57 0d 0a 23 65 6c 73 65 0d 0a  ReaderW..#else..
2590: 23 64 65 66 69 6e 65 20 53 43 61 72 64 49 6e 74  #define SCardInt
25a0: 72 6f 64 75 63 65 52 65 61 64 65 72 20 20 53 43  roduceReader  SC
25b0: 61 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64  ardIntroduceRead
25c0: 65 72 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21  erA..#endif // !
25d0: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72  UNICODE....exter
25e0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
25f0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
2600: 46 6f 72 67 65 74 52 65 61 64 65 72 41 28 0d 0a  ForgetReaderA(..
2610: 20 20 20 20 5f 5f 69 6e 20 53 43 41 52 44 43 4f      __in SCARDCO
2620: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
2630: 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 53 54 52  .    __in LPCSTR
2640: 20 73 7a 52 65 61 64 65 72 4e 61 6d 65 29 3b 0d   szReaderName);.
2650: 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44  .extern WINSCARD
2660: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d  API LONG WINAPI.
2670: 0a 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 64  .SCardForgetRead
2680: 65 72 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53  erW(..    __in S
2690: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
26a0: 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  text,..    __in 
26b0: 4c 50 43 57 53 54 52 20 73 7a 52 65 61 64 65 72  LPCWSTR szReader
26c0: 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20 55  Name);..#ifdef U
26d0: 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20  NICODE..#define 
26e0: 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 64 65  SCardForgetReade
26f0: 72 20 20 53 43 61 72 64 46 6f 72 67 65 74 52 65  r  SCardForgetRe
2700: 61 64 65 72 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  aderW..#else..#d
2710: 65 66 69 6e 65 20 53 43 61 72 64 46 6f 72 67 65  efine SCardForge
2720: 74 52 65 61 64 65 72 20 20 53 43 61 72 64 46 6f  tReader  SCardFo
2730: 72 67 65 74 52 65 61 64 65 72 41 0d 0a 23 65 6e  rgetReaderA..#en
2740: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d  dif // !UNICODE.
2750: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
2760: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
2770: 49 0d 0a 53 43 61 72 64 41 64 64 52 65 61 64 65  I..SCardAddReade
2780: 72 54 6f 47 72 6f 75 70 41 28 0d 0a 20 20 20 20  rToGroupA(..    
2790: 5f 5f 69 6e 20 53 43 41 52 44 43 4f 4e 54 45 58  __in SCARDCONTEX
27a0: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
27b0: 20 5f 5f 69 6e 20 4c 50 43 53 54 52 20 73 7a 52   __in LPCSTR szR
27c0: 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 20  eaderName,..    
27d0: 5f 5f 69 6e 20 4c 50 43 53 54 52 20 73 7a 47 72  __in LPCSTR szGr
27e0: 6f 75 70 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72  oupName);..exter
27f0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
2800: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
2810: 41 64 64 52 65 61 64 65 72 54 6f 47 72 6f 75 70  AddReaderToGroup
2820: 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43 41  W(..    __in SCA
2830: 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65  RDCONTEXT hConte
2840: 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50  xt,..    __in LP
2850: 43 57 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61  CWSTR szReaderNa
2860: 6d 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50  me,..    __in LP
2870: 43 57 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d  CWSTR szGroupNam
2880: 65 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43  e);..#ifdef UNIC
2890: 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  ODE..#define SCa
28a0: 72 64 41 64 64 52 65 61 64 65 72 54 6f 47 72 6f  rdAddReaderToGro
28b0: 75 70 20 20 53 43 61 72 64 41 64 64 52 65 61 64  up  SCardAddRead
28c0: 65 72 54 6f 47 72 6f 75 70 57 0d 0a 23 65 6c 73  erToGroupW..#els
28d0: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  e..#define SCard
28e0: 41 64 64 52 65 61 64 65 72 54 6f 47 72 6f 75 70  AddReaderToGroup
28f0: 20 20 53 43 61 72 64 41 64 64 52 65 61 64 65 72    SCardAddReader
2900: 54 6f 47 72 6f 75 70 41 0d 0a 23 65 6e 64 69 66  ToGroupA..#endif
2910: 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a   // !UNICODE....
2920: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
2930: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
2940: 53 43 61 72 64 52 65 6d 6f 76 65 52 65 61 64 65  SCardRemoveReade
2950: 72 46 72 6f 6d 47 72 6f 75 70 41 28 0d 0a 20 20  rFromGroupA(..  
2960: 20 20 5f 5f 69 6e 20 53 43 41 52 44 43 4f 4e 54    __in SCARDCONT
2970: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20  EXT hContext,.. 
2980: 20 20 20 5f 5f 69 6e 20 4c 50 43 53 54 52 20 73     __in LPCSTR s
2990: 7a 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20  zReaderName,..  
29a0: 20 20 5f 5f 69 6e 20 4c 50 43 53 54 52 20 73 7a    __in LPCSTR sz
29b0: 47 72 6f 75 70 4e 61 6d 65 29 3b 0d 0a 65 78 74  GroupName);..ext
29c0: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
29d0: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
29e0: 72 64 52 65 6d 6f 76 65 52 65 61 64 65 72 46 72  rdRemoveReaderFr
29f0: 6f 6d 47 72 6f 75 70 57 28 0d 0a 20 20 20 20 5f  omGroupW(..    _
2a00: 5f 69 6e 20 53 43 41 52 44 43 4f 4e 54 45 58 54  _in SCARDCONTEXT
2a10: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20   hContext,..    
2a20: 5f 5f 69 6e 20 4c 50 43 57 53 54 52 20 73 7a 52  __in LPCWSTR szR
2a30: 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 20  eaderName,..    
2a40: 5f 5f 69 6e 20 4c 50 43 57 53 54 52 20 73 7a 47  __in LPCWSTR szG
2a50: 72 6f 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64  roupName);..#ifd
2a60: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66  ef UNICODE..#def
2a70: 69 6e 65 20 53 43 61 72 64 52 65 6d 6f 76 65 52  ine SCardRemoveR
2a80: 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 70 20 20  eaderFromGroup  
2a90: 53 43 61 72 64 52 65 6d 6f 76 65 52 65 61 64 65  SCardRemoveReade
2aa0: 72 46 72 6f 6d 47 72 6f 75 70 57 0d 0a 23 65 6c  rFromGroupW..#el
2ab0: 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  se..#define SCar
2ac0: 64 52 65 6d 6f 76 65 52 65 61 64 65 72 46 72 6f  dRemoveReaderFro
2ad0: 6d 47 72 6f 75 70 20 20 53 43 61 72 64 52 65 6d  mGroup  SCardRem
2ae0: 6f 76 65 52 65 61 64 65 72 46 72 6f 6d 47 72 6f  oveReaderFromGro
2af0: 75 70 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21  upA..#endif // !
2b00: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72  UNICODE....exter
2b10: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
2b20: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
2b30: 49 6e 74 72 6f 64 75 63 65 43 61 72 64 54 79 70  IntroduceCardTyp
2b40: 65 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  eA(..    __in   
2b50: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68    SCARDCONTEXT h
2b60: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f  Context,..    __
2b70: 69 6e 20 20 20 20 20 4c 50 43 53 54 52 20 73 7a  in     LPCSTR sz
2b80: 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 5f  CardName,..    _
2b90: 5f 69 6e 5f 6f 70 74 20 4c 50 43 47 55 49 44 20  _in_opt LPCGUID 
2ba0: 70 67 75 69 64 50 72 69 6d 61 72 79 50 72 6f 76  pguidPrimaryProv
2bb0: 69 64 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f  ider,..    __in_
2bc0: 6f 70 74 20 4c 50 43 47 55 49 44 20 72 67 67 75  opt LPCGUID rggu
2bd0: 69 64 49 6e 74 65 72 66 61 63 65 73 2c 0d 0a 20  idInterfaces,.. 
2be0: 20 20 20 5f 5f 69 6e 20 20 20 20 20 44 57 4f 52     __in     DWOR
2bf0: 44 20 64 77 49 6e 74 65 72 66 61 63 65 43 6f 75  D dwInterfaceCou
2c00: 6e 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  nt,..    __in   
2c10: 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c    LPCBYTE pbAtr,
2c20: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c  ..    __in     L
2c30: 50 43 42 59 54 45 20 70 62 41 74 72 4d 61 73 6b  PCBYTE pbAtrMask
2c40: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20  ,..    __in     
2c50: 44 57 4f 52 44 20 63 62 41 74 72 4c 65 6e 29 3b  DWORD cbAtrLen);
2c60: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
2c70: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
2c80: 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65  ..SCardIntroduce
2c90: 43 61 72 64 54 79 70 65 57 28 0d 0a 20 20 20 20  CardTypeW(..    
2ca0: 5f 5f 69 6e 20 20 20 20 20 53 43 41 52 44 43 4f  __in     SCARDCO
2cb0: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
2cc0: 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c 50  .    __in     LP
2cd0: 43 57 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65  CWSTR szCardName
2ce0: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f 6f 70 74 20  ,..    __in_opt 
2cf0: 4c 50 43 47 55 49 44 20 70 67 75 69 64 50 72 69  LPCGUID pguidPri
2d00: 6d 61 72 79 50 72 6f 76 69 64 65 72 2c 0d 0a 20  maryProvider,.. 
2d10: 20 20 20 5f 5f 69 6e 5f 6f 70 74 20 4c 50 43 47     __in_opt LPCG
2d20: 55 49 44 20 72 67 67 75 69 64 49 6e 74 65 72 66  UID rgguidInterf
2d30: 61 63 65 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  aces,..    __in 
2d40: 20 20 20 20 44 57 4f 52 44 20 64 77 49 6e 74 65      DWORD dwInte
2d50: 72 66 61 63 65 43 6f 75 6e 74 2c 0d 0a 20 20 20  rfaceCount,..   
2d60: 20 5f 5f 69 6e 20 20 20 20 20 4c 50 43 42 59 54   __in     LPCBYT
2d70: 45 20 70 62 41 74 72 2c 0d 0a 20 20 20 20 5f 5f  E pbAtr,..    __
2d80: 69 6e 20 20 20 20 20 4c 50 43 42 59 54 45 20 70  in     LPCBYTE p
2d90: 62 41 74 72 4d 61 73 6b 2c 0d 0a 20 20 20 20 5f  bAtrMask,..    _
2da0: 5f 69 6e 20 20 20 20 20 44 57 4f 52 44 20 63 62  _in     DWORD cb
2db0: 41 74 72 4c 65 6e 29 3b 0d 0a 23 69 66 64 65 66  AtrLen);..#ifdef
2dc0: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e   UNICODE..#defin
2dd0: 65 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65  e SCardIntroduce
2de0: 43 61 72 64 54 79 70 65 20 20 53 43 61 72 64 49  CardType  SCardI
2df0: 6e 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65  ntroduceCardType
2e00: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e  W..#else..#defin
2e10: 65 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65  e SCardIntroduce
2e20: 43 61 72 64 54 79 70 65 20 20 53 43 61 72 64 49  CardType  SCardI
2e30: 6e 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65  ntroduceCardType
2e40: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
2e50: 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f  ICODE..//..// NO
2e60: 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69  TE:    The routi
2e70: 6e 65 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63  ne SCardIntroduc
2e80: 65 43 61 72 64 54 79 70 65 27 73 20 70 61 72 61  eCardType's para
2e90: 6d 65 74 65 72 73 27 20 6f 72 64 65 72 20 64 69  meters' order di
2ea0: 66 66 65 72 73 20 66 72 6f 6d 0d 0a 2f 2f 20 20  ffers from..//  
2eb0: 20 20 20 20 20 20 20 20 74 68 65 20 50 43 2f 53          the PC/S
2ec0: 43 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49  C definition.  I
2ed0: 74 20 73 68 6f 75 6c 64 20 62 65 3a 0d 0a 2f 2f  t should be:..//
2ee0: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
2ef0: 20 20 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52    extern WINSCAR
2f00: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
2f10: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
2f20: 20 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65    SCardIntroduce
2f30: 43 61 72 64 54 79 70 65 28 0d 0a 2f 2f 20 20 20  CardType(..//   
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
2f50: 5f 69 6e 20 20 20 20 20 53 43 41 52 44 43 4f 4e  _in     SCARDCON
2f60: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a  TEXT hContext,..
2f70: 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
2f80: 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c 50 43      __in     LPC
2f90: 54 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c  TSTR szCardName,
2fa0: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
2fb0: 20 20 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c        __in     L
2fc0: 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d 0a 2f  PCBYTE pbAtr,../
2fd0: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
2fe0: 20 20 20 5f 5f 69 6e 20 20 20 20 20 4c 50 43 42     __in     LPCB
2ff0: 59 54 45 20 70 62 41 74 72 4d 61 73 6b 2c 0d 0a  YTE pbAtrMask,..
3000: 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
3010: 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 44 57 4f      __in     DWO
3020: 52 44 20 63 62 41 74 72 4c 65 6e 2c 0d 0a 2f 2f  RD cbAtrLen,..//
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 5f 5f 69 6e 5f 6f 70 74 20 4c 50 43 47 55    __in_opt LPCGU
3050: 49 44 20 70 67 75 69 64 50 72 69 6d 61 72 79 50  ID pguidPrimaryP
3060: 72 6f 76 69 64 65 72 2c 0d 0a 2f 2f 20 20 20 20  rovider,..//    
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 5f                __
3080: 69 6e 5f 6f 70 74 20 4c 50 43 47 55 49 44 20 72  in_opt LPCGUID r
3090: 67 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c  gguidInterfaces,
30a0: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
30b0: 20 20 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 44        __in     D
30c0: 57 4f 52 44 20 64 77 49 6e 74 65 72 66 61 63 65  WORD dwInterface
30d0: 43 6f 75 6e 74 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20  Count);..//..// 
30e0: 20 20 20 20 20 20 20 20 20 48 65 72 65 27 73 20           Here's 
30f0: 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d 41  a work-around MA
3100: 43 52 4f 3a 0d 0a 23 64 65 66 69 6e 65 20 50 43  CRO:..#define PC
3110: 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61  SCardIntroduceCa
3120: 72 64 54 79 70 65 28 68 43 6f 6e 74 65 78 74 2c  rdType(hContext,
3130: 20 73 7a 43 61 72 64 4e 61 6d 65 2c 20 70 62 41   szCardName, pbA
3140: 74 72 2c 20 70 62 41 74 72 4d 61 73 6b 2c 20 63  tr, pbAtrMask, c
3150: 62 41 74 72 4c 65 6e 2c 20 70 67 75 69 64 50 72  bAtrLen, pguidPr
3160: 69 6d 61 72 79 50 72 6f 76 69 64 65 72 2c 20 72  imaryProvider, r
3170: 67 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c  gguidInterfaces,
3180: 20 64 77 49 6e 74 65 72 66 61 63 65 43 6f 75 6e   dwInterfaceCoun
3190: 74 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  t) \..          
31a0: 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61  SCardIntroduceCa
31b0: 72 64 54 79 70 65 28 68 43 6f 6e 74 65 78 74 2c  rdType(hContext,
31c0: 20 73 7a 43 61 72 64 4e 61 6d 65 2c 20 70 67 75   szCardName, pgu
31d0: 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 64 65  idPrimaryProvide
31e0: 72 2c 20 72 67 67 75 69 64 49 6e 74 65 72 66 61  r, rgguidInterfa
31f0: 63 65 73 2c 20 64 77 49 6e 74 65 72 66 61 63 65  ces, dwInterface
3200: 43 6f 75 6e 74 2c 20 70 62 41 74 72 2c 20 70 62  Count, pbAtr, pb
3210: 41 74 72 4d 61 73 6b 2c 20 63 62 41 74 72 4c 65  AtrMask, cbAtrLe
3220: 6e 29 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e  n)....extern WIN
3230: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
3240: 4e 41 50 49 0d 0a 53 43 61 72 64 53 65 74 43 61  NAPI..SCardSetCa
3250: 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61  rdTypeProviderNa
3260: 6d 65 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53  meA(..    __in S
3270: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
3280: 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  text,..    __in 
3290: 4c 50 43 53 54 52 20 73 7a 43 61 72 64 4e 61 6d  LPCSTR szCardNam
32a0: 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 44 57 4f  e,..    __in DWO
32b0: 52 44 20 64 77 50 72 6f 76 69 64 65 72 49 64 2c  RD dwProviderId,
32c0: 0d 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 53 54  ..    __in LPCST
32d0: 52 20 73 7a 50 72 6f 76 69 64 65 72 29 3b 0d 0a  R szProvider);..
32e0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
32f0: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
3300: 53 43 61 72 64 53 65 74 43 61 72 64 54 79 70 65  SCardSetCardType
3310: 50 72 6f 76 69 64 65 72 4e 61 6d 65 57 28 0d 0a  ProviderNameW(..
3320: 20 20 20 20 5f 5f 69 6e 20 53 43 41 52 44 43 4f      __in SCARDCO
3330: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
3340: 0a 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57 53 54  .    __in LPCWST
3350: 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a 20  R szCardName,.. 
3360: 20 20 20 5f 5f 69 6e 20 44 57 4f 52 44 20 64 77     __in DWORD dw
3370: 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
3380: 20 5f 5f 69 6e 20 4c 50 43 57 53 54 52 20 73 7a   __in LPCWSTR sz
3390: 50 72 6f 76 69 64 65 72 29 3b 0d 0a 23 69 66 64  Provider);..#ifd
33a0: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66  ef UNICODE..#def
33b0: 69 6e 65 20 53 43 61 72 64 53 65 74 43 61 72 64  ine SCardSetCard
33c0: 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65  TypeProviderName
33d0: 20 20 53 43 61 72 64 53 65 74 43 61 72 64 54 79    SCardSetCardTy
33e0: 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65 57 0d  peProviderNameW.
33f0: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
3400: 53 43 61 72 64 53 65 74 43 61 72 64 54 79 70 65  SCardSetCardType
3410: 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 20 53 43  ProviderName  SC
3420: 61 72 64 53 65 74 43 61 72 64 54 79 70 65 50 72  ardSetCardTypePr
3430: 6f 76 69 64 65 72 4e 61 6d 65 41 0d 0a 23 65 6e  oviderNameA..#en
3440: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d  dif // !UNICODE.
3450: 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20  .//..// NOTE:   
3460: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
3470: 20 61 6e 20 65 78 74 65 6e 74 69 6f 6e 20 74 6f   an extention to
3480: 20 74 68 65 20 50 43 2f 53 43 20 73 70 65 63 69   the PC/SC speci
3490: 66 69 63 61 74 69 6f 6e 73 2e 0d 0a 2f 2f 0d 0a  fications...//..
34a0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
34b0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
34c0: 0d 0a 53 43 61 72 64 46 6f 72 67 65 74 43 61 72  ..SCardForgetCar
34d0: 64 54 79 70 65 41 28 0d 0a 20 20 20 20 5f 5f 69  dTypeA(..    __i
34e0: 6e 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68  n SCARDCONTEXT h
34f0: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f  Context,..    __
3500: 69 6e 20 4c 50 43 53 54 52 20 73 7a 43 61 72 64  in LPCSTR szCard
3510: 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57  Name);..extern W
3520: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
3530: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72  WINAPI..SCardFor
3540: 67 65 74 43 61 72 64 54 79 70 65 57 28 0d 0a 20  getCardTypeW(.. 
3550: 20 20 20 5f 5f 69 6e 20 53 43 41 52 44 43 4f 4e     __in SCARDCON
3560: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a  TEXT hContext,..
3570: 20 20 20 20 5f 5f 69 6e 20 4c 50 43 57 53 54 52      __in LPCWSTR
3580: 20 73 7a 43 61 72 64 4e 61 6d 65 29 3b 0d 0a 23   szCardName);..#
3590: 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23  ifdef UNICODE..#
35a0: 64 65 66 69 6e 65 20 53 43 61 72 64 46 6f 72 67  define SCardForg
35b0: 65 74 43 61 72 64 54 79 70 65 20 20 53 43 61 72  etCardType  SCar
35c0: 64 46 6f 72 67 65 74 43 61 72 64 54 79 70 65 57  dForgetCardTypeW
35d0: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65  ..#else..#define
35e0: 20 53 43 61 72 64 46 6f 72 67 65 74 43 61 72 64   SCardForgetCard
35f0: 54 79 70 65 20 20 53 43 61 72 64 46 6f 72 67 65  Type  SCardForge
3600: 74 43 61 72 64 54 79 70 65 41 0d 0a 23 65 6e 64  tCardTypeA..#end
3610: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
3620: 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f  ....//..////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f  ////////..//..//
3680: 20 20 53 65 72 76 69 63 65 20 4d 61 6e 61 67 65    Service Manage
3690: 72 20 53 75 70 70 6f 72 74 20 52 6f 75 74 69 6e  r Support Routin
36a0: 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20  es..//..//      
36b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  The following se
36c0: 72 76 69 63 65 73 20 61 72 65 20 73 75 70 70 6c  rvices are suppl
36d0: 69 65 64 20 74 6f 20 73 69 6d 70 6c 69 66 79 20  ied to simplify 
36e0: 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 53  the use of the S
36f0: 65 72 76 69 63 65 0d 0a 2f 2f 20 20 20 20 20 20  ervice..//      
3700: 4d 61 6e 61 67 65 72 20 41 50 49 2e 0d 0a 2f 2f  Manager API...//
3710: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43  ....extern WINSC
3720: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41  ARDAPI LONG WINA
3730: 50 49 0d 0a 53 43 61 72 64 46 72 65 65 4d 65 6d  PI..SCardFreeMem
3740: 6f 72 79 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53  ory(..    __in S
3750: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
3760: 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  text,..    __in 
3770: 4c 50 43 56 4f 49 44 20 70 76 4d 65 6d 29 3b 0d  LPCVOID pvMem);.
3780: 0a 0d 0a 23 69 66 20 28 4e 54 44 44 49 5f 56 45  ...#if (NTDDI_VE
3790: 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 57  RSION >= NTDDI_W
37a0: 49 4e 58 50 29 0d 0a 65 78 74 65 72 6e 20 57 49  INXP)..extern WI
37b0: 4e 53 43 41 52 44 41 50 49 20 48 41 4e 44 4c 45  NSCARDAPI HANDLE
37c0: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 41 63   WINAPI..SCardAc
37d0: 63 65 73 73 53 74 61 72 74 65 64 45 76 65 6e 74  cessStartedEvent
37e0: 28 76 6f 69 64 29 3b 0d 0a 0d 0a 65 78 74 65 72  (void);....exter
37f0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 76 6f  n WINSCARDAPI vo
3800: 69 64 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  id WINAPI..SCard
3810: 52 65 6c 65 61 73 65 53 74 61 72 74 65 64 45 76  ReleaseStartedEv
3820: 65 6e 74 28 76 6f 69 64 29 3b 0d 0a 23 65 6e 64  ent(void);..#end
3830: 69 66 20 2f 2f 20 28 4e 54 44 44 49 5f 56 45 52  if // (NTDDI_VER
3840: 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49  SION >= NTDDI_WI
3850: 4e 58 50 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f  NXP)....//..////
3860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f  ////////////..//
38b0: 0d 0a 2f 2f 20 20 52 65 61 64 65 72 20 53 65 72  ..//  Reader Ser
38c0: 76 69 63 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20  vices..//..//   
38d0: 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     The following
38e0: 20 73 65 72 76 69 63 65 73 20 73 75 70 70 6c 79   services supply
38f0: 20 6d 65 61 6e 73 20 66 6f 72 20 74 72 61 63 6b   means for track
3900: 69 6e 67 20 63 61 72 64 73 20 77 69 74 68 69 6e  ing cards within
3910: 20 72 65 61 64 65 72 73 2e 0d 0a 2f 2f 0d 0a 0d   readers...//...
3920: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
3930: 7b 0d 0a 20 20 20 20 4c 50 43 53 54 52 20 20 20  {..    LPCSTR   
3940: 20 20 20 73 7a 52 65 61 64 65 72 3b 20 20 20 20     szReader;    
3950: 20 20 20 2f 2f 20 72 65 61 64 65 72 20 6e 61 6d     // reader nam
3960: 65 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20 20 20  e..    LPVOID   
3970: 20 20 20 70 76 55 73 65 72 44 61 74 61 3b 20 20     pvUserData;  
3980: 20 20 20 2f 2f 20 75 73 65 72 20 64 65 66 69 6e     // user defin
3990: 65 64 20 64 61 74 61 0d 0a 20 20 20 20 44 57 4f  ed data..    DWO
39a0: 52 44 20 20 20 20 20 20 20 64 77 43 75 72 72 65  RD       dwCurre
39b0: 6e 74 53 74 61 74 65 3b 20 2f 2f 20 63 75 72 72  ntState; // curr
39c0: 65 6e 74 20 73 74 61 74 65 20 6f 66 20 72 65 61  ent state of rea
39d0: 64 65 72 20 61 74 20 74 69 6d 65 20 6f 66 20 63  der at time of c
39e0: 61 6c 6c 0d 0a 20 20 20 20 44 57 4f 52 44 20 20  all..    DWORD  
39f0: 20 20 20 20 20 64 77 45 76 65 6e 74 53 74 61 74       dwEventStat
3a00: 65 3b 20 20 20 2f 2f 20 73 74 61 74 65 20 6f 66  e;   // state of
3a10: 20 72 65 61 64 65 72 20 61 66 74 65 72 20 73 74   reader after st
3a20: 61 74 65 20 63 68 61 6e 67 65 0d 0a 20 20 20 20  ate change..    
3a30: 44 57 4f 52 44 20 20 20 20 20 20 20 63 62 41 74  DWORD       cbAt
3a40: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e  r;          // N
3a50: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
3a60: 6e 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 41  n the returned A
3a70: 54 52 2e 0d 0a 20 20 20 20 42 59 54 45 20 20 20  TR...    BYTE   
3a80: 20 20 20 20 20 72 67 62 41 74 72 5b 33 36 5d 3b       rgbAtr[36];
3a90: 20 20 20 20 20 2f 2f 20 41 74 72 20 6f 66 20 69       // Atr of i
3aa0: 6e 73 65 72 74 65 64 20 63 61 72 64 2c 20 28 65  nserted card, (e
3ab0: 78 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62  xtra alignment b
3ac0: 79 74 65 73 29 0d 0a 7d 20 53 43 41 52 44 5f 52  ytes)..} SCARD_R
3ad0: 45 41 44 45 52 53 54 41 54 45 41 2c 20 2a 50 53  EADERSTATEA, *PS
3ae0: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45  CARD_READERSTATE
3af0: 41 2c 20 2a 4c 50 53 43 41 52 44 5f 52 45 41 44  A, *LPSCARD_READ
3b00: 45 52 53 54 41 54 45 41 3b 0d 0a 74 79 70 65 64  ERSTATEA;..typed
3b10: 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20  ef struct {..   
3b20: 20 4c 50 43 57 53 54 52 20 20 20 20 20 73 7a 52   LPCWSTR     szR
3b30: 65 61 64 65 72 3b 20 20 20 20 20 20 20 2f 2f 20  eader;       // 
3b40: 72 65 61 64 65 72 20 6e 61 6d 65 0d 0a 20 20 20  reader name..   
3b50: 20 4c 50 56 4f 49 44 20 20 20 20 20 20 70 76 55   LPVOID      pvU
3b60: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2f 20  serData;     // 
3b70: 75 73 65 72 20 64 65 66 69 6e 65 64 20 64 61 74  user defined dat
3b80: 61 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  a..    DWORD    
3b90: 20 20 20 64 77 43 75 72 72 65 6e 74 53 74 61 74     dwCurrentStat
3ba0: 65 3b 20 2f 2f 20 63 75 72 72 65 6e 74 20 73 74  e; // current st
3bb0: 61 74 65 20 6f 66 20 72 65 61 64 65 72 20 61 74  ate of reader at
3bc0: 20 74 69 6d 65 20 6f 66 20 63 61 6c 6c 0d 0a 20   time of call.. 
3bd0: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 64     DWORD       d
3be0: 77 45 76 65 6e 74 53 74 61 74 65 3b 20 20 20 2f  wEventState;   /
3bf0: 2f 20 73 74 61 74 65 20 6f 66 20 72 65 61 64 65  / state of reade
3c00: 72 20 61 66 74 65 72 20 73 74 61 74 65 20 63 68  r after state ch
3c10: 61 6e 67 65 0d 0a 20 20 20 20 44 57 4f 52 44 20  ange..    DWORD 
3c20: 20 20 20 20 20 20 63 62 41 74 72 3b 20 20 20 20        cbAtr;    
3c30: 20 20 20 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20        // Number 
3c40: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
3c50: 72 65 74 75 72 6e 65 64 20 41 54 52 2e 0d 0a 20  returned ATR... 
3c60: 20 20 20 42 59 54 45 20 20 20 20 20 20 20 20 72     BYTE        r
3c70: 67 62 41 74 72 5b 33 36 5d 3b 20 20 20 20 20 2f  gbAtr[36];     /
3c80: 2f 20 41 74 72 20 6f 66 20 69 6e 73 65 72 74 65  / Atr of inserte
3c90: 64 20 63 61 72 64 2c 20 28 65 78 74 72 61 20 61  d card, (extra a
3ca0: 6c 69 67 6e 6d 65 6e 74 20 62 79 74 65 73 29 0d  lignment bytes).
3cb0: 0a 7d 20 53 43 41 52 44 5f 52 45 41 44 45 52 53  .} SCARD_READERS
3cc0: 54 41 54 45 57 2c 20 2a 50 53 43 41 52 44 5f 52  TATEW, *PSCARD_R
3cd0: 45 41 44 45 52 53 54 41 54 45 57 2c 20 2a 4c 50  EADERSTATEW, *LP
3ce0: 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54  SCARD_READERSTAT
3cf0: 45 57 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43  EW;..#ifdef UNIC
3d00: 4f 44 45 0d 0a 74 79 70 65 64 65 66 20 53 43 41  ODE..typedef SCA
3d10: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20  RD_READERSTATEW 
3d20: 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54  SCARD_READERSTAT
3d30: 45 3b 0d 0a 74 79 70 65 64 65 66 20 50 53 43 41  E;..typedef PSCA
3d40: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20  RD_READERSTATEW 
3d50: 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41  PSCARD_READERSTA
3d60: 54 45 3b 0d 0a 74 79 70 65 64 65 66 20 4c 50 53  TE;..typedef LPS
3d70: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45  CARD_READERSTATE
3d80: 57 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52  W LPSCARD_READER
3d90: 53 54 41 54 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74  STATE;..#else..t
3da0: 79 70 65 64 65 66 20 53 43 41 52 44 5f 52 45 41  ypedef SCARD_REA
3db0: 44 45 52 53 54 41 54 45 41 20 53 43 41 52 44 5f  DERSTATEA SCARD_
3dc0: 52 45 41 44 45 52 53 54 41 54 45 3b 0d 0a 74 79  READERSTATE;..ty
3dd0: 70 65 64 65 66 20 50 53 43 41 52 44 5f 52 45 41  pedef PSCARD_REA
3de0: 44 45 52 53 54 41 54 45 41 20 50 53 43 41 52 44  DERSTATEA PSCARD
3df0: 5f 52 45 41 44 45 52 53 54 41 54 45 3b 0d 0a 74  _READERSTATE;..t
3e00: 79 70 65 64 65 66 20 4c 50 53 43 41 52 44 5f 52  ypedef LPSCARD_R
3e10: 45 41 44 45 52 53 54 41 54 45 41 20 4c 50 53 43  EADERSTATEA LPSC
3e20: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 3b  ARD_READERSTATE;
3e30: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 55 4e 49 43  ..#endif // UNIC
3e40: 4f 44 45 0d 0a 0d 0a 2f 2f 20 42 61 63 6b 77 61  ODE....// Backwa
3e50: 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
3e60: 79 20 6d 61 63 72 6f 73 0d 0a 23 64 65 66 69 6e  y macros..#defin
3e70: 65 20 53 43 41 52 44 5f 52 45 41 44 45 52 53 54  e SCARD_READERST
3e80: 41 54 45 5f 41 20 53 43 41 52 44 5f 52 45 41 44  ATE_A SCARD_READ
3e90: 45 52 53 54 41 54 45 41 0d 0a 23 64 65 66 69 6e  ERSTATEA..#defin
3ea0: 65 20 53 43 41 52 44 5f 52 45 41 44 45 52 53 54  e SCARD_READERST
3eb0: 41 54 45 5f 57 20 53 43 41 52 44 5f 52 45 41 44  ATE_W SCARD_READ
3ec0: 45 52 53 54 41 54 45 57 0d 0a 23 64 65 66 69 6e  ERSTATEW..#defin
3ed0: 65 20 50 53 43 41 52 44 5f 52 45 41 44 45 52 53  e PSCARD_READERS
3ee0: 54 41 54 45 5f 41 20 50 53 43 41 52 44 5f 52 45  TATE_A PSCARD_RE
3ef0: 41 44 45 52 53 54 41 54 45 41 0d 0a 23 64 65 66  ADERSTATEA..#def
3f00: 69 6e 65 20 50 53 43 41 52 44 5f 52 45 41 44 45  ine PSCARD_READE
3f10: 52 53 54 41 54 45 5f 57 20 50 53 43 41 52 44 5f  RSTATE_W PSCARD_
3f20: 52 45 41 44 45 52 53 54 41 54 45 57 0d 0a 23 64  READERSTATEW..#d
3f30: 65 66 69 6e 65 20 4c 50 53 43 41 52 44 5f 52 45  efine LPSCARD_RE
3f40: 41 44 45 52 53 54 41 54 45 5f 41 20 4c 50 53 43  ADERSTATE_A LPSC
3f50: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 41  ARD_READERSTATEA
3f60: 0d 0a 23 64 65 66 69 6e 65 20 4c 50 53 43 41 52  ..#define LPSCAR
3f70: 44 5f 52 45 41 44 45 52 53 54 41 54 45 5f 57 20  D_READERSTATE_W 
3f80: 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54  LPSCARD_READERST
3f90: 41 54 45 57 0d 0a 0d 0a 23 64 65 66 69 6e 65 20  ATEW....#define 
3fa0: 53 43 41 52 44 5f 53 54 41 54 45 5f 55 4e 41 57  SCARD_STATE_UNAW
3fb0: 41 52 45 20 20 20 20 20 30 78 30 30 30 30 30 30  ARE     0x000000
3fc0: 30 30 20 20 2f 2f 20 54 68 65 20 61 70 70 6c 69  00  // The appli
3fd0: 63 61 74 69 6f 6e 20 69 73 20 75 6e 61 77 61 72  cation is unawar
3fe0: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..      
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 20 20 20 20 20 2f 2f 20 63 75 72 72 65 6e 74        // current
4020: 20 73 74 61 74 65 2c 20 61 6e 64 20 77 6f 75 6c   state, and woul
4030: 64 20 6c 69 6b 65 20 74 6f 0d 0a 20 20 20 20 20  d like to..     
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 20 20 2f 2f 20 6b 6e 6f 77 2e 20         // know. 
4070: 20 54 68 65 20 75 73 65 20 6f 66 20 74 68 69 73   The use of this
4080: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 2f 2f 20 72 65 73 75 6c 74 73 20 69      // results i
40c0: 6e 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 72  n an immediate r
40d0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20  eturn..         
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 20 20 2f 2f 20 66 72 6f 6d 20 73 74 61 74 65     // from state
4110: 20 74 72 61 6e 73 69 74 69 6f 6e 20 6d 6f 6e 69   transition moni
4120: 74 6f 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  toring..        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 2f 2f 20 73 65 72 76 69 63 65 73 2e      // services.
4160: 20 20 54 68 69 73 20 69 73 20 72 65 70 72 65 73    This is repres
4170: 65 6e 74 65 64 20 62 79 0d 0a 20 20 20 20 20 20  ented by..      
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41a0: 20 20 20 20 20 20 2f 2f 20 61 6c 6c 20 62 69 74        // all bit
41b0: 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 0d 0a  s set to zero...
41c0: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54  #define SCARD_ST
41d0: 41 54 45 5f 49 47 4e 4f 52 45 20 20 20 20 20 20  ATE_IGNORE      
41e0: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2f 20 54  0x00000001  // T
41f0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 72  he application r
4200: 65 71 75 65 73 74 65 64 20 74 68 61 74 0d 0a 20  equested that.. 
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4230: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68             // th
4240: 69 73 20 72 65 61 64 65 72 20 62 65 20 69 67 6e  is reader be ign
4250: 6f 72 65 64 2e 20 20 4e 6f 20 6f 74 68 65 72 0d  ored.  No other.
4260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4290: 62 69 74 73 20 77 69 6c 6c 20 62 65 20 73 65 74  bits will be set
42a0: 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
42b0: 5f 53 54 41 54 45 5f 43 48 41 4e 47 45 44 20 20  _STATE_CHANGED  
42c0: 20 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f     0x00000002  /
42d0: 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74  / This implies t
42e0: 68 61 74 20 74 68 65 72 65 20 69 73 20 61 0d 0a  hat there is a..
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
4320: 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
4330: 6e 20 74 68 65 20 73 74 61 74 65 0d 0a 20 20 20  n the state..   
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 20 20 20 20 20 20 20 2f 2f 20 62 65 6c 69           // beli
4370: 65 76 65 64 20 62 79 20 74 68 65 20 61 70 70 6c  eved by the appl
4380: 69 63 61 74 69 6f 6e 2c 20 61 6e 64 0d 0a 20 20  ication, and..  
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65            // the
43c0: 20 73 74 61 74 65 20 6b 6e 6f 77 6e 20 62 79 20   state known by 
43d0: 74 68 65 20 53 65 72 76 69 63 65 0d 0a 20 20 20  the Service..   
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 20 20 20 20 20 20 2f 2f 20 4d 61 6e 61           // Mana
4410: 67 65 72 2e 20 20 57 68 65 6e 20 74 68 69 73 20  ger.  When this 
4420: 62 69 74 20 69 73 20 73 65 74 2c 0d 0a 20 20 20  bit is set,..   
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20           // the 
4460: 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20  application may 
4470: 61 73 73 75 6d 65 20 61 0d 0a 20 20 20 20 20 20  assume a..      
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 2f 2f 20 73 69 67 6e 69 66 69        // signifi
44b0: 63 61 6e 74 20 73 74 61 74 65 20 63 68 61 6e 67  cant state chang
44c0: 65 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 20  e has..         
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44f0: 20 20 20 2f 2f 20 6f 63 63 75 72 72 65 64 20 6f     // occurred o
4500: 6e 20 74 68 69 73 20 72 65 61 64 65 72 2e 0d 0a  n this reader...
4510: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54  #define SCARD_ST
4520: 41 54 45 5f 55 4e 4b 4e 4f 57 4e 20 20 20 20 20  ATE_UNKNOWN     
4530: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2f 20 54  0x00000004  // T
4540: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
4550: 20 74 68 65 20 67 69 76 65 6e 0d 0a 20 20 20 20   the given..    
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4580: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 61 64 65          // reade
4590: 72 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 72 65  r name is not re
45a0: 63 6f 67 6e 69 7a 65 64 20 62 79 0d 0a 20 20 20  cognized by..   
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20           // the 
45e0: 53 65 72 76 69 63 65 20 4d 61 6e 61 67 65 72 2e  Service Manager.
45f0: 20 20 49 66 20 74 68 69 73 20 62 69 74 0d 0a 20    If this bit.. 
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73             // is
4630: 20 73 65 74 2c 20 74 68 65 6e 20 53 43 41 52 44   set, then SCARD
4640: 5f 53 54 41 54 45 5f 43 48 41 4e 47 45 44 0d 0a  _STATE_CHANGED..
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61              // a
4680: 6e 64 20 53 43 41 52 44 5f 53 54 41 54 45 5f 49  nd SCARD_STATE_I
4690: 47 4e 4f 52 45 20 77 69 6c 6c 20 61 6c 73 6f 0d  GNORE will also.
46a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
46d0: 62 65 20 73 65 74 2e 0d 0a 23 64 65 66 69 6e 65  be set...#define
46e0: 20 53 43 41 52 44 5f 53 54 41 54 45 5f 55 4e 41   SCARD_STATE_UNA
46f0: 56 41 49 4c 41 42 4c 45 20 30 78 30 30 30 30 30  VAILABLE 0x00000
4700: 30 30 38 20 20 2f 2f 20 54 68 69 73 20 69 6d 70  008  // This imp
4710: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 61 63  lies that the ac
4720: 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  tual..          
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 2f 2f 20 73 74 61 74 65 20 6f 66 20 74 68    // state of th
4760: 69 73 20 72 65 61 64 65 72 20 69 73 20 6e 6f 74  is reader is not
4770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
47a0: 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 49 66 20   available.  If 
47b0: 74 68 69 73 20 62 69 74 20 69 73 20 73 65 74 2c  this bit is set,
47c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
47f0: 20 74 68 65 6e 20 61 6c 6c 20 74 68 65 20 66 6f   then all the fo
4800: 6c 6c 6f 77 69 6e 67 20 62 69 74 73 20 61 72 65  llowing bits are
4810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4840: 20 63 6c 65 61 72 2e 0d 0a 23 64 65 66 69 6e 65   clear...#define
4850: 20 53 43 41 52 44 5f 53 54 41 54 45 5f 45 4d 50   SCARD_STATE_EMP
4860: 54 59 20 20 20 20 20 20 20 30 78 30 30 30 30 30  TY       0x00000
4870: 30 31 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70  010  // This imp
4880: 6c 69 65 73 20 74 68 61 74 20 74 68 65 72 65 20  lies that there 
4890: 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  is not..        
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 20 20 20 2f 2f 20 63 61 72 64 20 69 6e 20 74      // card in t
48d0: 68 65 20 72 65 61 64 65 72 2e 20 20 49 66 20 74  he reader.  If t
48e0: 68 69 73 20 62 69 74 0d 0a 20 20 20 20 20 20 20  his bit..       
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 20 20 2f 2f 20 69 73 20 73 65 74 2c 20       // is set, 
4920: 61 6c 6c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  all the followin
4930: 67 20 62 69 74 73 0d 0a 20 20 20 20 20 20 20 20  g bits..        
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4960: 20 20 20 20 2f 2f 20 77 69 6c 6c 20 62 65 20 63      // will be c
4970: 6c 65 61 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53  lear...#define S
4980: 43 41 52 44 5f 53 54 41 54 45 5f 50 52 45 53 45  CARD_STATE_PRESE
4990: 4e 54 20 20 20 20 20 30 78 30 30 30 30 30 30 32  NT     0x0000002
49a0: 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69  0  // This impli
49b0: 65 73 20 74 68 61 74 20 74 68 65 72 65 20 69 73  es that there is
49c0: 20 61 20 63 61 72 64 0d 0a 20 20 20 20 20 20 20   a card..       
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49f0: 20 20 20 20 20 2f 2f 20 69 6e 20 74 68 65 20 72       // in the r
4a00: 65 61 64 65 72 2e 0d 0a 23 64 65 66 69 6e 65 20  eader...#define 
4a10: 53 43 41 52 44 5f 53 54 41 54 45 5f 41 54 52 4d  SCARD_STATE_ATRM
4a20: 41 54 43 48 20 20 20 20 30 78 30 30 30 30 30 30  ATCH    0x000000
4a30: 34 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c  40  // This impl
4a40: 69 65 73 20 74 68 61 74 20 74 68 65 72 65 20 69  ies that there i
4a50: 73 20 61 20 63 61 72 64 0d 0a 20 20 20 20 20 20  s a card..      
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 20 20 20 20 20 20 2f 2f 20 69 6e 20 74 68 65 20        // in the 
4a90: 72 65 61 64 65 72 20 77 69 74 68 20 61 6e 20 41  reader with an A
4aa0: 54 52 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  TR..            
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 2f 2f 20 6d 61 74 63 68 69 6e 67 20 6f 6e 65 20  // matching one 
4ae0: 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 63 61  of the target ca
4af0: 72 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  rds...          
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 2f 2f 20 49 66 20 74 68 69 73 20 62 69 74    // If this bit
4b30: 20 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20   is set,..      
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 20 20 20 20 20 20 2f 2f 20 53 43 41 52 44 5f 53        // SCARD_S
4b70: 54 41 54 45 5f 50 52 45 53 45 4e 54 20 77 69 6c  TATE_PRESENT wil
4b80: 6c 20 61 6c 73 6f 20 62 65 0d 0a 20 20 20 20 20  l also be..     
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bb0: 20 20 20 20 20 20 20 2f 2f 20 73 65 74 2e 20 20         // set.  
4bc0: 54 68 69 73 20 62 69 74 20 69 73 20 6f 6e 6c 79  This bit is only
4bd0: 20 72 65 74 75 72 6e 65 64 0d 0a 20 20 20 20 20   returned..     
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 20 20 20 20 20 2f 2f 20 6f 6e 20 74 68 65         // on the
4c10: 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64   SCardLocateCard
4c20: 28 29 20 73 65 72 76 69 63 65 2e 0d 0a 23 64 65  () service...#de
4c30: 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 54 45  fine SCARD_STATE
4c40: 5f 45 58 43 4c 55 53 49 56 45 20 20 20 30 78 30  _EXCLUSIVE   0x0
4c50: 30 30 30 30 30 38 30 20 20 2f 2f 20 54 68 69 73  0000080  // This
4c60: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
4c70: 65 20 63 61 72 64 20 69 6e 20 74 68 65 0d 0a 20  e card in the.. 
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
4cb0: 61 64 65 72 20 69 73 20 61 6c 6c 6f 63 61 74 65  ader is allocate
4cc0: 64 20 66 6f 72 20 65 78 63 6c 75 73 69 76 65 0d  d for exclusive.
4cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4d00: 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 61  use by another a
4d10: 70 70 6c 69 63 61 74 69 6f 6e 2e 20 20 49 66 0d  pplication.  If.
4d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4d50: 74 68 69 73 20 62 69 74 20 69 73 20 73 65 74 2c  this bit is set,
4d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4d90: 20 53 43 41 52 44 5f 53 54 41 54 45 5f 50 52 45   SCARD_STATE_PRE
4da0: 53 45 4e 54 20 77 69 6c 6c 20 61 6c 73 6f 20 62  SENT will also b
4db0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4de0: 2f 20 73 65 74 2e 0d 0a 23 64 65 66 69 6e 65 20  / set...#define 
4df0: 53 43 41 52 44 5f 53 54 41 54 45 5f 49 4e 55 53  SCARD_STATE_INUS
4e00: 45 20 20 20 20 20 20 20 30 78 30 30 30 30 30 31  E       0x000001
4e10: 30 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c  00  // This impl
4e20: 69 65 73 20 74 68 61 74 20 74 68 65 20 63 61 72  ies that the car
4e30: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..      
4e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 20 20 20 2f 2f 20 72 65 61 64 65 72 20        // reader 
4e70: 69 73 20 69 6e 20 75 73 65 20 62 79 20 6f 6e 65  is in use by one
4e80: 20 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20   or more..      
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 20 20 20 2f 2f 20 6f 74 68 65 72 20 61        // other a
4ec0: 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 62 75 74  pplications, but
4ed0: 20 6d 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20   may be..       
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f00: 20 20 20 20 20 2f 2f 20 63 6f 6e 6e 65 63 74 65       // connecte
4f10: 64 20 74 6f 20 69 6e 20 73 68 61 72 65 64 20 6d  d to in shared m
4f20: 6f 64 65 2e 20 20 49 66 0d 0a 20 20 20 20 20 20  ode.  If..      
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f50: 20 20 20 20 20 20 2f 2f 20 74 68 69 73 20 62 69        // this bi
4f60: 74 20 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20  t is set,..     
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 20 20 20 20 20 20 20 2f 2f 20 53 43 41 52 44 5f         // SCARD_
4fa0: 53 54 41 54 45 5f 50 52 45 53 45 4e 54 20 77 69  STATE_PRESENT wi
4fb0: 6c 6c 20 61 6c 73 6f 20 62 65 0d 0a 20 20 20 20  ll also be..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fe0: 20 20 20 20 20 20 20 20 2f 2f 20 73 65 74 2e 0d          // set..
4ff0: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53  .#define SCARD_S
5000: 54 41 54 45 5f 4d 55 54 45 20 20 20 20 20 20 20  TATE_MUTE       
5010: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2f 20   0x00000200  // 
5020: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
5030: 74 20 74 68 65 20 63 61 72 64 20 69 6e 20 74 68  t the card in th
5040: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5070: 2f 20 72 65 61 64 65 72 20 69 73 20 75 6e 72 65  / reader is unre
5080: 73 70 6f 6e 73 69 76 65 20 6f 72 20 6e 6f 74 0d  sponsive or not.
5090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
50c0: 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65  supported by the
50d0: 20 72 65 61 64 65 72 20 6f 72 0d 0a 20 20 20 20   reader or..    
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5100: 20 20 20 20 20 20 20 20 2f 2f 20 73 6f 66 74 77          // softw
5110: 61 72 65 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43  are...#define SC
5120: 41 52 44 5f 53 54 41 54 45 5f 55 4e 50 4f 57 45  ARD_STATE_UNPOWE
5130: 52 45 44 20 20 20 30 78 30 30 30 30 30 34 30 30  RED   0x00000400
5140: 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65    // This implie
5150: 73 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20  s that the card 
5160: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 2f 2f 20 72 65 61 64 65 72 20 68 61      // reader ha
51a0: 73 20 6e 6f 74 20 62 65 65 6e 20 70 6f 77 65 72  s not been power
51b0: 65 64 20 75 70 2e 0d 0a 0d 0a 65 78 74 65 72 6e  ed up.....extern
51c0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
51d0: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c  G WINAPI..SCardL
51e0: 6f 63 61 74 65 43 61 72 64 73 41 28 0d 0a 20 20  ocateCardsA(..  
51f0: 20 20 5f 5f 69 6e 20 20 20 20 53 43 41 52 44 43    __in    SCARDC
5200: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
5210: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 4c 50  ..    __in    LP
5220: 43 53 54 52 20 6d 73 7a 43 61 72 64 73 2c 0d 0a  CSTR mszCards,..
5230: 20 20 20 20 5f 5f 69 6e 6f 75 74 20 4c 50 53 43      __inout LPSC
5240: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 41  ARD_READERSTATEA
5250: 20 72 67 52 65 61 64 65 72 53 74 61 74 65 73 2c   rgReaderStates,
5260: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 44 57  ..    __in    DW
5270: 4f 52 44 20 63 52 65 61 64 65 72 73 29 3b 0d 0a  ORD cReaders);..
5280: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
5290: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
52a0: 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73  SCardLocateCards
52b0: 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20  W(..    __in    
52c0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
52d0: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e  ntext,..    __in
52e0: 20 20 20 20 4c 50 43 57 53 54 52 20 6d 73 7a 43      LPCWSTR mszC
52f0: 61 72 64 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f  ards,..    __ino
5300: 75 74 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45  ut LPSCARD_READE
5310: 52 53 54 41 54 45 57 20 72 67 52 65 61 64 65 72  RSTATEW rgReader
5320: 53 74 61 74 65 73 2c 0d 0a 20 20 20 20 5f 5f 69  States,..    __i
5330: 6e 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 64  n    DWORD cRead
5340: 65 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  ers);..#ifdef UN
5350: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
5360: 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 20  CardLocateCards 
5370: 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64   SCardLocateCard
5380: 73 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69  sW..#else..#defi
5390: 6e 65 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61  ne SCardLocateCa
53a0: 72 64 73 20 20 53 43 61 72 64 4c 6f 63 61 74 65  rds  SCardLocate
53b0: 43 61 72 64 73 41 0d 0a 23 65 6e 64 69 66 20 2f  CardsA..#endif /
53c0: 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 23 69  / !UNICODE....#i
53d0: 66 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f 4e  f (NTDDI_VERSION
53e0: 20 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58 50 29   >= NTDDI_WINXP)
53f0: 0d 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ..typedef struct
5400: 20 5f 53 43 41 52 44 5f 41 54 52 4d 41 53 4b 20   _SCARD_ATRMASK 
5410: 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  {..    DWORD    
5420: 20 20 20 63 62 41 74 72 3b 20 20 20 20 20 20 20     cbAtr;       
5430: 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20     // Number of 
5440: 62 79 74 65 73 20 69 6e 20 74 68 65 20 41 54 52  bytes in the ATR
5450: 20 61 6e 64 20 74 68 65 20 6d 61 73 6b 2e 0d 0a   and the mask...
5460: 20 20 20 20 42 59 54 45 20 20 20 20 20 20 20 20      BYTE        
5470: 72 67 62 41 74 72 5b 33 36 5d 3b 20 20 20 20 20  rgbAtr[36];     
5480: 2f 2f 20 41 74 72 20 6f 66 20 63 61 72 64 20 28  // Atr of card (
5490: 65 78 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20  extra alignment 
54a0: 62 79 74 65 73 29 0d 0a 20 20 20 20 42 59 54 45  bytes)..    BYTE
54b0: 20 20 20 20 20 20 20 20 72 67 62 4d 61 73 6b 5b          rgbMask[
54c0: 33 36 5d 3b 20 20 20 20 2f 2f 20 4d 61 73 6b 20  36];    // Mask 
54d0: 66 6f 72 20 74 68 65 20 41 74 72 20 28 65 78 74  for the Atr (ext
54e0: 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62 79 74  ra alignment byt
54f0: 65 73 29 0d 0a 7d 20 53 43 41 52 44 5f 41 54 52  es)..} SCARD_ATR
5500: 4d 41 53 4b 2c 20 2a 50 53 43 41 52 44 5f 41 54  MASK, *PSCARD_AT
5510: 52 4d 41 53 4b 2c 20 2a 4c 50 53 43 41 52 44 5f  RMASK, *LPSCARD_
5520: 41 54 52 4d 41 53 4b 3b 0d 0a 0d 0a 0d 0a 65 78  ATRMASK;......ex
5530: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
5540: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
5550: 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 79  ardLocateCardsBy
5560: 41 54 52 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20  ATRA(..    __in 
5570: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
5580: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f  hContext,..    _
5590: 5f 69 6e 20 20 20 20 4c 50 53 43 41 52 44 5f 41  _in    LPSCARD_A
55a0: 54 52 4d 41 53 4b 20 72 67 41 74 72 4d 61 73 6b  TRMASK rgAtrMask
55b0: 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20  s,..    __in    
55c0: 44 57 4f 52 44 20 63 41 74 72 73 2c 0d 0a 20 20  DWORD cAtrs,..  
55d0: 20 20 5f 5f 69 6e 6f 75 74 20 4c 50 53 43 41 52    __inout LPSCAR
55e0: 44 5f 52 45 41 44 45 52 53 54 41 54 45 41 20 72  D_READERSTATEA r
55f0: 67 52 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a  gReaderStates,..
5600: 20 20 20 20 5f 5f 69 6e 20 20 20 20 44 57 4f 52      __in    DWOR
5610: 44 20 63 52 65 61 64 65 72 73 29 3b 0d 0a 65 78  D cReaders);..ex
5620: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
5630: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
5640: 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 79  ardLocateCardsBy
5650: 41 54 52 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20  ATRW(..    __in 
5660: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
5670: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f  hContext,..    _
5680: 5f 69 6e 20 20 20 20 4c 50 53 43 41 52 44 5f 41  _in    LPSCARD_A
5690: 54 52 4d 41 53 4b 20 72 67 41 74 72 4d 61 73 6b  TRMASK rgAtrMask
56a0: 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20  s,..    __in    
56b0: 44 57 4f 52 44 20 63 41 74 72 73 2c 0d 0a 20 20  DWORD cAtrs,..  
56c0: 20 20 5f 5f 69 6e 6f 75 74 20 4c 50 53 43 41 52    __inout LPSCAR
56d0: 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20 72  D_READERSTATEW r
56e0: 67 52 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a  gReaderStates,..
56f0: 20 20 20 20 5f 5f 69 6e 20 20 20 20 44 57 4f 52      __in    DWOR
5700: 44 20 63 52 65 61 64 65 72 73 29 3b 0d 0a 23 69  D cReaders);..#i
5710: 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64  fdef UNICODE..#d
5720: 65 66 69 6e 65 20 53 43 61 72 64 4c 6f 63 61 74  efine SCardLocat
5730: 65 43 61 72 64 73 42 79 41 54 52 20 20 53 43 61  eCardsByATR  SCa
5740: 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 79 41  rdLocateCardsByA
5750: 54 52 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66  TRW..#else..#def
5760: 69 6e 65 20 53 43 61 72 64 4c 6f 63 61 74 65 43  ine SCardLocateC
5770: 61 72 64 73 42 79 41 54 52 20 20 53 43 61 72 64  ardsByATR  SCard
5780: 4c 6f 63 61 74 65 43 61 72 64 73 42 79 41 54 52  LocateCardsByATR
5790: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
57a0: 49 43 4f 44 45 0d 0a 23 65 6e 64 69 66 20 2f 2f  ICODE..#endif //
57b0: 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f 4e 20   (NTDDI_VERSION 
57c0: 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58 50 29 0d  >= NTDDI_WINXP).
57d0: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
57e0: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
57f0: 49 0d 0a 53 43 61 72 64 47 65 74 53 74 61 74 75  I..SCardGetStatu
5800: 73 43 68 61 6e 67 65 41 28 0d 0a 20 20 20 20 5f  sChangeA(..    _
5810: 5f 69 6e 20 20 20 20 53 43 41 52 44 43 4f 4e 54  _in    SCARDCONT
5820: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20  EXT hContext,.. 
5830: 20 20 20 5f 5f 69 6e 20 20 20 20 44 57 4f 52 44     __in    DWORD
5840: 20 64 77 54 69 6d 65 6f 75 74 2c 0d 0a 20 20 20   dwTimeout,..   
5850: 20 5f 5f 69 6e 6f 75 74 20 4c 50 53 43 41 52 44   __inout LPSCARD
5860: 5f 52 45 41 44 45 52 53 54 41 54 45 41 20 72 67  _READERSTATEA rg
5870: 52 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a 20  ReaderStates,.. 
5880: 20 20 20 5f 5f 69 6e 20 20 20 20 44 57 4f 52 44     __in    DWORD
5890: 20 63 52 65 61 64 65 72 73 29 3b 0d 0a 65 78 74   cReaders);..ext
58a0: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
58b0: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
58c0: 72 64 47 65 74 53 74 61 74 75 73 43 68 61 6e 67  rdGetStatusChang
58d0: 65 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  eW(..    __in   
58e0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
58f0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69  ontext,..    __i
5900: 6e 20 20 20 20 44 57 4f 52 44 20 64 77 54 69 6d  n    DWORD dwTim
5910: 65 6f 75 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f  eout,..    __ino
5920: 75 74 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45  ut LPSCARD_READE
5930: 52 53 54 41 54 45 57 20 72 67 52 65 61 64 65 72  RSTATEW rgReader
5940: 53 74 61 74 65 73 2c 0d 0a 20 20 20 20 5f 5f 69  States,..    __i
5950: 6e 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 64  n    DWORD cRead
5960: 65 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  ers);..#ifdef UN
5970: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
5980: 43 61 72 64 47 65 74 53 74 61 74 75 73 43 68 61  CardGetStatusCha
5990: 6e 67 65 20 20 53 43 61 72 64 47 65 74 53 74 61  nge  SCardGetSta
59a0: 74 75 73 43 68 61 6e 67 65 57 0d 0a 23 65 6c 73  tusChangeW..#els
59b0: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  e..#define SCard
59c0: 47 65 74 53 74 61 74 75 73 43 68 61 6e 67 65 20  GetStatusChange 
59d0: 20 53 43 61 72 64 47 65 74 53 74 61 74 75 73 43   SCardGetStatusC
59e0: 68 61 6e 67 65 41 0d 0a 23 65 6e 64 69 66 20 2f  hangeA..#endif /
59f0: 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78  / !UNICODE....ex
5a00: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
5a10: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
5a20: 61 72 64 43 61 6e 63 65 6c 28 0d 0a 20 20 20 20  ardCancel(..    
5a30: 5f 5f 69 6e 20 20 20 20 53 43 41 52 44 43 4f 4e  __in    SCARDCON
5a40: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 29 3b 0d  TEXT hContext);.
5a50: 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f  .....//..///////
5a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f  /////////..//../
5ab0: 2f 20 20 43 61 72 64 2f 52 65 61 64 65 72 20 43  /  Card/Reader C
5ac0: 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 53 65 72  ommunication Ser
5ad0: 76 69 63 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20  vices..//..//   
5ae0: 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     The following
5af0: 20 73 65 72 76 69 63 65 73 20 70 72 6f 76 69 64   services provid
5b00: 65 20 6d 65 61 6e 73 20 66 6f 72 20 63 6f 6d 6d  e means for comm
5b10: 75 6e 69 63 61 74 69 6f 6e 20 77 69 74 68 20 74  unication with t
5b20: 68 65 20 63 61 72 64 2e 0d 0a 2f 2f 0d 0a 0d 0a  he card...//....
5b30: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 48  #define SCARD_SH
5b40: 41 52 45 5f 45 58 43 4c 55 53 49 56 45 20 31 20  ARE_EXCLUSIVE 1 
5b50: 2f 2f 20 54 68 69 73 20 61 70 70 6c 69 63 61 74  // This applicat
5b60: 69 6f 6e 20 69 73 20 6e 6f 74 20 77 69 6c 6c 69  ion is not willi
5b70: 6e 67 20 74 6f 20 73 68 61 72 65 20 74 68 69 73  ng to share this
5b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ba0: 20 20 2f 2f 20 63 61 72 64 20 77 69 74 68 20 6f    // card with o
5bb0: 74 68 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e  ther application
5bc0: 73 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  s...#define SCAR
5bd0: 44 5f 53 48 41 52 45 5f 53 48 41 52 45 44 20 20  D_SHARE_SHARED  
5be0: 20 20 32 20 2f 2f 20 54 68 69 73 20 61 70 70 6c    2 // This appl
5bf0: 69 63 61 74 69 6f 6e 20 69 73 20 77 69 6c 6c 69  ication is willi
5c00: 6e 67 20 74 6f 20 73 68 61 72 65 20 74 68 69 73  ng to share this
5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c30: 20 20 2f 2f 20 63 61 72 64 20 77 69 74 68 20 6f    // card with o
5c40: 74 68 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e  ther application
5c50: 73 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  s...#define SCAR
5c60: 44 5f 53 48 41 52 45 5f 44 49 52 45 43 54 20 20  D_SHARE_DIRECT  
5c70: 20 20 33 20 2f 2f 20 54 68 69 73 20 61 70 70 6c    3 // This appl
5c80: 69 63 61 74 69 6f 6e 20 64 65 6d 61 6e 64 73 20  ication demands 
5c90: 64 69 72 65 63 74 20 63 6f 6e 74 72 6f 6c 20 6f  direct control o
5ca0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
5cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cc0: 20 20 20 2f 2f 20 74 68 65 20 72 65 61 64 65 72     // the reader
5cd0: 2c 20 73 6f 20 69 74 20 69 73 20 6e 6f 74 20 61  , so it is not a
5ce0: 76 61 69 6c 61 62 6c 65 20 74 6f 20 6f 74 68 65  vailable to othe
5cf0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d10: 20 20 20 2f 2f 20 61 70 70 6c 69 63 61 74 69 6f     // applicatio
5d20: 6e 73 2e 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53  ns.....#define S
5d30: 43 41 52 44 5f 4c 45 41 56 45 5f 43 41 52 44 20  CARD_LEAVE_CARD 
5d40: 20 20 20 20 20 30 20 2f 2f 20 44 6f 6e 27 74 20       0 // Don't 
5d50: 64 6f 20 61 6e 79 74 68 69 6e 67 20 73 70 65 63  do anything spec
5d60: 69 61 6c 20 6f 6e 20 63 6c 6f 73 65 0d 0a 23 64  ial on close..#d
5d70: 65 66 69 6e 65 20 53 43 41 52 44 5f 52 45 53 45  efine SCARD_RESE
5d80: 54 5f 43 41 52 44 20 20 20 20 20 20 31 20 2f 2f  T_CARD      1 //
5d90: 20 52 65 73 65 74 20 74 68 65 20 63 61 72 64 20   Reset the card 
5da0: 6f 6e 20 63 6c 6f 73 65 0d 0a 23 64 65 66 69 6e  on close..#defin
5db0: 65 20 53 43 41 52 44 5f 55 4e 50 4f 57 45 52 5f  e SCARD_UNPOWER_
5dc0: 43 41 52 44 20 20 20 20 32 20 2f 2f 20 50 6f 77  CARD    2 // Pow
5dd0: 65 72 20 64 6f 77 6e 20 74 68 65 20 63 61 72 64  er down the card
5de0: 20 6f 6e 20 63 6c 6f 73 65 0d 0a 23 64 65 66 69   on close..#defi
5df0: 6e 65 20 53 43 41 52 44 5f 45 4a 45 43 54 5f 43  ne SCARD_EJECT_C
5e00: 41 52 44 20 20 20 20 20 20 33 20 2f 2f 20 45 6a  ARD      3 // Ej
5e10: 65 63 74 20 74 68 65 20 63 61 72 64 20 6f 6e 20  ect the card on 
5e20: 63 6c 6f 73 65 0d 0a 0d 0a 65 78 74 65 72 6e 20  close....extern 
5e30: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
5e40: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 43 6f   WINAPI..SCardCo
5e50: 6e 6e 65 63 74 41 28 0d 0a 20 20 20 20 5f 5f 69  nnectA(..    __i
5e60: 6e 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58  n    SCARDCONTEX
5e70: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
5e80: 20 5f 5f 69 6e 20 20 20 20 4c 50 43 53 54 52 20   __in    LPCSTR 
5e90: 73 7a 52 65 61 64 65 72 2c 0d 0a 20 20 20 20 5f  szReader,..    _
5ea0: 5f 69 6e 20 20 20 20 44 57 4f 52 44 20 64 77 53  _in    DWORD dwS
5eb0: 68 61 72 65 4d 6f 64 65 2c 0d 0a 20 20 20 20 5f  hareMode,..    _
5ec0: 5f 69 6e 20 20 20 20 44 57 4f 52 44 20 64 77 50  _in    DWORD dwP
5ed0: 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f 6c  referredProtocol
5ee0: 73 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 20 20 20  s,..    __out   
5ef0: 4c 50 53 43 41 52 44 48 41 4e 44 4c 45 20 70 68  LPSCARDHANDLE ph
5f00: 43 61 72 64 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74  Card,..    __out
5f10: 20 20 20 4c 50 44 57 4f 52 44 20 70 64 77 41 63     LPDWORD pdwAc
5f20: 74 69 76 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d 0a  tiveProtocol);..
5f30: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
5f40: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
5f50: 53 43 61 72 64 43 6f 6e 6e 65 63 74 57 28 0d 0a  SCardConnectW(..
5f60: 20 20 20 20 5f 5f 69 6e 20 20 20 20 53 43 41 52      __in    SCAR
5f70: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78  DCONTEXT hContex
5f80: 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20  t,..    __in    
5f90: 4c 50 43 57 53 54 52 20 73 7a 52 65 61 64 65 72  LPCWSTR szReader
5fa0: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 44  ,..    __in    D
5fb0: 57 4f 52 44 20 64 77 53 68 61 72 65 4d 6f 64 65  WORD dwShareMode
5fc0: 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 44  ,..    __in    D
5fd0: 57 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 64  WORD dwPreferred
5fe0: 50 72 6f 74 6f 63 6f 6c 73 2c 0d 0a 20 20 20 20  Protocols,..    
5ff0: 5f 5f 6f 75 74 20 20 20 4c 50 53 43 41 52 44 48  __out   LPSCARDH
6000: 41 4e 44 4c 45 20 70 68 43 61 72 64 2c 0d 0a 20  ANDLE phCard,.. 
6010: 20 20 20 5f 5f 6f 75 74 20 20 20 4c 50 44 57 4f     __out   LPDWO
6020: 52 44 20 70 64 77 41 63 74 69 76 65 50 72 6f 74  RD pdwActiveProt
6030: 6f 63 6f 6c 29 3b 0d 0a 23 69 66 64 65 66 20 55  ocol);..#ifdef U
6040: 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20  NICODE..#define 
6050: 53 43 61 72 64 43 6f 6e 6e 65 63 74 20 20 53 43  SCardConnect  SC
6060: 61 72 64 43 6f 6e 6e 65 63 74 57 0d 0a 23 65 6c  ardConnectW..#el
6070: 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  se..#define SCar
6080: 64 43 6f 6e 6e 65 63 74 20 20 53 43 61 72 64 43  dConnect  SCardC
6090: 6f 6e 6e 65 63 74 41 0d 0a 23 65 6e 64 69 66 20  onnectA..#endif 
60a0: 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65  // !UNICODE....e
60b0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50  xtern WINSCARDAP
60c0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53  I LONG WINAPI..S
60d0: 43 61 72 64 52 65 63 6f 6e 6e 65 63 74 28 0d 0a  CardReconnect(..
60e0: 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20 53 43      __in      SC
60f0: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c  ARDHANDLE hCard,
6100: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20  ..    __in      
6110: 44 57 4f 52 44 20 64 77 53 68 61 72 65 4d 6f 64  DWORD dwShareMod
6120: 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20  e,..    __in    
6130: 20 20 44 57 4f 52 44 20 64 77 50 72 65 66 65 72    DWORD dwPrefer
6140: 72 65 64 50 72 6f 74 6f 63 6f 6c 73 2c 0d 0a 20  redProtocols,.. 
6150: 20 20 20 5f 5f 69 6e 20 20 20 20 20 20 44 57 4f     __in      DWO
6160: 52 44 20 64 77 49 6e 69 74 69 61 6c 69 7a 61 74  RD dwInitializat
6170: 69 6f 6e 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 5f  ion,..    __out_
6180: 6f 70 74 20 4c 50 44 57 4f 52 44 20 70 64 77 41  opt LPDWORD pdwA
6190: 63 74 69 76 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d  ctiveProtocol);.
61a0: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
61b0: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
61c0: 49 0d 0a 53 43 61 72 64 44 69 73 63 6f 6e 6e 65  I..SCardDisconne
61d0: 63 74 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  ct(..    __in   
61e0: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61   SCARDHANDLE hCa
61f0: 72 64 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  rd,..    __in   
6200: 20 44 57 4f 52 44 20 64 77 44 69 73 70 6f 73 69   DWORD dwDisposi
6210: 74 69 6f 6e 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e  tion);....extern
6220: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
6230: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 42  G WINAPI..SCardB
6240: 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
6250: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 53 43  ..    __in    SC
6260: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 29  ARDHANDLE hCard)
6270: 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  ;....extern WINS
6280: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
6290: 41 50 49 0d 0a 53 43 61 72 64 45 6e 64 54 72 61  API..SCardEndTra
62a0: 6e 73 61 63 74 69 6f 6e 28 0d 0a 20 20 20 20 5f  nsaction(..    _
62b0: 5f 69 6e 20 20 20 20 53 43 41 52 44 48 41 4e 44  _in    SCARDHAND
62c0: 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 20 5f  LE hCard,..    _
62d0: 5f 69 6e 20 20 20 20 44 57 4f 52 44 20 64 77 44  _in    DWORD dwD
62e0: 69 73 70 6f 73 69 74 69 6f 6e 29 3b 0d 0a 0d 0a  isposition);....
62f0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
6300: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
6310: 53 43 61 72 64 43 61 6e 63 65 6c 54 72 61 6e 73  SCardCancelTrans
6320: 61 63 74 69 6f 6e 28 0d 0a 20 20 20 20 5f 5f 69  action(..    __i
6330: 6e 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45  n    SCARDHANDLE
6340: 20 68 43 61 72 64 29 3b 0d 0a 2f 2f 0d 0a 2f 2f   hCard);..//..//
6350: 20 4e 4f 54 45 3a 20 20 20 20 54 68 69 73 20 63   NOTE:    This c
6360: 61 6c 6c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  all corresponds 
6370: 74 6f 20 74 68 65 20 50 43 2f 53 43 20 53 43 41  to the PC/SC SCA
6380: 52 44 43 4f 4d 4d 3a 3a 43 61 6e 63 65 6c 20 72  RDCOMM::Cancel r
6390: 6f 75 74 69 6e 65 2c 0d 0a 2f 2f 20 20 20 20 20  outine,..//     
63a0: 20 20 20 20 20 74 65 72 6d 69 6e 61 74 69 6e 67       terminating
63b0: 20 61 20 62 6c 6f 63 6b 65 64 20 53 43 61 72 64   a blocked SCard
63c0: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
63d0: 20 73 65 72 76 69 63 65 2e 0d 0a 2f 2f 0d 0a 0d   service...//...
63e0: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
63f0: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
6400: 49 0d 0a 53 43 61 72 64 53 74 61 74 65 28 0d 0a  I..SCardState(..
6410: 20 20 20 20 5f 5f 69 6e 20 20 20 20 53 43 41 52      __in    SCAR
6420: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a  DHANDLE hCard,..
6430: 20 20 20 20 5f 5f 6f 75 74 20 20 20 4c 50 44 57      __out   LPDW
6440: 4f 52 44 20 70 64 77 53 74 61 74 65 2c 0d 0a 20  ORD pdwState,.. 
6450: 20 20 20 5f 5f 6f 75 74 20 20 20 4c 50 44 57 4f     __out   LPDWO
6460: 52 44 20 70 64 77 50 72 6f 74 6f 63 6f 6c 2c 0d  RD pdwProtocol,.
6470: 0a 20 20 20 20 5f 5f 6f 75 74 5f 62 63 6f 75 6e  .    __out_bcoun
6480: 74 28 2a 70 63 62 41 74 72 4c 65 6e 29 20 20 20  t(*pcbAtrLen)   
6490: 4c 50 42 59 54 45 20 70 62 41 74 72 2c 0d 0a 20  LPBYTE pbAtr,.. 
64a0: 20 20 20 5f 5f 69 6e 6f 75 74 20 4c 50 44 57 4f     __inout LPDWO
64b0: 52 44 20 70 63 62 41 74 72 4c 65 6e 29 3b 0d 0a  RD pcbAtrLen);..
64c0: 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20 20  //..// NOTE:    
64d0: 53 43 61 72 64 53 74 61 74 65 20 69 73 20 61 6e  SCardState is an
64e0: 20 6f 62 73 6f 6c 65 74 65 20 72 6f 75 74 69 6e   obsolete routin
64f0: 65 2e 20 20 50 43 2f 53 43 20 68 61 73 20 72 65  e.  PC/SC has re
6500: 70 6c 61 63 65 64 20 69 74 20 77 69 74 68 0d 0a  placed it with..
6510: 2f 2f 20 20 20 20 20 20 20 20 20 20 53 43 61 72  //          SCar
6520: 64 53 74 61 74 75 73 2e 0d 0a 2f 2f 0d 0a 0d 0a  dStatus...//....
6530: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
6540: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
6550: 53 43 61 72 64 53 74 61 74 75 73 41 28 0d 0a 20  SCardStatusA(.. 
6560: 20 20 20 5f 5f 69 6e 20 20 20 20 20 20 20 20 53     __in        S
6570: 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64  CARDHANDLE hCard
6580: 2c 0d 0a 20 20 20 20 5f 5f 6e 75 6c 6c 6e 75 6c  ,..    __nullnul
6590: 6c 74 65 72 6d 69 6e 61 74 65 64 20 5f 5f 6f 75  lterminated __ou
65a0: 74 5f 65 63 6f 75 6e 74 5f 6f 70 74 28 2a 70 63  t_ecount_opt(*pc
65b0: 63 68 52 65 61 64 65 72 4c 65 6e 29 20 4c 50 53  chReaderLen) LPS
65c0: 54 52 20 6d 73 7a 52 65 61 64 65 72 4e 61 6d 65  TR mszReaderName
65d0: 73 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75 74 5f  s,..    __inout_
65e0: 6f 70 74 20 4c 50 44 57 4f 52 44 20 70 63 63 68  opt LPDWORD pcch
65f0: 52 65 61 64 65 72 4c 65 6e 2c 0d 0a 20 20 20 20  ReaderLen,..    
6600: 5f 5f 6f 75 74 5f 6f 70 74 20 20 20 4c 50 44 57  __out_opt   LPDW
6610: 4f 52 44 20 70 64 77 53 74 61 74 65 2c 0d 0a 20  ORD pdwState,.. 
6620: 20 20 20 5f 5f 6f 75 74 5f 6f 70 74 20 20 20 4c     __out_opt   L
6630: 50 44 57 4f 52 44 20 70 64 77 50 72 6f 74 6f 63  PDWORD pdwProtoc
6640: 6f 6c 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 5f 65  ol,..    __out_e
6650: 63 6f 75 6e 74 5f 6f 70 74 28 2a 70 63 62 41 74  count_opt(*pcbAt
6660: 72 4c 65 6e 29 20 4c 50 42 59 54 45 20 70 62 41  rLen) LPBYTE pbA
6670: 74 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75 74  tr,..    __inout
6680: 5f 6f 70 74 20 4c 50 44 57 4f 52 44 20 70 63 62  _opt LPDWORD pcb
6690: 41 74 72 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e  AtrLen);..extern
66a0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
66b0: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 53  G WINAPI..SCardS
66c0: 74 61 74 75 73 57 28 0d 0a 20 20 20 20 5f 5f 69  tatusW(..    __i
66d0: 6e 20 20 20 20 20 20 20 20 53 43 41 52 44 48 41  n        SCARDHA
66e0: 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20  NDLE hCard,..   
66f0: 20 5f 5f 6e 75 6c 6c 6e 75 6c 6c 74 65 72 6d 69   __nullnulltermi
6700: 6e 61 74 65 64 20 5f 5f 6f 75 74 5f 65 63 6f 75  nated __out_ecou
6710: 6e 74 5f 6f 70 74 28 2a 70 63 63 68 52 65 61 64  nt_opt(*pcchRead
6720: 65 72 4c 65 6e 29 20 4c 50 57 53 54 52 20 6d 73  erLen) LPWSTR ms
6730: 7a 52 65 61 64 65 72 4e 61 6d 65 73 2c 0d 0a 20  zReaderNames,.. 
6740: 20 20 20 5f 5f 69 6e 6f 75 74 5f 6f 70 74 20 4c     __inout_opt L
6750: 50 44 57 4f 52 44 20 70 63 63 68 52 65 61 64 65  PDWORD pcchReade
6760: 72 4c 65 6e 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74  rLen,..    __out
6770: 5f 6f 70 74 20 20 20 4c 50 44 57 4f 52 44 20 70  _opt   LPDWORD p
6780: 64 77 53 74 61 74 65 2c 0d 0a 20 20 20 20 5f 5f  dwState,..    __
6790: 6f 75 74 5f 6f 70 74 20 20 20 4c 50 44 57 4f 52  out_opt   LPDWOR
67a0: 44 20 70 64 77 50 72 6f 74 6f 63 6f 6c 2c 0d 0a  D pdwProtocol,..
67b0: 20 20 20 20 5f 5f 6f 75 74 5f 65 63 6f 75 6e 74      __out_ecount
67c0: 5f 6f 70 74 28 2a 70 63 62 41 74 72 4c 65 6e 29  _opt(*pcbAtrLen)
67d0: 20 4c 50 42 59 54 45 20 70 62 41 74 72 2c 0d 0a   LPBYTE pbAtr,..
67e0: 20 20 20 20 5f 5f 69 6e 6f 75 74 5f 6f 70 74 20      __inout_opt 
67f0: 4c 50 44 57 4f 52 44 20 70 63 62 41 74 72 4c 65  LPDWORD pcbAtrLe
6800: 6e 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43  n);..#ifdef UNIC
6810: 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  ODE..#define SCa
6820: 72 64 53 74 61 74 75 73 20 20 53 43 61 72 64 53  rdStatus  SCardS
6830: 74 61 74 75 73 57 0d 0a 23 65 6c 73 65 0d 0a 23  tatusW..#else..#
6840: 64 65 66 69 6e 65 20 53 43 61 72 64 53 74 61 74  define SCardStat
6850: 75 73 20 20 53 43 61 72 64 53 74 61 74 75 73 41  us  SCardStatusA
6860: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49  ..#endif // !UNI
6870: 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57  CODE....extern W
6880: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
6890: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 54 72 61  WINAPI..SCardTra
68a0: 6e 73 6d 69 74 28 0d 0a 20 20 20 20 5f 5f 69 6e  nsmit(..    __in
68b0: 20 20 20 20 20 20 20 20 53 43 41 52 44 48 41 4e          SCARDHAN
68c0: 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 20  DLE hCard,..    
68d0: 5f 5f 69 6e 20 20 20 20 20 20 20 20 4c 50 43 53  __in        LPCS
68e0: 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 20  CARD_IO_REQUEST 
68f0: 70 69 6f 53 65 6e 64 50 63 69 2c 0d 0a 20 20 20  pioSendPci,..   
6900: 20 5f 5f 69 6e 5f 62 63 6f 75 6e 74 28 63 62 53   __in_bcount(cbS
6910: 65 6e 64 4c 65 6e 67 74 68 29 20 4c 50 43 42 59  endLength) LPCBY
6920: 54 45 20 70 62 53 65 6e 64 42 75 66 66 65 72 2c  TE pbSendBuffer,
6930: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20 20 20 20  ..    __in      
6940: 20 20 44 57 4f 52 44 20 63 62 53 65 6e 64 4c 65    DWORD cbSendLe
6950: 6e 67 74 68 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f  ngth,..    __ino
6960: 75 74 5f 6f 70 74 20 4c 50 53 43 41 52 44 5f 49  ut_opt LPSCARD_I
6970: 4f 5f 52 45 51 55 45 53 54 20 70 69 6f 52 65 63  O_REQUEST pioRec
6980: 76 50 63 69 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74  vPci,..    __out
6990: 5f 62 63 6f 75 6e 74 28 2a 70 63 62 52 65 63 76  _bcount(*pcbRecv
69a0: 4c 65 6e 67 74 68 29 20 4c 50 42 59 54 45 20 70  Length) LPBYTE p
69b0: 62 52 65 63 76 42 75 66 66 65 72 2c 0d 0a 20 20  bRecvBuffer,..  
69c0: 20 20 5f 5f 69 6e 6f 75 74 20 20 20 20 20 4c 50    __inout     LP
69d0: 44 57 4f 52 44 20 70 63 62 52 65 63 76 4c 65 6e  DWORD pcbRecvLen
69e0: 67 74 68 29 3b 0d 0a 0d 0a 23 69 66 20 28 4e 54  gth);....#if (NT
69f0: 44 44 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e  DDI_VERSION >= N
6a00: 54 44 44 49 5f 56 49 53 54 41 29 0d 0a 65 78 74  TDDI_VISTA)..ext
6a10: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
6a20: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
6a30: 72 64 47 65 74 54 72 61 6e 73 6d 69 74 43 6f 75  rdGetTransmitCou
6a40: 6e 74 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43  nt(..    __in SC
6a50: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c  ARDHANDLE hCard,
6a60: 0d 0a 20 20 20 20 5f 5f 6f 75 74 20 4c 50 44 57  ..    __out LPDW
6a70: 4f 52 44 20 70 63 54 72 61 6e 73 6d 69 74 43 6f  ORD pcTransmitCo
6a80: 75 6e 74 29 3b 0d 0a 23 65 6e 64 69 66 20 2f 2f  unt);..#endif //
6a90: 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f 4e 20   (NTDDI_VERSION 
6aa0: 3e 3d 20 4e 54 44 44 49 5f 56 49 53 54 41 29 0d  >= NTDDI_VISTA).
6ab0: 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...//../////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b00: 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20  ///////..//..// 
6b10: 20 52 65 61 64 65 72 20 43 6f 6e 74 72 6f 6c 20   Reader Control 
6b20: 52 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a 2f 2f  Routines..//..//
6b30: 20 20 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77        The follow
6b40: 69 6e 67 20 73 65 72 76 69 63 65 73 20 70 72 6f  ing services pro
6b50: 76 69 64 65 20 66 6f 72 20 64 69 72 65 63 74 2c  vide for direct,
6b60: 20 6c 6f 77 2d 6c 65 76 65 6c 20 6d 61 6e 69 70   low-level manip
6b70: 75 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a  ulation of the..
6b80: 2f 2f 20 20 20 20 20 20 72 65 61 64 65 72 20 62  //      reader b
6b90: 79 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 61 70  y the calling ap
6ba0: 70 6c 69 63 61 74 69 6f 6e 20 61 6c 6c 6f 77 69  plication allowi
6bb0: 6e 67 20 69 74 20 63 6f 6e 74 72 6f 6c 20 6f 76  ng it control ov
6bc0: 65 72 20 74 68 65 0d 0a 2f 2f 20 20 20 20 20 20  er the..//      
6bd0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68  attributes of th
6be0: 65 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 73  e communications
6bf0: 20 77 69 74 68 20 74 68 65 20 63 61 72 64 2e 0d   with the card..
6c00: 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49  .//....extern WI
6c10: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
6c20: 49 4e 41 50 49 0d 0a 53 43 61 72 64 43 6f 6e 74  INAPI..SCardCont
6c30: 72 6f 6c 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20  rol(..    __in  
6c40: 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43    SCARDHANDLE hC
6c50: 61 72 64 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20  ard,..    __in  
6c60: 20 20 44 57 4f 52 44 20 64 77 43 6f 6e 74 72 6f    DWORD dwContro
6c70: 6c 43 6f 64 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e  lCode,..    __in
6c80: 5f 62 63 6f 75 6e 74 28 63 62 49 6e 42 75 66 66  _bcount(cbInBuff
6c90: 65 72 53 69 7a 65 29 20 4c 50 43 56 4f 49 44 20  erSize) LPCVOID 
6ca0: 6c 70 49 6e 42 75 66 66 65 72 2c 0d 0a 20 20 20  lpInBuffer,..   
6cb0: 20 5f 5f 69 6e 20 20 20 20 44 57 4f 52 44 20 63   __in    DWORD c
6cc0: 62 49 6e 42 75 66 66 65 72 53 69 7a 65 2c 0d 0a  bInBufferSize,..
6cd0: 20 20 20 20 5f 5f 6f 75 74 5f 62 63 6f 75 6e 74      __out_bcount
6ce0: 28 63 62 4f 75 74 42 75 66 66 65 72 53 69 7a 65  (cbOutBufferSize
6cf0: 29 20 4c 50 56 4f 49 44 20 6c 70 4f 75 74 42 75  ) LPVOID lpOutBu
6d00: 66 66 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20  ffer,..    __in 
6d10: 20 20 20 44 57 4f 52 44 20 63 62 4f 75 74 42 75     DWORD cbOutBu
6d20: 66 66 65 72 53 69 7a 65 2c 0d 0a 20 20 20 20 5f  fferSize,..    _
6d30: 5f 6f 75 74 20 20 20 4c 50 44 57 4f 52 44 20 6c  _out   LPDWORD l
6d40: 70 42 79 74 65 73 52 65 74 75 72 6e 65 64 29 3b  pBytesReturned);
6d50: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43  ....extern WINSC
6d60: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41  ARDAPI LONG WINA
6d70: 50 49 0d 0a 53 43 61 72 64 47 65 74 41 74 74 72  PI..SCardGetAttr
6d80: 69 62 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  ib(..    __in   
6d90: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61   SCARDHANDLE hCa
6da0: 72 64 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 20  rd,..    __in   
6db0: 20 44 57 4f 52 44 20 64 77 41 74 74 72 49 64 2c   DWORD dwAttrId,
6dc0: 0d 0a 20 20 20 20 5f 5f 6f 75 74 5f 62 63 6f 75  ..    __out_bcou
6dd0: 6e 74 5f 6f 70 74 28 2a 70 63 62 41 74 74 72 4c  nt_opt(*pcbAttrL
6de0: 65 6e 29 20 4c 50 42 59 54 45 20 70 62 41 74 74  en) LPBYTE pbAtt
6df0: 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 6f 75 74 20  r,..    __inout 
6e00: 4c 50 44 57 4f 52 44 20 70 63 62 41 74 74 72 4c  LPDWORD pcbAttrL
6e10: 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54  en);..//..// NOT
6e20: 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69 6e  E:    The routin
6e30: 65 20 53 43 61 72 64 47 65 74 41 74 74 72 69 62  e SCardGetAttrib
6e40: 27 73 20 6e 61 6d 65 20 64 69 66 66 65 72 73 20  's name differs 
6e50: 66 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 64  from the PC/SC d
6e60: 65 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f 2f 20 20  efinition...//  
6e70: 20 20 20 20 20 20 20 20 49 74 20 73 68 6f 75 6c          It shoul
6e80: 64 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20  d be:..//..//   
6e90: 20 20 20 20 20 20 20 20 20 20 20 65 78 74 65 72             exter
6ea0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
6eb0: 4e 47 20 57 49 4e 41 50 49 0d 0a 2f 2f 20 20 20  NG WINAPI..//   
6ec0: 20 20 20 20 20 20 20 20 20 20 20 53 43 61 72 64             SCard
6ed0: 47 65 74 52 65 61 64 65 72 43 61 70 61 62 69 6c  GetReaderCapabil
6ee0: 69 74 69 65 73 28 0d 0a 2f 2f 20 20 20 20 20 20  ities(..//      
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 5f 69 6e              __in
6f00: 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20      SCARDHANDLE 
6f10: 68 43 61 72 64 2c 0d 0a 2f 2f 20 20 20 20 20 20  hCard,..//      
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 5f 5f 69 6e              __in
6f30: 20 20 20 20 44 57 4f 52 44 20 64 77 54 61 67 2c      DWORD dwTag,
6f40: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
6f50: 20 20 20 20 20 20 5f 5f 6f 75 74 20 20 20 4c 50        __out   LP
6f60: 42 59 54 45 20 70 62 41 74 74 72 2c 0d 0a 2f 2f  BYTE pbAttr,..//
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f80: 20 20 5f 5f 69 6e 6f 75 74 20 4c 50 44 57 4f 52    __inout LPDWOR
6f90: 44 20 70 63 62 41 74 74 72 4c 65 6e 29 3b 0d 0a  D pcbAttrLen);..
6fa0: 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  //..//          
6fb0: 48 65 72 65 27 73 20 61 20 77 6f 72 6b 2d 61 72  Here's a work-ar
6fc0: 6f 75 6e 64 20 4d 41 43 52 4f 3a 0d 0a 23 64 65  ound MACRO:..#de
6fd0: 66 69 6e 65 20 53 43 61 72 64 47 65 74 52 65 61  fine SCardGetRea
6fe0: 64 65 72 43 61 70 61 62 69 6c 69 74 69 65 73 20  derCapabilities 
6ff0: 53 43 61 72 64 47 65 74 41 74 74 72 69 62 0d 0a  SCardGetAttrib..
7000: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
7010: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
7020: 0d 0a 53 43 61 72 64 53 65 74 41 74 74 72 69 62  ..SCardSetAttrib
7030: 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43 41 52  (..    __in SCAR
7040: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a  DHANDLE hCard,..
7050: 20 20 20 20 5f 5f 69 6e 20 44 57 4f 52 44 20 64      __in DWORD d
7060: 77 41 74 74 72 49 64 2c 0d 0a 20 20 20 20 5f 5f  wAttrId,..    __
7070: 69 6e 5f 62 63 6f 75 6e 74 28 63 62 41 74 74 72  in_bcount(cbAttr
7080: 4c 65 6e 29 20 4c 50 43 42 59 54 45 20 70 62 41  Len) LPCBYTE pbA
7090: 74 74 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 44  ttr,..    __in D
70a0: 57 4f 52 44 20 63 62 41 74 74 72 4c 65 6e 29 3b  WORD cbAttrLen);
70b0: 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20  ..//..// NOTE:  
70c0: 20 20 54 68 65 20 72 6f 75 74 69 6e 65 20 53 43    The routine SC
70d0: 61 72 64 53 65 74 41 74 74 72 69 62 27 73 20 6e  ardSetAttrib's n
70e0: 61 6d 65 20 64 69 66 66 65 72 73 20 66 72 6f 6d  ame differs from
70f0: 20 74 68 65 20 50 43 2f 53 43 20 64 65 66 69 6e   the PC/SC defin
7100: 69 74 69 6f 6e 2e 0d 0a 2f 2f 20 20 20 20 20 20  ition...//      
7110: 20 20 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65      It should be
7120: 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 20  :..//..//       
7130: 20 20 20 20 20 20 20 65 78 74 65 72 6e 20 57 49         extern WI
7140: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
7150: 49 4e 41 50 49 0d 0a 2f 2f 20 20 20 20 20 20 20  INAPI..//       
7160: 20 20 20 20 20 20 20 53 43 61 72 64 53 65 74 52         SCardSetR
7170: 65 61 64 65 72 43 61 70 61 62 69 6c 69 74 69 65  eaderCapabilitie
7180: 73 28 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  s(..//          
7190: 20 20 20 20 20 20 20 20 5f 5f 69 6e 20 20 20 20          __in    
71a0: 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72  SCARDHANDLE hCar
71b0: 64 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  d,..//          
71c0: 20 20 20 20 20 20 20 20 5f 5f 69 6e 20 20 20 20          __in    
71d0: 44 57 4f 52 44 20 64 77 54 61 67 2c 0d 0a 2f 2f  DWORD dwTag,..//
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71f0: 20 20 5f 5f 69 6e 20 20 20 20 4c 50 43 42 59 54    __in    LPCBYT
7200: 45 20 70 62 41 74 74 72 2c 0d 0a 2f 2f 20 20 20  E pbAttr,..//   
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
7220: 5f 69 6e 20 20 20 20 44 57 4f 52 44 20 63 62 41  _in    DWORD cbA
7230: 74 74 72 4c 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f  ttrLen);..//..//
7240: 20 20 20 20 20 20 20 20 20 20 48 65 72 65 27 73            Here's
7250: 20 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d   a work-around M
7260: 41 43 52 4f 3a 0d 0a 23 64 65 66 69 6e 65 20 53  ACRO:..#define S
7270: 43 61 72 64 53 65 74 52 65 61 64 65 72 43 61 70  CardSetReaderCap
7280: 61 62 69 6c 69 74 69 65 73 20 53 43 61 72 64 53  abilities SCardS
7290: 65 74 41 74 74 72 69 62 0d 0a 0d 0a 0d 0a 2f 2f  etAttrib......//
72a0: 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..//////////////
72b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 20 53 6d 61 72  //..//..//  Smar
7300: 74 20 43 61 72 64 20 44 69 61 6c 6f 67 20 64 65  t Card Dialog de
7310: 66 69 6e 69 74 69 6f 6e 73 0d 0a 2f 2f 0d 0a 2f  finitions..//../
7320: 2f 20 20 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f  /      The follo
7330: 77 69 6e 67 20 73 65 63 74 69 6f 6e 20 63 6f 6e  wing section con
7340: 74 61 69 6e 73 20 73 74 72 75 63 74 75 72 65 73  tains structures
7350: 20 61 6e 64 20 20 65 78 70 6f 72 74 65 64 20 66   and  exported f
7360: 75 6e 63 74 69 6f 6e 0d 0a 2f 2f 20 20 20 20 20  unction..//     
7370: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   declarations fo
7380: 72 20 74 68 65 20 53 6d 61 72 74 20 43 61 72 64  r the Smart Card
7390: 20 43 6f 6d 6d 6f 6e 20 44 69 61 6c 6f 67 20 64   Common Dialog d
73a0: 69 61 6c 6f 67 2e 0d 0a 2f 2f 0d 0a 0d 0a 2f 2f  ialog...//....//
73b0: 20 44 65 66 69 6e 65 64 20 63 6f 6e 73 74 61 6e   Defined constan
73c0: 74 73 0d 0a 2f 2f 20 46 6c 61 67 73 0d 0a 23 64  ts..// Flags..#d
73d0: 65 66 69 6e 65 20 53 43 5f 44 4c 47 5f 4d 49 4e  efine SC_DLG_MIN
73e0: 49 4d 41 4c 5f 55 49 20 20 20 20 20 20 20 30 78  IMAL_UI       0x
73f0: 30 31 0d 0a 23 64 65 66 69 6e 65 20 53 43 5f 44  01..#define SC_D
7400: 4c 47 5f 4e 4f 5f 55 49 20 20 20 20 20 20 20 20  LG_NO_UI        
7410: 20 20 20 20 30 78 30 32 0d 0a 23 64 65 66 69 6e      0x02..#defin
7420: 65 20 53 43 5f 44 4c 47 5f 46 4f 52 43 45 5f 55  e SC_DLG_FORCE_U
7430: 49 20 20 20 20 20 20 20 20 20 30 78 30 34 0d 0a  I         0x04..
7440: 0d 0a 23 64 65 66 69 6e 65 20 53 43 45 52 52 5f  ..#define SCERR_
7450: 4e 4f 43 41 52 44 4e 41 4d 45 20 20 20 20 20 20  NOCARDNAME      
7460: 20 20 30 78 34 30 30 30 0d 0a 23 64 65 66 69 6e    0x4000..#defin
7470: 65 20 53 43 45 52 52 5f 4e 4f 47 55 49 44 53 20  e SCERR_NOGUIDS 
7480: 20 20 20 20 20 20 20 20 20 20 30 78 38 30 30 30            0x8000
7490: 0d 0a 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52  ....typedef SCAR
74a0: 44 48 41 4e 44 4c 45 20 28 57 49 4e 41 50 49 20  DHANDLE (WINAPI 
74b0: 2a 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 29  *LPOCNCONNPROCA)
74c0: 20 28 5f 5f 69 6e 20 53 43 41 52 44 43 4f 4e 54   (__in SCARDCONT
74d0: 45 58 54 2c 20 5f 5f 69 6e 20 4c 50 53 54 52 2c  EXT, __in LPSTR,
74e0: 20 5f 5f 69 6e 20 4c 50 53 54 52 2c 20 5f 5f 69   __in LPSTR, __i
74f0: 6e 20 50 56 4f 49 44 29 3b 0d 0a 74 79 70 65 64  n PVOID);..typed
7500: 65 66 20 53 43 41 52 44 48 41 4e 44 4c 45 20 28  ef SCARDHANDLE (
7510: 57 49 4e 41 50 49 20 2a 4c 50 4f 43 4e 43 4f 4e  WINAPI *LPOCNCON
7520: 4e 50 52 4f 43 57 29 20 28 5f 5f 69 6e 20 53 43  NPROCW) (__in SC
7530: 41 52 44 43 4f 4e 54 45 58 54 2c 20 5f 5f 69 6e  ARDCONTEXT, __in
7540: 20 4c 50 57 53 54 52 2c 20 5f 5f 69 6e 20 4c 50   LPWSTR, __in LP
7550: 57 53 54 52 2c 20 5f 5f 69 6e 20 50 56 4f 49 44  WSTR, __in PVOID
7560: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f  );..#ifdef UNICO
7570: 44 45 0d 0a 23 64 65 66 69 6e 65 20 4c 50 4f 43  DE..#define LPOC
7580: 4e 43 4f 4e 4e 50 52 4f 43 20 20 4c 50 4f 43 4e  NCONNPROC  LPOCN
7590: 43 4f 4e 4e 50 52 4f 43 57 0d 0a 23 65 6c 73 65  CONNPROCW..#else
75a0: 0d 0a 23 64 65 66 69 6e 65 20 4c 50 4f 43 4e 43  ..#define LPOCNC
75b0: 4f 4e 4e 50 52 4f 43 20 20 4c 50 4f 43 4e 43 4f  ONNPROC  LPOCNCO
75c0: 4e 4e 50 52 4f 43 41 0d 0a 23 65 6e 64 69 66 20  NNPROCA..#endif 
75d0: 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 74 79 70  // !UNICODE..typ
75e0: 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e 41 50  edef BOOL (WINAP
75f0: 49 20 2a 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 29  I *LPOCNCHKPROC)
7600: 20 28 5f 5f 69 6e 20 53 43 41 52 44 43 4f 4e 54   (__in SCARDCONT
7610: 45 58 54 2c 20 5f 5f 69 6e 20 53 43 41 52 44 48  EXT, __in SCARDH
7620: 41 4e 44 4c 45 2c 20 5f 5f 69 6e 20 50 56 4f 49  ANDLE, __in PVOI
7630: 44 29 3b 0d 0a 74 79 70 65 64 65 66 20 76 6f 69  D);..typedef voi
7640: 64 20 28 57 49 4e 41 50 49 20 2a 4c 50 4f 43 4e  d (WINAPI *LPOCN
7650: 44 53 43 50 52 4f 43 29 20 28 5f 5f 69 6e 20 53  DSCPROC) (__in S
7660: 43 41 52 44 43 4f 4e 54 45 58 54 2c 20 5f 5f 69  CARDCONTEXT, __i
7670: 6e 20 53 43 41 52 44 48 41 4e 44 4c 45 2c 20 5f  n SCARDHANDLE, _
7680: 5f 69 6e 20 50 56 4f 49 44 29 3b 0d 0a 0d 0a 0d  _in PVOID);.....
7690: 0a 2f 2f 0d 0a 2f 2f 20 4f 50 45 4e 43 41 52 44  .//..// OPENCARD
76a0: 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41  _SEARCH_CRITERIA
76b0: 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 73 70  : In order to sp
76c0: 65 63 69 66 79 20 61 20 75 73 65 72 2d 65 78 74  ecify a user-ext
76d0: 65 6e 64 65 64 20 73 65 61 72 63 68 2c 0d 0a 2f  ended search,../
76e0: 2f 20 6c 70 66 6e 43 68 65 63 6b 20 6d 75 73 74  / lpfnCheck must
76f0: 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 2e 20 20 4d   not be NULL.  M
7700: 6f 72 65 6f 76 65 72 2c 20 74 68 65 20 63 6f 6e  oreover, the con
7710: 6e 65 63 74 69 6f 6e 20 74 6f 20 62 65 20 6d 61  nection to be ma
7720: 64 65 20 74 6f 20 74 68 65 0d 0a 2f 2f 20 63 61  de to the..// ca
7730: 72 64 20 62 65 66 6f 72 65 20 70 65 72 66 6f 72  rd before perfor
7740: 6d 69 6e 67 20 74 68 65 20 63 61 6c 6c 62 61 63  ming the callbac
7750: 6b 20 6d 75 73 74 20 62 65 20 69 6e 64 69 63 61  k must be indica
7760: 74 65 64 20 62 79 20 65 69 74 68 65 72 20 70 72  ted by either pr
7770: 6f 76 69 64 69 6e 67 0d 0a 2f 2f 20 6c 70 66 6e  oviding..// lpfn
7780: 43 6f 6e 6e 65 63 74 20 61 6e 64 20 6c 70 66 6e  Connect and lpfn
7790: 44 69 73 63 6f 6e 6e 65 63 74 20 4f 52 20 62 79  Disconnect OR by
77a0: 20 73 65 74 74 69 6e 67 20 64 77 53 68 61 72 65   setting dwShare
77b0: 4d 6f 64 65 2e 0d 0a 2f 2f 20 49 66 20 62 6f 74  Mode...// If bot
77c0: 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  h the connection
77d0: 20 63 61 6c 6c 62 61 63 6b 73 20 61 6e 64 20 64   callbacks and d
77e0: 77 53 68 61 72 65 4d 6f 64 65 20 61 72 65 20 6e  wShareMode are n
77f0: 6f 6e 2d 4e 55 4c 4c 2c 20 74 68 65 20 63 61 6c  on-NULL, the cal
7800: 6c 62 61 63 6b 73 0d 0a 2f 2f 20 77 69 6c 6c 20  lbacks..// will 
7810: 62 65 20 75 73 65 64 2e 0d 0a 2f 2f 0d 0a 0d 0a  be used...//....
7820: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
7830: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
7840: 20 20 20 20 20 20 64 77 53 74 72 75 63 74 53 69        dwStructSi
7850: 7a 65 3b 0d 0a 20 20 20 20 4c 50 53 54 52 20 20  ze;..    LPSTR  
7860: 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 47 72           lpstrGr
7870: 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 20 20  oupNames;       
7880: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72 65 61   // OPTIONAL rea
7890: 64 65 72 20 67 72 6f 75 70 73 20 74 6f 20 69 6e  der groups to in
78a0: 63 6c 75 64 65 20 69 6e 0d 0a 20 20 20 20 44 57  clude in..    DW
78b0: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d  ORD           nM
78c0: 61 78 47 72 6f 75 70 4e 61 6d 65 73 3b 20 20 20  axGroupNames;   
78d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
78e0: 20 20 73 65 61 72 63 68 2e 20 20 4e 55 4c 4c 20    search.  NULL 
78f0: 64 65 66 61 75 6c 74 73 20 74 6f 0d 0a 20 20 20  defaults to..   
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
7930: 20 20 20 20 20 53 43 61 72 64 24 44 65 66 61 75       SCard$Defau
7940: 6c 74 52 65 61 64 65 72 73 0d 0a 20 20 20 20 4c  ltReaders..    L
7950: 50 43 47 55 49 44 20 20 20 20 20 20 20 20 20 72  PCGUID         r
7960: 67 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 3b  gguidInterfaces;
7970: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
7980: 41 4c 20 72 65 71 75 65 73 74 65 64 20 69 6e 74  AL requested int
7990: 65 72 66 61 63 65 73 0d 0a 20 20 20 20 44 57 4f  erfaces..    DWO
79a0: 52 44 20 20 20 20 20 20 20 20 20 20 20 63 67 75  RD           cgu
79b0: 69 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20  idInterfaces;   
79c0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
79d0: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 63 61   supported by ca
79e0: 72 64 27 73 20 53 53 50 0d 0a 20 20 20 20 4c 50  rd's SSP..    LP
79f0: 53 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70  STR           lp
7a00: 73 74 72 43 61 72 64 4e 61 6d 65 73 3b 20 20 20  strCardNames;   
7a10: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41        // OPTIONA
7a20: 4c 20 72 65 71 75 65 73 74 65 64 20 63 61 72 64  L requested card
7a30: 20 6e 61 6d 65 73 3b 20 61 6c 6c 20 63 61 72 64   names; all card
7a40: 73 20 77 2f 0d 0a 20 20 20 20 44 57 4f 52 44 20  s w/..    DWORD 
7a50: 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61            nMaxCa
7a60: 72 64 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20  rdNames;        
7a70: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6d 61    //          ma
7a80: 74 63 68 69 6e 67 20 41 54 52 73 20 77 69 6c 6c  tching ATRs will
7a90: 20 62 65 20 61 63 63 65 70 74 65 64 0d 0a 20 20   be accepted..  
7aa0: 20 20 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20    LPOCNCHKPROC  
7ab0: 20 20 6c 70 66 6e 43 68 65 63 6b 3b 20 20 20 20    lpfnCheck;    
7ac0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54            // OPT
7ad0: 49 4f 4e 41 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f  IONAL if NULL no
7ae0: 20 75 73 65 72 20 63 68 65 63 6b 20 77 69 6c 6c   user check will
7af0: 20 62 65 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a   be performed...
7b00: 20 20 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f      LPOCNCONNPRO
7b10: 43 41 20 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b  CA  lpfnConnect;
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
7b30: 50 54 49 4f 4e 41 4c 20 69 66 20 6c 70 66 6e 43  PTIONAL if lpfnC
7b40: 6f 6e 6e 65 63 74 20 69 73 20 70 72 6f 76 69 64  onnect is provid
7b50: 65 64 2c 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53  ed,..    LPOCNDS
7b60: 43 50 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 73  CPROC    lpfnDis
7b70: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20  connect;        
7b80: 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6c 70 66   //          lpf
7b90: 6e 44 69 73 63 6f 6e 6e 65 63 74 20 6d 75 73 74  nDisconnect must
7ba0: 20 61 6c 73 6f 20 62 65 20 73 65 74 2e 0d 0a 20   also be set... 
7bb0: 20 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20     LPVOID       
7bc0: 20 20 20 70 76 55 73 65 72 44 61 74 61 3b 20 20     pvUserData;  
7bd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50             // OP
7be0: 54 49 4f 4e 41 4c 20 70 61 72 61 6d 65 74 65 72  TIONAL parameter
7bf0: 20 74 6f 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20   to callbacks.. 
7c00: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
7c10: 20 20 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 20     dwShareMode; 
7c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50             // OP
7c30: 54 49 4f 4e 41 4c 20 6d 75 73 74 20 62 65 20 73  TIONAL must be s
7c40: 65 74 20 69 66 20 6c 70 66 6e 43 68 65 63 6b 20  et if lpfnCheck 
7c50: 69 73 20 6e 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20  is not null..   
7c60: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20   DWORD          
7c70: 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74   dwPreferredProt
7c80: 6f 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49  ocols;   // OPTI
7c90: 4f 4e 41 4c 0d 0a 7d 20 4f 50 45 4e 43 41 52 44  ONAL..} OPENCARD
7ca0: 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41  _SEARCH_CRITERIA
7cb0: 41 2c 20 2a 50 4f 50 45 4e 43 41 52 44 5f 53 45  A, *POPENCARD_SE
7cc0: 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 2c 20  ARCH_CRITERIAA, 
7cd0: 2a 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52  *LPOPENCARD_SEAR
7ce0: 43 48 5f 43 52 49 54 45 52 49 41 41 3b 0d 0a 74  CH_CRITERIAA;..t
7cf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d  ypedef struct {.
7d00: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
7d10: 20 20 20 20 20 64 77 53 74 72 75 63 74 53 69 7a       dwStructSiz
7d20: 65 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20  e;..    LPWSTR  
7d30: 20 20 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f          lpstrGro
7d40: 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20  upNames;        
7d50: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72 65 61 64  // OPTIONAL read
7d60: 65 72 20 67 72 6f 75 70 73 20 74 6f 20 69 6e 63  er groups to inc
7d70: 6c 75 64 65 20 69 6e 0d 0a 20 20 20 20 44 57 4f  lude in..    DWO
7d80: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61  RD           nMa
7d90: 78 47 72 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20  xGroupNames;    
7da0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
7db0: 20 73 65 61 72 63 68 2e 20 20 4e 55 4c 4c 20 64   search.  NULL d
7dc0: 65 66 61 75 6c 74 73 20 74 6f 0d 0a 20 20 20 20  efaults to..    
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7df0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
7e00: 20 20 20 20 53 43 61 72 64 24 44 65 66 61 75 6c      SCard$Defaul
7e10: 74 52 65 61 64 65 72 73 0d 0a 20 20 20 20 4c 50  tReaders..    LP
7e20: 43 47 55 49 44 20 20 20 20 20 20 20 20 20 72 67  CGUID         rg
7e30: 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 3b 20  guidInterfaces; 
7e40: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41        // OPTIONA
7e50: 4c 20 72 65 71 75 65 73 74 65 64 20 69 6e 74 65  L requested inte
7e60: 72 66 61 63 65 73 0d 0a 20 20 20 20 44 57 4f 52  rfaces..    DWOR
7e70: 44 20 20 20 20 20 20 20 20 20 20 20 63 67 75 69  D           cgui
7e80: 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20 20  dInterfaces;    
7e90: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
7ea0: 73 75 70 70 6f 72 74 65 64 20 62 79 20 63 61 72  supported by car
7eb0: 64 27 73 20 53 53 50 0d 0a 20 20 20 20 4c 50 57  d's SSP..    LPW
7ec0: 53 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73  STR          lps
7ed0: 74 72 43 61 72 64 4e 61 6d 65 73 3b 20 20 20 20  trCardNames;    
7ee0: 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c       // OPTIONAL
7ef0: 20 72 65 71 75 65 73 74 65 64 20 63 61 72 64 20   requested card 
7f00: 6e 61 6d 65 73 3b 20 61 6c 6c 20 63 61 72 64 73  names; all cards
7f10: 20 77 2f 0d 0a 20 20 20 20 44 57 4f 52 44 20 20   w/..    DWORD  
7f20: 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72           nMaxCar
7f30: 64 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 20  dNames;         
7f40: 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6d 61 74   //          mat
7f50: 63 68 69 6e 67 20 41 54 52 73 20 77 69 6c 6c 20  ching ATRs will 
7f60: 62 65 20 61 63 63 65 70 74 65 64 0d 0a 20 20 20  be accepted..   
7f70: 20 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20   LPOCNCHKPROC   
7f80: 20 6c 70 66 6e 43 68 65 63 6b 3b 20 20 20 20 20   lpfnCheck;     
7f90: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49           // OPTI
7fa0: 4f 4e 41 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f 20  ONAL if NULL no 
7fb0: 75 73 65 72 20 63 68 65 63 6b 20 77 69 6c 6c 20  user check will 
7fc0: 62 65 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20  be performed... 
7fd0: 20 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43     LPOCNCONNPROC
7fe0: 57 20 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20  W  lpfnConnect; 
7ff0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50             // OP
8000: 54 49 4f 4e 41 4c 20 69 66 20 6c 70 66 6e 43 6f  TIONAL if lpfnCo
8010: 6e 6e 65 63 74 20 69 73 20 70 72 6f 76 69 64 65  nnect is provide
8020: 64 2c 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43  d,..    LPOCNDSC
8030: 50 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 73 63  PROC    lpfnDisc
8040: 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20  onnect;         
8050: 2f 2f 20 20 20 20 20 20 20 20 20 20 6c 70 66 6e  //          lpfn
8060: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 75 73 74 20  Disconnect must 
8070: 61 6c 73 6f 20 62 65 20 73 65 74 2e 0d 0a 20 20  also be set...  
8080: 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20 20    LPVOID        
8090: 20 20 70 76 55 73 65 72 44 61 74 61 3b 20 20 20    pvUserData;   
80a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54            // OPT
80b0: 49 4f 4e 41 4c 20 70 61 72 61 6d 65 74 65 72 20  IONAL parameter 
80c0: 74 6f 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20  to callbacks..  
80d0: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
80e0: 20 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20    dwShareMode;  
80f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54            // OPT
8100: 49 4f 4e 41 4c 20 6d 75 73 74 20 62 65 20 73 65  IONAL must be se
8110: 74 20 69 66 20 6c 70 66 6e 43 68 65 63 6b 20 69  t if lpfnCheck i
8120: 73 20 6e 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20 20  s not null..    
8130: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
8140: 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f  dwPreferredProto
8150: 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f  cols;   // OPTIO
8160: 4e 41 4c 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 5f  NAL..} OPENCARD_
8170: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 57  SEARCH_CRITERIAW
8180: 2c 20 2a 50 4f 50 45 4e 43 41 52 44 5f 53 45 41  , *POPENCARD_SEA
8190: 52 43 48 5f 43 52 49 54 45 52 49 41 57 2c 20 2a  RCH_CRITERIAW, *
81a0: 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43  LPOPENCARD_SEARC
81b0: 48 5f 43 52 49 54 45 52 49 41 57 3b 0d 0a 23 69  H_CRITERIAW;..#i
81c0: 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 74 79  fdef UNICODE..ty
81d0: 70 65 64 65 66 20 4f 50 45 4e 43 41 52 44 5f 53  pedef OPENCARD_S
81e0: 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 57 20  EARCH_CRITERIAW 
81f0: 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f  OPENCARD_SEARCH_
8200: 43 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 65 64  CRITERIA;..typed
8210: 65 66 20 50 4f 50 45 4e 43 41 52 44 5f 53 45 41  ef POPENCARD_SEA
8220: 52 43 48 5f 43 52 49 54 45 52 49 41 57 20 50 4f  RCH_CRITERIAW PO
8230: 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43  PENCARD_SEARCH_C
8240: 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 65 64 65  RITERIA;..typede
8250: 66 20 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41  f LPOPENCARD_SEA
8260: 52 43 48 5f 43 52 49 54 45 52 49 41 57 20 4c 50  RCH_CRITERIAW LP
8270: 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f  OPENCARD_SEARCH_
8280: 43 52 49 54 45 52 49 41 3b 0d 0a 23 65 6c 73 65  CRITERIA;..#else
8290: 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43 41  ..typedef OPENCA
82a0: 52 44 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52  RD_SEARCH_CRITER
82b0: 49 41 41 20 4f 50 45 4e 43 41 52 44 5f 53 45 41  IAA OPENCARD_SEA
82c0: 52 43 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 74  RCH_CRITERIA;..t
82d0: 79 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 44  ypedef POPENCARD
82e0: 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41  _SEARCH_CRITERIA
82f0: 41 20 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52  A POPENCARD_SEAR
8300: 43 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 74 79  CH_CRITERIA;..ty
8310: 70 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44  pedef LPOPENCARD
8320: 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41  _SEARCH_CRITERIA
8330: 41 20 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41  A LPOPENCARD_SEA
8340: 52 43 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 23  RCH_CRITERIA;..#
8350: 65 6e 64 69 66 20 2f 2f 20 55 4e 49 43 4f 44 45  endif // UNICODE
8360: 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 4f 50 45  ......//..// OPE
8370: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 3a 20 75 73  NCARDNAME_EX: us
8380: 65 64 20 62 79 20 53 43 61 72 64 55 49 44 6c 67  ed by SCardUIDlg
8390: 53 65 6c 65 63 74 43 61 72 64 3b 20 72 65 70 6c  SelectCard; repl
83a0: 61 63 65 73 20 6f 62 73 6f 6c 65 74 65 20 4f 50  aces obsolete OP
83b0: 45 4e 43 41 52 44 4e 41 4d 45 0d 0a 2f 2f 0d 0a  ENCARDNAME..//..
83c0: 0d 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ..typedef struct
83d0: 20 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20   {..    DWORD   
83e0: 20 20 20 20 20 20 20 20 64 77 53 74 72 75 63 74          dwStruct
83f0: 53 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  Size;           
8400: 2f 2f 20 52 45 51 55 49 52 45 44 0d 0a 20 20 20  // REQUIRED..   
8410: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 20 20   SCARDCONTEXT   
8420: 20 68 53 43 61 72 64 43 6f 6e 74 65 78 74 3b 20   hSCardContext; 
8430: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55           // REQU
8440: 49 52 45 44 0d 0a 20 20 20 20 48 57 4e 44 20 20  IRED..    HWND  
8450: 20 20 20 20 20 20 20 20 20 20 68 77 6e 64 4f 77            hwndOw
8460: 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ner;            
8470: 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20    // OPTIONAL.. 
8480: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
8490: 20 20 20 64 77 46 6c 61 67 73 3b 20 20 20 20 20     dwFlags;     
84a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50             // OP
84b0: 54 49 4f 4e 41 4c 20 2d 2d 20 64 65 66 61 75 6c  TIONAL -- defaul
84c0: 74 20 69 73 20 53 43 5f 44 4c 47 5f 4d 49 4e 49  t is SC_DLG_MINI
84d0: 4d 41 4c 5f 55 49 0d 0a 20 20 20 20 4c 50 43 53  MAL_UI..    LPCS
84e0: 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 74  TR          lpst
84f0: 72 54 69 74 6c 65 3b 20 20 20 20 20 20 20 20 20  rTitle;         
8500: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d      // OPTIONAL.
8510: 0a 20 20 20 20 4c 50 43 53 54 52 20 20 20 20 20  .    LPCSTR     
8520: 20 20 20 20 20 6c 70 73 74 72 53 65 61 72 63 68       lpstrSearch
8530: 44 65 73 63 3b 20 20 20 20 20 20 20 20 2f 2f 20  Desc;        // 
8540: 4f 50 54 49 4f 4e 41 4c 20 28 65 67 2e 20 22 50  OPTIONAL (eg. "P
8550: 6c 65 61 73 65 20 69 6e 73 65 72 74 20 79 6f 75  lease insert you
8560: 72 20 3c 62 72 61 6e 64 6e 61 6d 65 3e 20 73 6d  r <brandname> sm
8570: 61 72 74 20 63 61 72 64 2e 22 29 0d 0a 20 20 20  art card.")..   
8580: 20 48 49 43 4f 4e 20 20 20 20 20 20 20 20 20 20   HICON          
8590: 20 68 49 63 6f 6e 3b 20 20 20 20 20 20 20 20 20   hIcon;         
85a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49           // OPTI
85b0: 4f 4e 41 4c 20 33 32 78 33 32 20 69 63 6f 6e 20  ONAL 32x32 icon 
85c0: 66 6f 72 20 79 6f 75 72 20 62 72 61 6e 64 20 69  for your brand i
85d0: 6e 73 69 67 6e 69 61 0d 0a 20 20 20 20 50 4f 50  nsignia..    POP
85e0: 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52  ENCARD_SEARCH_CR
85f0: 49 54 45 52 49 41 41 20 70 4f 70 65 6e 43 61 72  ITERIAA pOpenCar
8600: 64 53 65 61 72 63 68 43 72 69 74 65 72 69 61 3b  dSearchCriteria;
8610: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20   // OPTIONAL..  
8620: 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41    LPOCNCONNPROCA
8630: 20 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20    lpfnConnect;  
8640: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54            // OPT
8650: 49 4f 4e 41 4c 20 2d 20 70 65 72 66 6f 72 6d 65  IONAL - performe
8660: 64 20 6f 6e 20 73 75 63 63 65 73 73 66 75 6c 20  d on successful 
8670: 73 65 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 4c  selection..    L
8680: 50 56 4f 49 44 20 20 20 20 20 20 20 20 20 20 70  PVOID          p
8690: 76 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 20  vUserData;      
86a0: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
86b0: 41 4c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  AL parameter to 
86c0: 6c 70 66 6e 43 6f 6e 6e 65 63 74 0d 0a 20 20 20  lpfnConnect..   
86d0: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20   DWORD          
86e0: 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 20   dwShareMode;   
86f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49           // OPTI
8700: 4f 4e 41 4c 20 2d 20 69 66 20 6c 70 66 6e 43 6f  ONAL - if lpfnCo
8710: 6e 6e 65 63 74 20 69 73 20 4e 55 4c 4c 2c 20 64  nnect is NULL, d
8720: 77 53 68 61 72 65 4d 6f 64 65 20 61 6e 64 0d 0a  wShareMode and..
8730: 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20      DWORD       
8740: 20 20 20 20 64 77 50 72 65 66 65 72 72 65 64 50      dwPreferredP
8750: 72 6f 74 6f 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f  rotocols;   // O
8760: 50 54 49 4f 4e 41 4c 20 64 77 50 72 65 66 65 72  PTIONAL dwPrefer
8770: 72 65 64 50 72 6f 74 6f 63 6f 6c 73 20 77 69 6c  redProtocols wil
8780: 6c 20 62 65 20 75 73 65 64 20 74 6f 0d 0a 20 20  l be used to..  
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
87c0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 20 74 6f        connect to
87d0: 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 63 61   the selected ca
87e0: 72 64 0d 0a 20 20 20 20 4c 50 53 54 52 20 20 20  rd..    LPSTR   
87f0: 20 20 20 20 20 20 20 20 6c 70 73 74 72 52 64 72          lpstrRdr
8800: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8810: 2f 2f 20 52 45 51 55 49 52 45 44 20 5b 49 4e 7c  // REQUIRED [IN|
8820: 4f 55 54 5d 20 4e 61 6d 65 20 6f 66 20 73 65 6c  OUT] Name of sel
8830: 65 63 74 65 64 20 72 65 61 64 65 72 0d 0a 20 20  ected reader..  
8840: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
8850: 20 20 6e 4d 61 78 52 64 72 3b 20 20 20 20 20 20    nMaxRdr;      
8860: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51            // REQ
8870: 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 0d 0a  UIRED [IN|OUT]..
8880: 20 20 20 20 4c 50 53 54 52 20 20 20 20 20 20 20      LPSTR       
8890: 20 20 20 20 6c 70 73 74 72 43 61 72 64 3b 20 20      lpstrCard;  
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52              // R
88b0: 45 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d  EQUIRED [IN|OUT]
88c0: 20 4e 61 6d 65 20 6f 66 20 73 65 6c 65 63 74 65   Name of selecte
88d0: 64 20 63 61 72 64 0d 0a 20 20 20 20 44 57 4f 52  d card..    DWOR
88e0: 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78  D           nMax
88f0: 43 61 72 64 3b 20 20 20 20 20 20 20 20 20 20 20  Card;           
8900: 20 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 20      // REQUIRED 
8910: 5b 49 4e 7c 4f 55 54 5d 0d 0a 20 20 20 20 44 57  [IN|OUT]..    DW
8920: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
8930: 41 63 74 69 76 65 50 72 6f 74 6f 63 6f 6c 3b 20  ActiveProtocol; 
8940: 20 20 20 20 20 20 2f 2f 20 5b 4f 55 54 5d 20 73        // [OUT] s
8950: 65 74 20 6f 6e 6c 79 20 69 66 20 64 77 53 68 61  et only if dwSha
8960: 72 65 4d 6f 64 65 20 6e 6f 74 20 4e 55 4c 4c 0d  reMode not NULL.
8970: 0a 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45  .    SCARDHANDLE
8980: 20 20 20 20 20 68 43 61 72 64 48 61 6e 64 6c 65       hCardHandle
8990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ;            // 
89a0: 5b 4f 55 54 5d 20 73 65 74 20 69 66 20 61 20 63  [OUT] set if a c
89b0: 61 72 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  ard connection w
89c0: 61 73 20 69 6e 64 69 63 61 74 65 64 0d 0a 7d 20  as indicated..} 
89d0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41  OPENCARDNAME_EXA
89e0: 2c 20 2a 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45  , *POPENCARDNAME
89f0: 5f 45 58 41 2c 20 2a 4c 50 4f 50 45 4e 43 41 52  _EXA, *LPOPENCAR
8a00: 44 4e 41 4d 45 5f 45 58 41 3b 0d 0a 74 79 70 65  DNAME_EXA;..type
8a10: 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20  def struct {..  
8a20: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
8a30: 20 20 64 77 53 74 72 75 63 74 53 69 7a 65 3b 20    dwStructSize; 
8a40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51            // REQ
8a50: 55 49 52 45 44 0d 0a 20 20 20 20 53 43 41 52 44  UIRED..    SCARD
8a60: 43 4f 4e 54 45 58 54 20 20 20 20 68 53 43 61 72  CONTEXT    hSCar
8a70: 64 43 6f 6e 74 65 78 74 3b 20 20 20 20 20 20 20  dContext;       
8a80: 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 0d 0a     // REQUIRED..
8a90: 20 20 20 20 48 57 4e 44 20 20 20 20 20 20 20 20      HWND        
8aa0: 20 20 20 20 68 77 6e 64 4f 77 6e 65 72 3b 20 20      hwndOwner;  
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
8ac0: 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 44 57 4f  PTIONAL..    DWO
8ad0: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 46  RD           dwF
8ae0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
8af0: 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c       // OPTIONAL
8b00: 20 2d 2d 20 64 65 66 61 75 6c 74 20 69 73 20 53   -- default is S
8b10: 43 5f 44 4c 47 5f 4d 49 4e 49 4d 41 4c 5f 55 49  C_DLG_MINIMAL_UI
8b20: 0d 0a 20 20 20 20 4c 50 43 57 53 54 52 20 20 20  ..    LPCWSTR   
8b30: 20 20 20 20 20 20 6c 70 73 74 72 54 69 74 6c 65        lpstrTitle
8b40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ;             //
8b50: 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c   OPTIONAL..    L
8b60: 50 43 57 53 54 52 20 20 20 20 20 20 20 20 20 6c  PCWSTR         l
8b70: 70 73 74 72 53 65 61 72 63 68 44 65 73 63 3b 20  pstrSearchDesc; 
8b80: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
8b90: 41 4c 20 28 65 67 2e 20 22 50 6c 65 61 73 65 20  AL (eg. "Please 
8ba0: 69 6e 73 65 72 74 20 79 6f 75 72 20 3c 62 72 61  insert your <bra
8bb0: 6e 64 6e 61 6d 65 3e 20 73 6d 61 72 74 20 63 61  ndname> smart ca
8bc0: 72 64 2e 22 29 0d 0a 20 20 20 20 48 49 43 4f 4e  rd.")..    HICON
8bd0: 20 20 20 20 20 20 20 20 20 20 20 68 49 63 6f 6e             hIcon
8be0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8bf0: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 33     // OPTIONAL 3
8c00: 32 78 33 32 20 69 63 6f 6e 20 66 6f 72 20 79 6f  2x32 icon for yo
8c10: 75 72 20 62 72 61 6e 64 20 69 6e 73 69 67 6e 69  ur brand insigni
8c20: 61 0d 0a 20 20 20 20 50 4f 50 45 4e 43 41 52 44  a..    POPENCARD
8c30: 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41  _SEARCH_CRITERIA
8c40: 57 20 70 4f 70 65 6e 43 61 72 64 53 65 61 72 63  W pOpenCardSearc
8c50: 68 43 72 69 74 65 72 69 61 3b 20 2f 2f 20 4f 50  hCriteria; // OP
8c60: 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c 50 4f 43  TIONAL..    LPOC
8c70: 4e 43 4f 4e 4e 50 52 4f 43 57 20 20 6c 70 66 6e  NCONNPROCW  lpfn
8c80: 43 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20  Connect;        
8c90: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20      // OPTIONAL 
8ca0: 2d 20 70 65 72 66 6f 72 6d 65 64 20 6f 6e 20 73  - performed on s
8cb0: 75 63 63 65 73 73 66 75 6c 20 73 65 6c 65 63 74  uccessful select
8cc0: 69 6f 6e 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20  ion..    LPVOID 
8cd0: 20 20 20 20 20 20 20 20 20 70 76 55 73 65 72 44           pvUserD
8ce0: 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
8cf0: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 70 61 72   // OPTIONAL par
8d00: 61 6d 65 74 65 72 20 74 6f 20 6c 70 66 6e 43 6f  ameter to lpfnCo
8d10: 6e 6e 65 63 74 0d 0a 20 20 20 20 44 57 4f 52 44  nnect..    DWORD
8d20: 20 20 20 20 20 20 20 20 20 20 20 64 77 53 68 61             dwSha
8d30: 72 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  reMode;         
8d40: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d     // OPTIONAL -
8d50: 20 69 66 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 20   if lpfnConnect 
8d60: 69 73 20 4e 55 4c 4c 2c 20 64 77 53 68 61 72 65  is NULL, dwShare
8d70: 4d 6f 64 65 20 61 6e 64 0d 0a 20 20 20 20 44 57  Mode and..    DW
8d80: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
8d90: 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f  PreferredProtoco
8da0: 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41  ls;   // OPTIONA
8db0: 4c 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f  L dwPreferredPro
8dc0: 74 6f 63 6f 6c 73 20 77 69 6c 6c 20 62 65 20 75  tocols will be u
8dd0: 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..        
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
8e10: 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 73  connect to the s
8e20: 65 6c 65 63 74 65 64 20 63 61 72 64 0d 0a 20 20  elected card..  
8e30: 20 20 4c 50 57 53 54 52 20 20 20 20 20 20 20 20    LPWSTR        
8e40: 20 20 6c 70 73 74 72 52 64 72 3b 20 20 20 20 20    lpstrRdr;     
8e50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51            // REQ
8e60: 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 20 4e  UIRED [IN|OUT] N
8e70: 61 6d 65 20 6f 66 20 73 65 6c 65 63 74 65 64 20  ame of selected 
8e80: 72 65 61 64 65 72 0d 0a 20 20 20 20 44 57 4f 52  reader..    DWOR
8e90: 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78  D           nMax
8ea0: 52 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rdr;            
8eb0: 20 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 20      // REQUIRED 
8ec0: 5b 49 4e 7c 4f 55 54 5d 0d 0a 20 20 20 20 4c 50  [IN|OUT]..    LP
8ed0: 57 53 54 52 20 20 20 20 20 20 20 20 20 20 6c 70  WSTR          lp
8ee0: 73 74 72 43 61 72 64 3b 20 20 20 20 20 20 20 20  strCard;        
8ef0: 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52 45        // REQUIRE
8f00: 44 20 5b 49 4e 7c 4f 55 54 5d 20 4e 61 6d 65 20  D [IN|OUT] Name 
8f10: 6f 66 20 73 65 6c 65 63 74 65 64 20 63 61 72 64  of selected card
8f20: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
8f30: 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 3b 20        nMaxCard; 
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8f50: 20 52 45 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55   REQUIRED [IN|OU
8f60: 54 5d 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20  T]..    DWORD   
8f70: 20 20 20 20 20 20 20 20 64 77 41 63 74 69 76 65          dwActive
8f80: 50 72 6f 74 6f 63 6f 6c 3b 20 20 20 20 20 20 20  Protocol;       
8f90: 2f 2f 20 5b 4f 55 54 5d 20 73 65 74 20 6f 6e 6c  // [OUT] set onl
8fa0: 79 20 69 66 20 64 77 53 68 61 72 65 4d 6f 64 65  y if dwShareMode
8fb0: 20 6e 6f 74 20 4e 55 4c 4c 0d 0a 20 20 20 20 53   not NULL..    S
8fc0: 43 41 52 44 48 41 4e 44 4c 45 20 20 20 20 20 68  CARDHANDLE     h
8fd0: 43 61 72 64 48 61 6e 64 6c 65 3b 20 20 20 20 20  CardHandle;     
8fe0: 20 20 20 20 20 20 20 2f 2f 20 5b 4f 55 54 5d 20         // [OUT] 
8ff0: 73 65 74 20 69 66 20 61 20 63 61 72 64 20 63 6f  set if a card co
9000: 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 69 6e 64  nnection was ind
9010: 69 63 61 74 65 64 0d 0a 7d 20 4f 50 45 4e 43 41  icated..} OPENCA
9020: 52 44 4e 41 4d 45 5f 45 58 57 2c 20 2a 50 4f 50  RDNAME_EXW, *POP
9030: 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 2c 20  ENCARDNAME_EXW, 
9040: 2a 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f  *LPOPENCARDNAME_
9050: 45 58 57 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49  EXW;..#ifdef UNI
9060: 43 4f 44 45 0d 0a 74 79 70 65 64 65 66 20 4f 50  CODE..typedef OP
9070: 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 20 4f  ENCARDNAME_EXW O
9080: 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d  PENCARDNAME_EX;.
9090: 0a 74 79 70 65 64 65 66 20 50 4f 50 45 4e 43 41  .typedef POPENCA
90a0: 52 44 4e 41 4d 45 5f 45 58 57 20 50 4f 50 45 4e  RDNAME_EXW POPEN
90b0: 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79  CARDNAME_EX;..ty
90c0: 70 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44  pedef LPOPENCARD
90d0: 4e 41 4d 45 5f 45 58 57 20 4c 50 4f 50 45 4e 43  NAME_EXW LPOPENC
90e0: 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 23 65 6c  ARDNAME_EX;..#el
90f0: 73 65 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e  se..typedef OPEN
9100: 43 41 52 44 4e 41 4d 45 5f 45 58 41 20 4f 50 45  CARDNAME_EXA OPE
9110: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74  NCARDNAME_EX;..t
9120: 79 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 44  ypedef POPENCARD
9130: 4e 41 4d 45 5f 45 58 41 20 50 4f 50 45 4e 43 41  NAME_EXA POPENCA
9140: 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 65  RDNAME_EX;..type
9150: 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41  def LPOPENCARDNA
9160: 4d 45 5f 45 58 41 20 4c 50 4f 50 45 4e 43 41 52  ME_EXA LPOPENCAR
9170: 44 4e 41 4d 45 5f 45 58 3b 0d 0a 23 65 6e 64 69  DNAME_EX;..#endi
9180: 66 20 2f 2f 20 55 4e 49 43 4f 44 45 0d 0a 0d 0a  f // UNICODE....
9190: 23 64 65 66 69 6e 65 20 4f 50 45 4e 43 41 52 44  #define OPENCARD
91a0: 4e 41 4d 45 41 5f 45 58 20 4f 50 45 4e 43 41 52  NAMEA_EX OPENCAR
91b0: 44 4e 41 4d 45 5f 45 58 41 0d 0a 23 64 65 66 69  DNAME_EXA..#defi
91c0: 6e 65 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57  ne OPENCARDNAMEW
91d0: 5f 45 58 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45  _EX OPENCARDNAME
91e0: 5f 45 58 57 0d 0a 23 64 65 66 69 6e 65 20 50 4f  _EXW..#define PO
91f0: 50 45 4e 43 41 52 44 4e 41 4d 45 41 5f 45 58 20  PENCARDNAMEA_EX 
9200: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58  POPENCARDNAME_EX
9210: 41 0d 0a 23 64 65 66 69 6e 65 20 50 4f 50 45 4e  A..#define POPEN
9220: 43 41 52 44 4e 41 4d 45 57 5f 45 58 20 50 4f 50  CARDNAMEW_EX POP
9230: 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 0d 0a  ENCARDNAME_EXW..
9240: 23 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41  #define LPOPENCA
9250: 52 44 4e 41 4d 45 41 5f 45 58 20 4c 50 4f 50 45  RDNAMEA_EX LPOPE
9260: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41 0d 0a 23  NCARDNAME_EXA..#
9270: 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52  define LPOPENCAR
9280: 44 4e 41 4d 45 57 5f 45 58 20 4c 50 4f 50 45 4e  DNAMEW_EX LPOPEN
9290: 43 41 52 44 4e 41 4d 45 5f 45 58 57 0d 0a 0d 0a  CARDNAME_EXW....
92a0: 0d 0a 2f 2f 0d 0a 2f 2f 20 53 43 61 72 64 55 49  ..//..// SCardUI
92b0: 44 6c 67 53 65 6c 65 63 74 43 61 72 64 20 72 65  DlgSelectCard re
92c0: 70 6c 61 63 65 73 20 47 65 74 4f 70 65 6e 43 61  places GetOpenCa
92d0: 72 64 4e 61 6d 65 0d 0a 2f 2f 0d 0a 0d 0a 65 78  rdName..//....ex
92e0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
92f0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
9300: 61 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 61  ardUIDlgSelectCa
9310: 72 64 41 28 0d 0a 20 20 20 20 4c 50 4f 50 45 4e  rdA(..    LPOPEN
9320: 43 41 52 44 4e 41 4d 45 41 5f 45 58 29 3b 0d 0a  CARDNAMEA_EX);..
9330: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
9340: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
9350: 53 43 61 72 64 55 49 44 6c 67 53 65 6c 65 63 74  SCardUIDlgSelect
9360: 43 61 72 64 57 28 0d 0a 20 20 20 20 4c 50 4f 50  CardW(..    LPOP
9370: 45 4e 43 41 52 44 4e 41 4d 45 57 5f 45 58 29 3b  ENCARDNAMEW_EX);
9380: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45  ..#ifdef UNICODE
9390: 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 55  ..#define SCardU
93a0: 49 44 6c 67 53 65 6c 65 63 74 43 61 72 64 20 20  IDlgSelectCard  
93b0: 53 43 61 72 64 55 49 44 6c 67 53 65 6c 65 63 74  SCardUIDlgSelect
93c0: 43 61 72 64 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  CardW..#else..#d
93d0: 65 66 69 6e 65 20 53 43 61 72 64 55 49 44 6c 67  efine SCardUIDlg
93e0: 53 65 6c 65 63 74 43 61 72 64 20 20 53 43 61 72  SelectCard  SCar
93f0: 64 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72 64  dUIDlgSelectCard
9400: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
9410: 49 43 4f 44 45 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f  ICODE......//../
9420: 2f 20 22 53 6d 61 72 74 20 43 61 72 64 20 43 6f  / "Smart Card Co
9430: 6d 6d 6f 6e 20 44 69 61 6c 6f 67 22 20 64 65 66  mmon Dialog" def
9440: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 62 61 63  initions for bac
9450: 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
9460: 6c 69 74 79 0d 0a 2f 2f 20 20 77 69 74 68 20 74  lity..//  with t
9470: 68 65 20 53 6d 61 72 74 20 43 61 72 64 20 42 61  he Smart Card Ba
9480: 73 65 20 53 65 72 76 69 63 65 73 20 53 44 4b 20  se Services SDK 
9490: 76 65 72 73 69 6f 6e 20 31 2e 30 0d 0a 2f 2f 0d  version 1.0..//.
94a0: 0a 0d 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  ...typedef struc
94b0: 74 20 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20  t {..    DWORD  
94c0: 20 20 20 20 20 20 20 20 20 64 77 53 74 72 75 63           dwStruc
94d0: 74 53 69 7a 65 3b 0d 0a 20 20 20 20 48 57 4e 44  tSize;..    HWND
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 68 77 6e 64              hwnd
94f0: 4f 77 6e 65 72 3b 0d 0a 20 20 20 20 53 43 41 52  Owner;..    SCAR
9500: 44 43 4f 4e 54 45 58 54 20 20 20 20 68 53 43 61  DCONTEXT    hSCa
9510: 72 64 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20  rdContext;..    
9520: 4c 50 53 54 52 20 20 20 20 20 20 20 20 20 20 20  LPSTR           
9530: 6c 70 73 74 72 47 72 6f 75 70 4e 61 6d 65 73 3b  lpstrGroupNames;
9540: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
9550: 20 20 20 20 20 20 6e 4d 61 78 47 72 6f 75 70 4e        nMaxGroupN
9560: 61 6d 65 73 3b 0d 0a 20 20 20 20 4c 50 53 54 52  ames;..    LPSTR
9570: 20 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72             lpstr
9580: 43 61 72 64 4e 61 6d 65 73 3b 0d 0a 20 20 20 20  CardNames;..    
9590: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
95a0: 6e 4d 61 78 43 61 72 64 4e 61 6d 65 73 3b 0d 0a  nMaxCardNames;..
95b0: 20 20 20 20 4c 50 43 47 55 49 44 20 20 20 20 20      LPCGUID     
95c0: 20 20 20 20 72 67 67 75 69 64 49 6e 74 65 72 66      rgguidInterf
95d0: 61 63 65 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44  aces;..    DWORD
95e0: 20 20 20 20 20 20 20 20 20 20 20 63 67 75 69 64             cguid
95f0: 49 6e 74 65 72 66 61 63 65 73 3b 0d 0a 20 20 20  Interfaces;..   
9600: 20 4c 50 53 54 52 20 20 20 20 20 20 20 20 20 20   LPSTR          
9610: 20 6c 70 73 74 72 52 64 72 3b 0d 0a 20 20 20 20   lpstrRdr;..    
9620: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
9630: 6e 4d 61 78 52 64 72 3b 0d 0a 20 20 20 20 4c 50  nMaxRdr;..    LP
9640: 53 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70  STR           lp
9650: 73 74 72 43 61 72 64 3b 0d 0a 20 20 20 20 44 57  strCard;..    DW
9660: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d  ORD           nM
9670: 61 78 43 61 72 64 3b 0d 0a 20 20 20 20 4c 50 43  axCard;..    LPC
9680: 53 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73  STR          lps
9690: 74 72 54 69 74 6c 65 3b 0d 0a 20 20 20 20 44 57  trTitle;..    DW
96a0: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
96b0: 46 6c 61 67 73 3b 0d 0a 20 20 20 20 4c 50 56 4f  Flags;..    LPVO
96c0: 49 44 20 20 20 20 20 20 20 20 20 20 70 76 55 73  ID          pvUs
96d0: 65 72 44 61 74 61 3b 0d 0a 20 20 20 20 44 57 4f  erData;..    DWO
96e0: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 53  RD           dwS
96f0: 68 61 72 65 4d 6f 64 65 3b 0d 0a 20 20 20 20 44  hareMode;..    D
9700: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64  WORD           d
9710: 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63  wPreferredProtoc
9720: 6f 6c 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20  ols;..    DWORD 
9730: 20 20 20 20 20 20 20 20 20 20 64 77 41 63 74 69            dwActi
9740: 76 65 50 72 6f 74 6f 63 6f 6c 3b 0d 0a 20 20 20  veProtocol;..   
9750: 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20   LPOCNCONNPROCA 
9760: 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 0d 0a 20   lpfnConnect;.. 
9770: 20 20 20 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20     LPOCNCHKPROC 
9780: 20 20 20 6c 70 66 6e 43 68 65 63 6b 3b 0d 0a 20     lpfnCheck;.. 
9790: 20 20 20 4c 50 4f 43 4e 44 53 43 50 52 4f 43 20     LPOCNDSCPROC 
97a0: 20 20 20 6c 70 66 6e 44 69 73 63 6f 6e 6e 65 63     lpfnDisconnec
97b0: 74 3b 0d 0a 20 20 20 20 53 43 41 52 44 48 41 4e  t;..    SCARDHAN
97c0: 44 4c 45 20 20 20 20 20 68 43 61 72 64 48 61 6e  DLE     hCardHan
97d0: 64 6c 65 3b 0d 0a 7d 20 4f 50 45 4e 43 41 52 44  dle;..} OPENCARD
97e0: 4e 41 4d 45 41 2c 20 2a 50 4f 50 45 4e 43 41 52  NAMEA, *POPENCAR
97f0: 44 4e 41 4d 45 41 2c 20 2a 4c 50 4f 50 45 4e 43  DNAMEA, *LPOPENC
9800: 41 52 44 4e 41 4d 45 41 3b 0d 0a 74 79 70 65 64  ARDNAMEA;..typed
9810: 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20  ef struct {..   
9820: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20   DWORD          
9830: 20 64 77 53 74 72 75 63 74 53 69 7a 65 3b 0d 0a   dwStructSize;..
9840: 20 20 20 20 48 57 4e 44 20 20 20 20 20 20 20 20      HWND        
9850: 20 20 20 20 68 77 6e 64 4f 77 6e 65 72 3b 0d 0a      hwndOwner;..
9860: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54      SCARDCONTEXT
9870: 20 20 20 20 68 53 43 61 72 64 43 6f 6e 74 65 78      hSCardContex
9880: 74 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20  t;..    LPWSTR  
9890: 20 20 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f          lpstrGro
98a0: 75 70 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 44 57  upNames;..    DW
98b0: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d  ORD           nM
98c0: 61 78 47 72 6f 75 70 4e 61 6d 65 73 3b 0d 0a 20  axGroupNames;.. 
98d0: 20 20 20 4c 50 57 53 54 52 20 20 20 20 20 20 20     LPWSTR       
98e0: 20 20 20 6c 70 73 74 72 43 61 72 64 4e 61 6d 65     lpstrCardName
98f0: 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20  s;..    DWORD   
9900: 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64          nMaxCard
9910: 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 4c 50 43 47  Names;..    LPCG
9920: 55 49 44 20 20 20 20 20 20 20 20 20 72 67 67 75  UID         rggu
9930: 69 64 49 6e 74 65 72 66 61 63 65 73 3b 0d 0a 20  idInterfaces;.. 
9940: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
9950: 20 20 20 63 67 75 69 64 49 6e 74 65 72 66 61 63     cguidInterfac
9960: 65 73 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20  es;..    LPWSTR 
9970: 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 52 64           lpstrRd
9980: 72 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20  r;..    DWORD   
9990: 20 20 20 20 20 20 20 20 6e 4d 61 78 52 64 72 3b          nMaxRdr;
99a0: 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 20  ..    LPWSTR    
99b0: 20 20 20 20 20 20 6c 70 73 74 72 43 61 72 64 3b        lpstrCard;
99c0: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
99d0: 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 3b 0d        nMaxCard;.
99e0: 0a 20 20 20 20 4c 50 43 57 53 54 52 20 20 20 20  .    LPCWSTR    
99f0: 20 20 20 20 20 6c 70 73 74 72 54 69 74 6c 65 3b       lpstrTitle;
9a00: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
9a10: 20 20 20 20 20 20 64 77 46 6c 61 67 73 3b 0d 0a        dwFlags;..
9a20: 20 20 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20      LPVOID      
9a30: 20 20 20 20 70 76 55 73 65 72 44 61 74 61 3b 0d      pvUserData;.
9a40: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
9a50: 20 20 20 20 20 64 77 53 68 61 72 65 4d 6f 64 65       dwShareMode
9a60: 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  ;..    DWORD    
9a70: 20 20 20 20 20 20 20 64 77 50 72 65 66 65 72 72         dwPreferr
9a80: 65 64 50 72 6f 74 6f 63 6f 6c 73 3b 0d 0a 20 20  edProtocols;..  
9a90: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
9aa0: 20 20 64 77 41 63 74 69 76 65 50 72 6f 74 6f 63    dwActiveProtoc
9ab0: 6f 6c 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 4f  ol;..    LPOCNCO
9ac0: 4e 4e 50 52 4f 43 57 20 20 6c 70 66 6e 43 6f 6e  NNPROCW  lpfnCon
9ad0: 6e 65 63 74 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e  nect;..    LPOCN
9ae0: 43 48 4b 50 52 4f 43 20 20 20 20 6c 70 66 6e 43  CHKPROC    lpfnC
9af0: 68 65 63 6b 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e  heck;..    LPOCN
9b00: 44 53 43 50 52 4f 43 20 20 20 20 6c 70 66 6e 44  DSCPROC    lpfnD
9b10: 69 73 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 20 20  isconnect;..    
9b20: 53 43 41 52 44 48 41 4e 44 4c 45 20 20 20 20 20  SCARDHANDLE     
9b30: 68 43 61 72 64 48 61 6e 64 6c 65 3b 0d 0a 7d 20  hCardHandle;..} 
9b40: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 2c 20 2a  OPENCARDNAMEW, *
9b50: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 2c 20  POPENCARDNAMEW, 
9b60: 2a 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57  *LPOPENCARDNAMEW
9b70: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44  ;..#ifdef UNICOD
9b80: 45 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43  E..typedef OPENC
9b90: 41 52 44 4e 41 4d 45 57 20 4f 50 45 4e 43 41 52  ARDNAMEW OPENCAR
9ba0: 44 4e 41 4d 45 3b 0d 0a 74 79 70 65 64 65 66 20  DNAME;..typedef 
9bb0: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 20 50  POPENCARDNAMEW P
9bc0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 3b 0d 0a 74  OPENCARDNAME;..t
9bd0: 79 70 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52  ypedef LPOPENCAR
9be0: 44 4e 41 4d 45 57 20 4c 50 4f 50 45 4e 43 41 52  DNAMEW LPOPENCAR
9bf0: 44 4e 41 4d 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74  DNAME;..#else..t
9c00: 79 70 65 64 65 66 20 4f 50 45 4e 43 41 52 44 4e  ypedef OPENCARDN
9c10: 41 4d 45 41 20 4f 50 45 4e 43 41 52 44 4e 41 4d  AMEA OPENCARDNAM
9c20: 45 3b 0d 0a 74 79 70 65 64 65 66 20 50 4f 50 45  E;..typedef POPE
9c30: 4e 43 41 52 44 4e 41 4d 45 41 20 50 4f 50 45 4e  NCARDNAMEA POPEN
9c40: 43 41 52 44 4e 41 4d 45 3b 0d 0a 74 79 70 65 64  CARDNAME;..typed
9c50: 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d  ef LPOPENCARDNAM
9c60: 45 41 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d  EA LPOPENCARDNAM
9c70: 45 3b 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 55 4e  E;..#endif // UN
9c80: 49 43 4f 44 45 0d 0a 0d 0a 2f 2f 20 42 61 63 6b  ICODE....// Back
9c90: 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
9ca0: 69 74 79 20 6d 61 63 72 6f 73 0d 0a 23 64 65 66  ity macros..#def
9cb0: 69 6e 65 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45  ine OPENCARDNAME
9cc0: 5f 41 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41  _A OPENCARDNAMEA
9cd0: 0d 0a 23 64 65 66 69 6e 65 20 4f 50 45 4e 43 41  ..#define OPENCA
9ce0: 52 44 4e 41 4d 45 5f 57 20 4f 50 45 4e 43 41 52  RDNAME_W OPENCAR
9cf0: 44 4e 41 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20  DNAMEW..#define 
9d00: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20  POPENCARDNAME_A 
9d10: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d 0a  POPENCARDNAMEA..
9d20: 23 64 65 66 69 6e 65 20 50 4f 50 45 4e 43 41 52  #define POPENCAR
9d30: 44 4e 41 4d 45 5f 57 20 50 4f 50 45 4e 43 41 52  DNAME_W POPENCAR
9d40: 44 4e 41 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20  DNAMEW..#define 
9d50: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41  LPOPENCARDNAME_A
9d60: 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41   LPOPENCARDNAMEA
9d70: 0d 0a 23 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e  ..#define LPOPEN
9d80: 43 41 52 44 4e 41 4d 45 5f 57 20 4c 50 4f 50 45  CARDNAME_W LPOPE
9d90: 4e 43 41 52 44 4e 41 4d 45 57 0d 0a 0d 0a 65 78  NCARDNAMEW....ex
9da0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
9db0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 47 65   LONG WINAPI..Ge
9dc0: 74 4f 70 65 6e 43 61 72 64 4e 61 6d 65 41 28 0d  tOpenCardNameA(.
9dd0: 0a 20 20 20 20 4c 50 4f 50 45 4e 43 41 52 44 4e  .    LPOPENCARDN
9de0: 41 4d 45 41 29 3b 0d 0a 65 78 74 65 72 6e 20 57  AMEA);..extern W
9df0: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
9e00: 57 49 4e 41 50 49 0d 0a 47 65 74 4f 70 65 6e 43  WINAPI..GetOpenC
9e10: 61 72 64 4e 61 6d 65 57 28 0d 0a 20 20 20 20 4c  ardNameW(..    L
9e20: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 29 3b  POPENCARDNAMEW);
9e30: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45  ..#ifdef UNICODE
9e40: 0d 0a 23 64 65 66 69 6e 65 20 47 65 74 4f 70 65  ..#define GetOpe
9e50: 6e 43 61 72 64 4e 61 6d 65 20 20 47 65 74 4f 70  nCardName  GetOp
9e60: 65 6e 43 61 72 64 4e 61 6d 65 57 0d 0a 23 65 6c  enCardNameW..#el
9e70: 73 65 0d 0a 23 64 65 66 69 6e 65 20 47 65 74 4f  se..#define GetO
9e80: 70 65 6e 43 61 72 64 4e 61 6d 65 20 20 47 65 74  penCardName  Get
9e90: 4f 70 65 6e 43 61 72 64 4e 61 6d 65 41 0d 0a 23  OpenCardNameA..#
9ea0: 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44  endif // !UNICOD
9eb0: 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  E....extern WINS
9ec0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
9ed0: 41 50 49 0d 0a 53 43 61 72 64 44 6c 67 45 78 74  API..SCardDlgExt
9ee0: 65 6e 64 65 64 45 72 72 6f 72 20 28 76 6f 69 64  endedError (void
9ef0: 29 3b 0d 0a 0d 0a 23 69 66 20 28 4e 54 44 44 49  );....#if (NTDDI
9f00: 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44  _VERSION >= NTDD
9f10: 49 5f 56 49 53 54 41 29 0d 0a 0d 0a 2f 2f 0d 0a  I_VISTA)....//..
9f20: 2f 2f 20 53 6d 61 72 74 63 61 72 64 20 43 61 63  // Smartcard Cac
9f30: 68 69 6e 67 20 41 50 49 0d 0a 2f 2f 0d 0a 0d 0a  hing API..//....
9f40: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
9f50: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
9f60: 53 43 61 72 64 52 65 61 64 43 61 63 68 65 41 28  SCardReadCacheA(
9f70: 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 53 43 41 52  ..    __in  SCAR
9f80: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78  DCONTEXT hContex
9f90: 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 55 55  t,..    __in  UU
9fa0: 49 44 20 2a 43 61 72 64 49 64 65 6e 74 69 66 69  ID *CardIdentifi
9fb0: 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 20 44  er,..    __in  D
9fc0: 57 4f 52 44 20 46 72 65 73 68 6e 65 73 73 43 6f  WORD FreshnessCo
9fd0: 75 6e 74 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e  unter,..    __in
9fe0: 20 20 4c 50 53 54 52 20 4c 6f 6f 6b 75 70 4e 61    LPSTR LookupNa
9ff0: 6d 65 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74 5f 62  me,..    __out_b
a000: 63 6f 75 6e 74 28 2a 44 61 74 61 4c 65 6e 29 20  count(*DataLen) 
a010: 50 42 59 54 45 20 44 61 74 61 2c 0d 0a 20 20 20  PBYTE Data,..   
a020: 20 5f 5f 6f 75 74 20 44 57 4f 52 44 20 2a 44 61   __out DWORD *Da
a030: 74 61 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e 20  taLen);..extern 
a040: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
a050: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 52 65   WINAPI..SCardRe
a060: 61 64 43 61 63 68 65 57 28 0d 0a 20 20 20 20 5f  adCacheW(..    _
a070: 5f 69 6e 20 20 53 43 41 52 44 43 4f 4e 54 45 58  _in  SCARDCONTEX
a080: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
a090: 20 5f 5f 69 6e 20 20 55 55 49 44 20 2a 43 61 72   __in  UUID *Car
a0a0: 64 49 64 65 6e 74 69 66 69 65 72 2c 0d 0a 20 20  dIdentifier,..  
a0b0: 20 20 5f 5f 69 6e 20 20 44 57 4f 52 44 20 46 72    __in  DWORD Fr
a0c0: 65 73 68 6e 65 73 73 43 6f 75 6e 74 65 72 2c 0d  eshnessCounter,.
a0d0: 0a 20 20 20 20 5f 5f 69 6e 20 20 4c 50 57 53 54  .    __in  LPWST
a0e0: 52 20 4c 6f 6f 6b 75 70 4e 61 6d 65 2c 0d 0a 20  R LookupName,.. 
a0f0: 20 20 20 5f 5f 6f 75 74 5f 62 63 6f 75 6e 74 28     __out_bcount(
a100: 2a 44 61 74 61 4c 65 6e 29 20 50 42 59 54 45 20  *DataLen) PBYTE 
a110: 44 61 74 61 2c 0d 0a 20 20 20 20 5f 5f 6f 75 74  Data,..    __out
a120: 20 44 57 4f 52 44 20 2a 44 61 74 61 4c 65 6e 29   DWORD *DataLen)
a130: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44  ;..#ifdef UNICOD
a140: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  E..#define SCard
a150: 52 65 61 64 43 61 63 68 65 20 20 53 43 61 72 64  ReadCache  SCard
a160: 52 65 61 64 43 61 63 68 65 57 0d 0a 23 65 6c 73  ReadCacheW..#els
a170: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64  e..#define SCard
a180: 52 65 61 64 43 61 63 68 65 20 20 53 43 61 72 64  ReadCache  SCard
a190: 52 65 61 64 43 61 63 68 65 41 0d 0a 23 65 6e 64  ReadCacheA..#end
a1a0: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
a1b0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
a1c0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
a1d0: 0d 0a 53 43 61 72 64 57 72 69 74 65 43 61 63 68  ..SCardWriteCach
a1e0: 65 41 28 0d 0a 20 20 20 20 5f 5f 69 6e 20 53 43  eA(..    __in SC
a1f0: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
a200: 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 55  ext,..    __in U
a210: 55 49 44 20 2a 43 61 72 64 49 64 65 6e 74 69 66  UID *CardIdentif
a220: 69 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e 20 44  ier,..    __in D
a230: 57 4f 52 44 20 46 72 65 73 68 6e 65 73 73 43 6f  WORD FreshnessCo
a240: 75 6e 74 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e  unter,..    __in
a250: 20 4c 50 53 54 52 20 4c 6f 6f 6b 75 70 4e 61 6d   LPSTR LookupNam
a260: 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f 62 63 6f  e,..    __in_bco
a270: 75 6e 74 28 44 61 74 61 4c 65 6e 29 20 50 42 59  unt(DataLen) PBY
a280: 54 45 20 44 61 74 61 2c 0d 0a 20 20 20 20 5f 5f  TE Data,..    __
a290: 69 6e 20 44 57 4f 52 44 20 44 61 74 61 4c 65 6e  in DWORD DataLen
a2a0: 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43  );..extern WINSC
a2b0: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41  ARDAPI LONG WINA
a2c0: 50 49 0d 0a 53 43 61 72 64 57 72 69 74 65 43 61  PI..SCardWriteCa
a2d0: 63 68 65 57 28 0d 0a 20 20 20 20 5f 5f 69 6e 20  cheW(..    __in 
a2e0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
a2f0: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 5f 5f 69 6e  ntext,..    __in
a300: 20 55 55 49 44 20 2a 43 61 72 64 49 64 65 6e 74   UUID *CardIdent
a310: 69 66 69 65 72 2c 0d 0a 20 20 20 20 5f 5f 69 6e  ifier,..    __in
a320: 20 44 57 4f 52 44 20 46 72 65 73 68 6e 65 73 73   DWORD Freshness
a330: 43 6f 75 6e 74 65 72 2c 0d 0a 20 20 20 20 5f 5f  Counter,..    __
a340: 69 6e 20 4c 50 57 53 54 52 20 4c 6f 6f 6b 75 70  in LPWSTR Lookup
a350: 4e 61 6d 65 2c 0d 0a 20 20 20 20 5f 5f 69 6e 5f  Name,..    __in_
a360: 62 63 6f 75 6e 74 28 44 61 74 61 4c 65 6e 29 20  bcount(DataLen) 
a370: 50 42 59 54 45 20 44 61 74 61 2c 0d 0a 20 20 20  PBYTE Data,..   
a380: 20 5f 5f 69 6e 20 44 57 4f 52 44 20 44 61 74 61   __in DWORD Data
a390: 4c 65 6e 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  Len);..#ifdef UN
a3a0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
a3b0: 43 61 72 64 57 72 69 74 65 43 61 63 68 65 20 20  CardWriteCache  
a3c0: 53 43 61 72 64 57 72 69 74 65 43 61 63 68 65 57  SCardWriteCacheW
a3d0: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65  ..#else..#define
a3e0: 20 53 43 61 72 64 57 72 69 74 65 43 61 63 68 65   SCardWriteCache
a3f0: 20 20 53 43 61 72 64 57 72 69 74 65 43 61 63 68    SCardWriteCach
a400: 65 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55  eA..#endif // !U
a410: 4e 49 43 4f 44 45 0d 0a 0d 0a 23 65 6e 64 69 66  NICODE....#endif
a420: 20 2f 2f 20 28 4e 54 44 44 49 5f 56 45 52 53 49   // (NTDDI_VERSI
a430: 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 56 49 53 54  ON >= NTDDI_VIST
a440: 41 29 0d 0a 0d 0a 23 69 66 64 65 66 20 5f 5f 63  A)....#ifdef __c
a450: 70 6c 75 73 70 6c 75 73 0d 0a 7d 0d 0a 23 65 6e  plusplus..}..#en
a460: 64 69 66 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 5f  dif..#endif // _
a470: 57 49 4e 53 43 41 52 44 5f 48 5f 0d 0a 0d 0a 0d  WINSCARD_H_.....
a480: 0a                                               .