Hex Artifact Content

Artifact b54aa4ee896e2e4140591ed48e6fbc4b9f615a74:


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 0d 0a 23 69 6e  .#endif......#in
01b0: 63 6c 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68  clude <windows.h
01c0: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 77 74 79  >..#include <wty
01d0: 70 65 73 2e 68 3e 0d 0a 23 69 6e 63 6c 75 64 65  pes.h>..#include
01e0: 20 3c 77 69 6e 69 6f 63 74 6c 2e 68 3e 0d 0a 23   <winioctl.h>..#
01f0: 69 6e 63 6c 75 64 65 20 22 77 69 6e 73 6d 63 72  include "winsmcr
0200: 64 2e 68 22 0d 0a 23 69 66 6e 64 65 66 20 53 43  d.h"..#ifndef SC
0210: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 0d 0a 23  ARD_S_SUCCESS..#
0220: 69 6e 63 6c 75 64 65 20 22 53 43 61 72 64 45 72  include "SCardEr
0230: 72 2e 68 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  r.h"..#endif....
0240: 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c  #ifdef __cpluspl
0250: 75 73 0d 0a 65 78 74 65 72 6e 20 22 43 22 20 7b  us..extern "C" {
0260: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 0d 0a 23 69  ..#endif......#i
0270: 66 20 31 20 2f 2a 20 6a 6b 6d 20 2a 2f 0d 0a 23  f 1 /* jkm */..#
0280: 69 66 6e 64 65 66 20 5f 5f 4c 50 43 47 55 49 44  ifndef __LPCGUID
0290: 5f 44 45 46 49 4e 45 44 5f 5f 0d 0a 23 64 65 66  _DEFINED__..#def
02a0: 69 6e 65 20 5f 5f 4c 50 43 47 55 49 44 5f 44 45  ine __LPCGUID_DE
02b0: 46 49 4e 45 44 5f 5f 0d 0a 74 79 70 65 64 65 66  FINED__..typedef
02c0: 20 63 6f 6e 73 74 20 47 55 49 44 20 2a 4c 50 43   const GUID *LPC
02d0: 47 55 49 44 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23  GUID;..#endif..#
02e0: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65 66  endif....#ifndef
02f0: 20 5f 4c 50 43 42 59 54 45 5f 44 45 46 49 4e 45   _LPCBYTE_DEFINE
0300: 44 0d 0a 23 64 65 66 69 6e 65 20 5f 4c 50 43 42  D..#define _LPCB
0310: 59 54 45 5f 44 45 46 49 4e 45 44 0d 0a 74 79 70  YTE_DEFINED..typ
0320: 65 64 65 66 20 63 6f 6e 73 74 20 42 59 54 45 20  edef const BYTE 
0330: 2a 4c 50 43 42 59 54 45 3b 0d 0a 23 65 6e 64 69  *LPCBYTE;..#endi
0340: 66 0d 0a 23 69 66 6e 64 65 66 20 5f 4c 50 43 56  f..#ifndef _LPCV
0350: 4f 49 44 5f 44 45 46 49 4e 45 44 0d 0a 23 64 65  OID_DEFINED..#de
0360: 66 69 6e 65 20 5f 4c 50 43 56 4f 49 44 5f 44 45  fine _LPCVOID_DE
0370: 46 49 4e 45 44 0d 0a 74 79 70 65 64 65 66 20 63  FINED..typedef c
0380: 6f 6e 73 74 20 56 4f 49 44 20 2a 4c 50 43 56 4f  onst VOID *LPCVO
0390: 49 44 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  ID;..#endif....#
03a0: 69 66 6e 64 65 66 20 57 49 4e 53 43 41 52 44 41  ifndef WINSCARDA
03b0: 50 49 0d 0a 23 64 65 66 69 6e 65 20 57 49 4e 53  PI..#define WINS
03c0: 43 41 52 44 41 50 49 0d 0a 23 65 6e 64 69 66 0d  CARDAPI..#endif.
03d0: 0a 23 69 66 6e 64 65 66 20 57 49 4e 53 43 41 52  .#ifndef WINSCAR
03e0: 44 44 41 54 41 0d 0a 23 64 65 66 69 6e 65 20 57  DDATA..#define W
03f0: 49 4e 53 43 41 52 44 44 41 54 41 20 5f 5f 64 65  INSCARDDATA __de
0400: 63 6c 73 70 65 63 28 64 6c 6c 69 6d 70 6f 72 74  clspec(dllimport
0410: 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 20  )..#endif..../* 
0420: 49 6e 20 63 6c 72 3a 70 75 72 65 20 77 65 20 63  In clr:pure we c
0430: 61 6e 6e 6f 74 20 6d 61 72 6b 20 64 61 74 61 20  annot mark data 
0440: 65 78 70 6f 72 74 20 77 69 74 68 20 64 6c 6c 69  export with dlli
0450: 6d 70 6f 72 74 2e 0d 0a 20 2a 20 57 65 20 73 68  mport... * We sh
0460: 6f 75 6c 64 20 61 64 64 20 73 6d 61 6c 6c 20 66  ould add small f
0470: 75 6e 63 74 69 6f 6e 73 20 77 68 69 63 68 20 72  unctions which r
0480: 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65  eturns the value
0490: 20 6f 66 0d 0a 20 2a 20 74 68 65 20 67 6c 6f 62   of.. * the glob
04a0: 61 6c 2e 0d 0a 20 2a 2f 0d 0a 23 69 66 20 21 64  al... */..#if !d
04b0: 65 66 69 6e 65 64 28 5f 4d 5f 43 45 45 5f 50 55  efined(_M_CEE_PU
04c0: 52 45 29 0d 0a 57 49 4e 53 43 41 52 44 44 41 54  RE)..WINSCARDDAT
04d0: 41 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 53  A extern const S
04e0: 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 0d  CARD_IO_REQUEST.
04f0: 0a 20 20 20 20 67 5f 72 67 53 43 61 72 64 54 30  .    g_rgSCardT0
0500: 50 63 69 2c 0d 0a 20 20 20 20 67 5f 72 67 53 43  Pci,..    g_rgSC
0510: 61 72 64 54 31 50 63 69 2c 0d 0a 20 20 20 20 67  ardT1Pci,..    g
0520: 5f 72 67 53 43 61 72 64 52 61 77 50 63 69 3b 0d  _rgSCardRawPci;.
0530: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 50  .#define SCARD_P
0540: 43 49 5f 54 30 20 20 28 26 67 5f 72 67 53 43 61  CI_T0  (&g_rgSCa
0550: 72 64 54 30 50 63 69 29 0d 0a 23 64 65 66 69 6e  rdT0Pci)..#defin
0560: 65 20 53 43 41 52 44 5f 50 43 49 5f 54 31 20 20  e SCARD_PCI_T1  
0570: 28 26 67 5f 72 67 53 43 61 72 64 54 31 50 63 69  (&g_rgSCardT1Pci
0580: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
0590: 5f 50 43 49 5f 52 41 57 20 28 26 67 5f 72 67 53  _PCI_RAW (&g_rgS
05a0: 43 61 72 64 52 61 77 50 63 69 29 0d 0a 23 65 6e  CardRawPci)..#en
05b0: 64 69 66 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f  dif....//../////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d  ///////////..//.
0610: 0a 2f 2f 20 20 53 65 72 76 69 63 65 20 4d 61 6e  .//  Service Man
0620: 61 67 65 72 20 41 63 63 65 73 73 20 53 65 72 76  ager Access Serv
0630: 69 63 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20  ices..//..//    
0640: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
0650: 73 65 72 76 69 63 65 73 20 61 72 65 20 75 73 65  services are use
0660: 64 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72  d to manage user
0670: 20 61 6e 64 20 74 65 72 6d 69 6e 61 6c 20 63 6f   and terminal co
0680: 6e 74 65 78 74 73 20 66 6f 72 0d 0a 2f 2f 20 20  ntexts for..//  
0690: 20 20 20 20 53 6d 61 72 74 20 43 61 72 64 73 2e      Smart Cards.
06a0: 0d 0a 2f 2f 0d 0a 0d 0a 74 79 70 65 64 65 66 20  ..//....typedef 
06b0: 55 4c 4f 4e 47 5f 50 54 52 20 53 43 41 52 44 43  ULONG_PTR SCARDC
06c0: 4f 4e 54 45 58 54 3b 0d 0a 74 79 70 65 64 65 66  ONTEXT;..typedef
06d0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 2a 50   SCARDCONTEXT *P
06e0: 53 43 41 52 44 43 4f 4e 54 45 58 54 2c 20 2a 4c  SCARDCONTEXT, *L
06f0: 50 53 43 41 52 44 43 4f 4e 54 45 58 54 3b 0d 0a  PSCARDCONTEXT;..
0700: 0d 0a 74 79 70 65 64 65 66 20 55 4c 4f 4e 47 5f  ..typedef ULONG_
0710: 50 54 52 20 53 43 41 52 44 48 41 4e 44 4c 45 3b  PTR SCARDHANDLE;
0720: 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 44 48  ..typedef SCARDH
0730: 41 4e 44 4c 45 20 2a 50 53 43 41 52 44 48 41 4e  ANDLE *PSCARDHAN
0740: 44 4c 45 2c 20 2a 4c 50 53 43 41 52 44 48 41 4e  DLE, *LPSCARDHAN
0750: 44 4c 45 3b 0d 0a 0d 0a 23 64 65 66 69 6e 65 20  DLE;....#define 
0760: 53 43 41 52 44 5f 41 55 54 4f 41 4c 4c 4f 43 41  SCARD_AUTOALLOCA
0770: 54 45 20 28 44 57 4f 52 44 29 28 2d 31 29 0d 0a  TE (DWORD)(-1)..
0780: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
0790: 53 43 4f 50 45 5f 55 53 45 52 20 20 20 20 20 30  SCOPE_USER     0
07a0: 20 20 2f 2f 20 54 68 65 20 63 6f 6e 74 65 78 74    // The context
07b0: 20 69 73 20 61 20 75 73 65 72 20 63 6f 6e 74 65   is a user conte
07c0: 78 74 2c 20 61 6e 64 20 61 6e 79 0d 0a 20 20 20  xt, and any..   
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
07f0: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
0800: 6f 6e 73 20 61 72 65 20 70 65 72 66 6f 72 6d 65  ons are performe
0810: 64 20 77 69 74 68 69 6e 20 74 68 65 0d 0a 20 20  d within the..  
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0840: 20 64 6f 6d 61 69 6e 20 6f 66 20 74 68 65 20 75   domain of the u
0850: 73 65 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43  ser...#define SC
0860: 41 52 44 5f 53 43 4f 50 45 5f 54 45 52 4d 49 4e  ARD_SCOPE_TERMIN
0870: 41 4c 20 31 20 20 2f 2f 20 54 68 65 20 63 6f 6e  AL 1  // The con
0880: 74 65 78 74 20 69 73 20 74 68 61 74 20 6f 66 20  text is that of 
0890: 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 72 6d  the current term
08a0: 69 6e 61 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  inal,..         
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 2f 2f 20 61 6e 64 20 61 6e         // and an
08d0: 79 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61  y database opera
08e0: 74 69 6f 6e 73 20 61 72 65 20 70 65 72 66 6f 72  tions are perfor
08f0: 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  med..           
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 20 20 20 2f 2f 20 77 69 74 68 69 6e 20 74       // within t
0920: 68 65 20 64 6f 6d 61 69 6e 20 6f 66 20 74 68 61  he domain of tha
0930: 74 20 74 65 72 6d 69 6e 61 6c 2e 20 20 28 54 68  t terminal.  (Th
0940: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0960: 20 20 20 2f 2f 20 63 61 6c 6c 69 6e 67 20 61 70     // calling ap
0970: 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 20 68  plication must h
0980: 61 76 65 20 61 70 70 72 6f 70 72 69 61 74 65 0d  ave appropriate.
0990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 2f 2f 20 61 63 63 65 73 73 20 70 65 72 6d 69   // access permi
09c0: 73 73 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 64  ssions for any d
09d0: 61 74 61 62 61 73 65 20 61 63 74 69 6f 6e 73 2e  atabase actions.
09e0: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
09f0: 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 20 20 20  _SCOPE_SYSTEM   
0a00: 20 32 20 2f 2f 20 54 68 65 20 63 6f 6e 74 65 78   2 // The contex
0a10: 74 20 69 73 20 74 68 65 20 73 79 73 74 65 6d 20  t is the system 
0a20: 63 6f 6e 74 65 78 74 2c 20 61 6e 64 20 61 6e 79  context, and any
0a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a50: 20 20 2f 2f 20 64 61 74 61 62 61 73 65 20 6f 70    // database op
0a60: 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 65 72  erations are per
0a70: 66 6f 72 6d 65 64 20 77 69 74 68 69 6e 20 74 68  formed within th
0a80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0aa0: 20 20 20 2f 2f 20 64 6f 6d 61 69 6e 20 6f 66 20     // domain of 
0ab0: 74 68 65 20 73 79 73 74 65 6d 2e 20 20 28 54 68  the system.  (Th
0ac0: 65 20 63 61 6c 6c 69 6e 67 0d 0a 20 20 20 20 20  e calling..     
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 70             // ap
0af0: 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 20 68  plication must h
0b00: 61 76 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ave appropriate 
0b10: 61 63 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20  access..        
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 20 20 20 20 20 2f 2f 20 70 65 72 6d 69          // permi
0b40: 73 73 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 64  ssions for any d
0b50: 61 74 61 62 61 73 65 20 61 63 74 69 6f 6e 73 2e  atabase actions.
0b60: 29 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  )....extern WINS
0b70: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
0b80: 41 50 49 0d 0a 53 43 61 72 64 45 73 74 61 62 6c  API..SCardEstabl
0b90: 69 73 68 43 6f 6e 74 65 78 74 28 0d 0a 20 20 20  ishContext(..   
0ba0: 20 20 20 44 57 4f 52 44 20 64 77 53 63 6f 70 65     DWORD dwScope
0bb0: 2c 0d 0a 20 20 20 20 20 20 4c 50 43 56 4f 49 44  ,..      LPCVOID
0bc0: 20 70 76 52 65 73 65 72 76 65 64 31 2c 0d 0a 20   pvReserved1,.. 
0bd0: 20 20 20 20 20 4c 50 43 56 4f 49 44 20 70 76 52       LPCVOID pvR
0be0: 65 73 65 72 76 65 64 32 2c 0d 0a 20 20 20 20 20  eserved2,..     
0bf0: 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 54 20 70  LPSCARDCONTEXT p
0c00: 68 43 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 65 78  hContext);....ex
0c10: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
0c20: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
0c30: 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 65 78  ardReleaseContex
0c40: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 43  t(..          SC
0c50: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
0c60: 65 78 74 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20  ext);....extern 
0c70: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
0c80: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 73   WINAPI..SCardIs
0c90: 56 61 6c 69 64 43 6f 6e 74 65 78 74 28 0d 0a 20  ValidContext(.. 
0ca0: 20 20 20 20 20 20 20 20 20 53 43 41 52 44 43 4f           SCARDCO
0cb0: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 29 3b  NTEXT hContext);
0cc0: 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f  ......//..//////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a  //////////..//..
0d20: 2f 2f 20 20 53 6d 61 72 74 20 43 61 72 64 20 44  //  Smart Card D
0d30: 61 74 61 62 61 73 65 20 4d 61 6e 61 67 65 6d 65  atabase Manageme
0d40: 6e 74 20 53 65 72 76 69 63 65 73 0d 0a 2f 2f 0d  nt Services..//.
0d50: 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 66 6f 6c  .//      The fol
0d60: 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 65 73 20  lowing services 
0d70: 70 72 6f 76 69 64 65 20 66 6f 72 20 6d 61 6e 61  provide for mana
0d80: 67 69 6e 67 20 74 68 65 20 53 6d 61 72 74 20 43  ging the Smart C
0d90: 61 72 64 20 44 61 74 61 62 61 73 65 2e 0d 0a 2f  ard Database.../
0da0: 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  /....#define SCA
0db0: 52 44 5f 41 4c 4c 5f 52 45 41 44 45 52 53 20 20  RD_ALL_READERS  
0dc0: 20 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64       TEXT("SCard
0dd0: 24 41 6c 6c 52 65 61 64 65 72 73 5c 30 30 30 22  $AllReaders\000"
0de0: 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  )..#define SCARD
0df0: 5f 44 45 46 41 55 4c 54 5f 52 45 41 44 45 52 53  _DEFAULT_READERS
0e00: 20 20 20 54 45 58 54 28 22 53 43 61 72 64 24 44     TEXT("SCard$D
0e10: 65 66 61 75 6c 74 52 65 61 64 65 72 73 5c 30 30  efaultReaders\00
0e20: 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  0")..#define SCA
0e30: 52 44 5f 4c 4f 43 41 4c 5f 52 45 41 44 45 52 53  RD_LOCAL_READERS
0e40: 20 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64       TEXT("SCard
0e50: 24 4c 6f 63 61 6c 52 65 61 64 65 72 73 5c 30 30  $LocalReaders\00
0e60: 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  0")..#define SCA
0e70: 52 44 5f 53 59 53 54 45 4d 5f 52 45 41 44 45 52  RD_SYSTEM_READER
0e80: 53 20 20 20 20 54 45 58 54 28 22 53 43 61 72 64  S    TEXT("SCard
0e90: 24 53 79 73 74 65 6d 52 65 61 64 65 72 73 5c 30  $SystemReaders\0
0ea0: 30 30 22 29 0d 0a 0d 0a 23 64 65 66 69 6e 65 20  00")....#define 
0eb0: 53 43 41 52 44 5f 50 52 4f 56 49 44 45 52 5f 50  SCARD_PROVIDER_P
0ec0: 52 49 4d 41 52 59 20 20 31 20 20 20 2f 2f 20 50  RIMARY  1   // P
0ed0: 72 69 6d 61 72 79 20 50 72 6f 76 69 64 65 72 20  rimary Provider 
0ee0: 49 64 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  Id..#define SCAR
0ef0: 44 5f 50 52 4f 56 49 44 45 52 5f 43 53 50 20 20  D_PROVIDER_CSP  
0f00: 20 20 20 20 32 20 20 20 2f 2f 20 43 72 79 70 74      2   // Crypt
0f10: 6f 20 53 65 72 76 69 63 65 20 50 72 6f 76 69 64  o Service Provid
0f20: 65 72 20 49 64 0d 0a 23 64 65 66 69 6e 65 20 53  er Id..#define S
0f30: 43 41 52 44 5f 50 52 4f 56 49 44 45 52 5f 4b 53  CARD_PROVIDER_KS
0f40: 50 20 20 20 20 20 20 33 20 20 20 2f 2f 20 4b 65  P      3   // Ke
0f50: 79 20 53 74 6f 72 61 67 65 20 50 72 6f 76 69 64  y Storage Provid
0f60: 65 72 20 49 64 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f  er Id......//../
0f70: 2f 20 44 61 74 61 62 61 73 65 20 52 65 61 64 65  / Database Reade
0f80: 72 20 72 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a  r routines..//..
0f90: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
0fa0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
0fb0: 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  ..SCardListReade
0fc0: 72 47 72 6f 75 70 73 41 28 0d 0a 20 20 20 20 20  rGroupsA(..     
0fd0: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
0fe0: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
0ff0: 20 20 20 4c 50 53 54 52 20 6d 73 7a 47 72 6f 75     LPSTR mszGrou
1000: 70 73 2c 0d 0a 20 4c 50 44 57 4f 52 44 20 70 63  ps,.. LPDWORD pc
1010: 63 68 47 72 6f 75 70 73 29 3b 0d 0a 65 78 74 65  chGroups);..exte
1020: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
1030: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
1040: 64 4c 69 73 74 52 65 61 64 65 72 47 72 6f 75 70  dListReaderGroup
1050: 73 57 28 0d 0a 20 20 20 20 20 20 20 20 53 43 41  sW(..        SCA
1060: 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65  RDCONTEXT hConte
1070: 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 4c 50 57  xt,..        LPW
1080: 53 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c 0d 0a  STR mszGroups,..
1090: 20 4c 50 44 57 4f 52 44 20 70 63 63 68 47 72 6f   LPDWORD pcchGro
10a0: 75 70 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  ups);..#ifdef UN
10b0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
10c0: 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 47 72  CardListReaderGr
10d0: 6f 75 70 73 20 20 53 43 61 72 64 4c 69 73 74 52  oups  SCardListR
10e0: 65 61 64 65 72 47 72 6f 75 70 73 57 0d 0a 23 65  eaderGroupsW..#e
10f0: 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  lse..#define SCa
1100: 72 64 4c 69 73 74 52 65 61 64 65 72 47 72 6f 75  rdListReaderGrou
1110: 70 73 20 20 53 43 61 72 64 4c 69 73 74 52 65 61  ps  SCardListRea
1120: 64 65 72 47 72 6f 75 70 73 41 0d 0a 23 65 6e 64  derGroupsA..#end
1130: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
1140: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
1150: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
1160: 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  ..SCardListReade
1170: 72 73 41 28 0d 0a 20 20 20 20 20 20 20 20 20 53  rsA(..         S
1180: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
1190: 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 53  text,..     LPCS
11a0: 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c 0d 0a 20  TR mszGroups,.. 
11b0: 20 20 20 20 20 4c 50 53 54 52 20 6d 73 7a 52 65       LPSTR mszRe
11c0: 61 64 65 72 73 2c 0d 0a 20 20 4c 50 44 57 4f 52  aders,..  LPDWOR
11d0: 44 20 70 63 63 68 52 65 61 64 65 72 73 29 3b 0d  D pcchReaders);.
11e0: 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44  .extern WINSCARD
11f0: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d  API LONG WINAPI.
1200: 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72  .SCardListReader
1210: 73 57 28 0d 0a 20 20 20 20 20 20 20 20 20 53 43  sW(..         SC
1220: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
1230: 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53  ext,..     LPCWS
1240: 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c 0d 0a 20  TR mszGroups,.. 
1250: 20 20 20 20 20 4c 50 57 53 54 52 20 6d 73 7a 52       LPWSTR mszR
1260: 65 61 64 65 72 73 2c 0d 0a 20 20 4c 50 44 57 4f  eaders,..  LPDWO
1270: 52 44 20 70 63 63 68 52 65 61 64 65 72 73 29 3b  RD pcchReaders);
1280: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45  ..#ifdef UNICODE
1290: 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 4c  ..#define SCardL
12a0: 69 73 74 52 65 61 64 65 72 73 20 20 53 43 61 72  istReaders  SCar
12b0: 64 4c 69 73 74 52 65 61 64 65 72 73 57 0d 0a 23  dListReadersW..#
12c0: 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43  else..#define SC
12d0: 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 20 20  ardListReaders  
12e0: 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73  SCardListReaders
12f0: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
1300: 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20  ICODE....extern 
1310: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
1320: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c 69   WINAPI..SCardLi
1330: 73 74 43 61 72 64 73 41 28 0d 0a 20 20 20 20 20  stCardsA(..     
1340: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58       SCARDCONTEX
1350: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
1360: 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 72     LPCBYTE pbAtr
1370: 2c 0d 0a 20 20 20 20 20 20 4c 50 43 47 55 49 44  ,..      LPCGUID
1380: 20 72 67 71 75 69 64 49 6e 74 65 72 66 61 63 65   rgquidInterface
1390: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 57  s,..          DW
13a0: 4f 52 44 20 63 67 75 69 64 49 6e 74 65 72 66 61  ORD cguidInterfa
13b0: 63 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ceCount,..      
13c0: 4c 50 53 54 52 20 6d 73 7a 43 61 72 64 73 2c 0d  LPSTR mszCards,.
13d0: 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63 68  .   LPDWORD pcch
13e0: 43 61 72 64 73 29 3b 0d 0a 65 78 74 65 72 6e 20  Cards);..extern 
13f0: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
1400: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c 69   WINAPI..SCardLi
1410: 73 74 43 61 72 64 73 57 28 0d 0a 20 20 20 20 20  stCardsW(..     
1420: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58       SCARDCONTEX
1430: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
1440: 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 72     LPCBYTE pbAtr
1450: 2c 0d 0a 20 20 20 20 20 20 4c 50 43 47 55 49 44  ,..      LPCGUID
1460: 20 72 67 71 75 69 64 49 6e 74 65 72 66 61 63 65   rgquidInterface
1470: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 57  s,..          DW
1480: 4f 52 44 20 63 67 75 69 64 49 6e 74 65 72 66 61  ORD cguidInterfa
1490: 63 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ceCount,..      
14a0: 4c 50 57 53 54 52 20 6d 73 7a 43 61 72 64 73 2c  LPWSTR mszCards,
14b0: 0d 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63  ..   LPDWORD pcc
14c0: 68 43 61 72 64 73 29 3b 0d 0a 23 69 66 64 65 66  hCards);..#ifdef
14d0: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e   UNICODE..#defin
14e0: 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73  e SCardListCards
14f0: 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73    SCardListCards
1500: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e  W..#else..#defin
1510: 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73  e SCardListCards
1520: 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 64 73    SCardListCards
1530: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
1540: 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f  ICODE..//..// NO
1550: 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69  TE:    The routi
1560: 6e 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 64  ne SCardListCard
1570: 73 20 6e 61 6d 65 20 64 69 66 66 65 72 73 20 66  s name differs f
1580: 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 64 65  rom the PC/SC de
1590: 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f 2f 20 20 20  finition...//   
15a0: 20 20 20 20 20 20 20 49 74 20 73 68 6f 75 6c 64         It should
15b0: 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20   be:..//..//    
15c0: 20 20 20 20 20 20 20 20 20 20 65 78 74 65 72 6e            extern
15d0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e   WINSCARDAPI LON
15e0: 47 20 57 49 4e 41 50 49 0d 0a 2f 2f 20 20 20 20  G WINAPI..//    
15f0: 20 20 20 20 20 20 20 20 20 20 53 43 61 72 64 4c            SCardL
1600: 69 73 74 43 61 72 64 54 79 70 65 73 28 0d 0a 2f  istCardTypes(../
1610: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /               
1620: 20 20 20 20 20 20 20 20 20 53 43 41 52 44 43 4f           SCARDCO
1630: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
1640: 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20  .//             
1650: 20 20 20 20 20 20 20 4c 50 43 42 59 54 45 20 70         LPCBYTE p
1660: 62 41 74 72 2c 0d 0a 2f 2f 20 20 20 20 20 20 20  bAtr,..//       
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 43               LPC
1680: 47 55 49 44 20 72 67 71 75 69 64 49 6e 74 65 72  GUID rgquidInter
1690: 66 61 63 65 73 2c 0d 0a 2f 2f 20 20 20 20 20 20  faces,..//      
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 44 57 4f 52 44 20 63 67 75 69 64 49 6e 74    DWORD cguidInt
16c0: 65 72 66 61 63 65 43 6f 75 6e 74 2c 0d 0a 2f 2f  erfaceCount,..//
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e0: 20 20 20 4c 50 54 53 54 52 20 6d 73 7a 43 61 72     LPTSTR mszCar
16f0: 64 73 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20  ds,..//         
1700: 20 20 20 20 20 20 20 20 20 6f 75 74 20 20 20 4c           out   L
1710: 50 44 57 4f 52 44 20 70 63 63 68 43 61 72 64 73  PDWORD pcchCards
1720: 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20  );..//..//      
1730: 20 20 20 20 48 65 72 65 27 73 20 61 20 77 6f 72      Here's a wor
1740: 6b 2d 61 72 6f 75 6e 64 20 4d 41 43 52 4f 3a 0d  k-around MACRO:.
1750: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 4c 69  .#define SCardLi
1760: 73 74 43 61 72 64 54 79 70 65 73 20 53 43 61 72  stCardTypes SCar
1770: 64 4c 69 73 74 43 61 72 64 73 0d 0a 0d 0a 65 78  dListCards....ex
1780: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
1790: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
17a0: 61 72 64 4c 69 73 74 49 6e 74 65 72 66 61 63 65  ardListInterface
17b0: 73 41 28 0d 0a 20 20 20 20 20 20 20 20 20 53 43  sA(..         SC
17c0: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
17d0: 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c  ext,..         L
17e0: 50 43 53 54 52 20 73 7a 43 61 72 64 2c 0d 0a 20  PCSTR szCard,.. 
17f0: 20 20 20 20 20 20 20 4c 50 47 55 49 44 20 70 67         LPGUID pg
1800: 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c 0d 0a  uidInterfaces,..
1810: 20 20 4c 50 44 57 4f 52 44 20 70 63 67 75 69 64    LPDWORD pcguid
1820: 49 6e 74 65 72 66 61 63 65 73 29 3b 0d 0a 65 78  Interfaces);..ex
1830: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49  tern WINSCARDAPI
1840: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43   LONG WINAPI..SC
1850: 61 72 64 4c 69 73 74 49 6e 74 65 72 66 61 63 65  ardListInterface
1860: 73 57 28 0d 0a 20 20 20 20 20 20 20 20 20 53 43  sW(..         SC
1870: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
1880: 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c  ext,..         L
1890: 50 43 57 53 54 52 20 73 7a 43 61 72 64 2c 0d 0a  PCWSTR szCard,..
18a0: 20 20 20 20 20 20 20 20 4c 50 47 55 49 44 20 70          LPGUID p
18b0: 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c 0d  guidInterfaces,.
18c0: 0a 20 20 4c 50 44 57 4f 52 44 20 70 63 67 75 69  .  LPDWORD pcgui
18d0: 64 49 6e 74 65 72 66 61 63 65 73 29 3b 0d 0a 23  dInterfaces);..#
18e0: 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23  ifdef UNICODE..#
18f0: 64 65 66 69 6e 65 20 53 43 61 72 64 4c 69 73 74  define SCardList
1900: 49 6e 74 65 72 66 61 63 65 73 20 20 53 43 61 72  Interfaces  SCar
1910: 64 4c 69 73 74 49 6e 74 65 72 66 61 63 65 73 57  dListInterfacesW
1920: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65  ..#else..#define
1930: 20 53 43 61 72 64 4c 69 73 74 49 6e 74 65 72 66   SCardListInterf
1940: 61 63 65 73 20 20 53 43 61 72 64 4c 69 73 74 49  aces  SCardListI
1950: 6e 74 65 72 66 61 63 65 73 41 0d 0a 23 65 6e 64  nterfacesA..#end
1960: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
1970: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
1980: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
1990: 0d 0a 53 43 61 72 64 47 65 74 50 72 6f 76 69 64  ..SCardGetProvid
19a0: 65 72 49 64 41 28 0d 0a 20 20 20 20 20 20 20 20  erIdA(..        
19b0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
19c0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  ontext,..       
19d0: 20 20 4c 50 43 53 54 52 20 73 7a 43 61 72 64 2c    LPCSTR szCard,
19e0: 0d 0a 20 20 20 20 20 20 20 20 4c 50 47 55 49 44  ..        LPGUID
19f0: 20 70 67 75 69 64 50 72 6f 76 69 64 65 72 49 64   pguidProviderId
1a00: 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43  );..extern WINSC
1a10: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41  ARDAPI LONG WINA
1a20: 50 49 0d 0a 53 43 61 72 64 47 65 74 50 72 6f 76  PI..SCardGetProv
1a30: 69 64 65 72 49 64 57 28 0d 0a 20 20 20 20 20 20  iderIdW(..      
1a40: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
1a50: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
1a60: 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a 43 61      LPCWSTR szCa
1a70: 72 64 2c 0d 0a 20 20 20 20 20 20 20 20 4c 50 47  rd,..        LPG
1a80: 55 49 44 20 70 67 75 69 64 50 72 6f 76 69 64 65  UID pguidProvide
1a90: 72 49 64 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  rId);..#ifdef UN
1aa0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
1ab0: 43 61 72 64 47 65 74 50 72 6f 76 69 64 65 72 49  CardGetProviderI
1ac0: 64 20 20 53 43 61 72 64 47 65 74 50 72 6f 76 69  d  SCardGetProvi
1ad0: 64 65 72 49 64 57 0d 0a 23 65 6c 73 65 0d 0a 23  derIdW..#else..#
1ae0: 64 65 66 69 6e 65 20 53 43 61 72 64 47 65 74 50  define SCardGetP
1af0: 72 6f 76 69 64 65 72 49 64 20 20 53 43 61 72 64  roviderId  SCard
1b00: 47 65 74 50 72 6f 76 69 64 65 72 49 64 41 0d 0a  GetProviderIdA..
1b10: 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f  #endif // !UNICO
1b20: 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a  DE..//..// NOTE:
1b30: 20 20 20 20 54 68 65 20 72 6f 75 74 69 6e 65 20      The routine 
1b40: 53 43 61 72 64 47 65 74 50 72 6f 76 69 64 65 72  SCardGetProvider
1b50: 49 64 20 69 6e 20 74 68 69 73 20 69 6d 70 6c 65  Id in this imple
1b60: 6d 65 6e 74 61 74 69 6f 6e 20 75 73 65 73 20 47  mentation uses G
1b70: 55 49 44 73 2e 0d 0a 2f 2f 20 20 20 20 20 20 20  UIDs...//       
1b80: 20 20 20 54 68 65 20 50 43 2f 53 43 20 64 65 66     The PC/SC def
1b90: 69 6e 69 74 69 6f 6e 20 75 73 65 73 20 42 59 54  inition uses BYT
1ba0: 45 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72  Es...//....exter
1bb0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
1bc0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
1bd0: 47 65 74 43 61 72 64 54 79 70 65 50 72 6f 76 69  GetCardTypeProvi
1be0: 64 65 72 4e 61 6d 65 41 28 0d 0a 20 20 20 20 20  derNameA(..     
1bf0: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58       SCARDCONTEX
1c00: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
1c10: 20 20 20 20 20 20 20 4c 50 43 53 54 52 20 73 7a         LPCSTR sz
1c20: 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  CardName,..     
1c30: 20 20 20 20 20 44 57 4f 52 44 20 64 77 50 72 6f       DWORD dwPro
1c40: 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 4c  viderId,..     L
1c50: 50 53 54 52 20 73 7a 50 72 6f 76 69 64 65 72 2c  PSTR szProvider,
1c60: 0d 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 63 63  ..   LPDWORD pcc
1c70: 68 50 72 6f 76 69 64 65 72 29 3b 0d 0a 65 78 74  hProvider);..ext
1c80: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
1c90: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
1ca0: 72 64 47 65 74 43 61 72 64 54 79 70 65 50 72 6f  rdGetCardTypePro
1cb0: 76 69 64 65 72 4e 61 6d 65 57 28 0d 0a 20 20 20  viderNameW(..   
1cc0: 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54         SCARDCONT
1cd0: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20  EXT hContext,.. 
1ce0: 20 20 20 20 20 20 20 20 20 4c 50 43 57 53 54 52           LPCWSTR
1cf0: 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20   szCardName,..  
1d00: 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 64 77          DWORD dw
1d10: 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
1d20: 20 20 4c 50 57 53 54 52 20 73 7a 50 72 6f 76 69    LPWSTR szProvi
1d30: 64 65 72 2c 0d 0a 20 20 20 4c 50 44 57 4f 52 44  der,..   LPDWORD
1d40: 20 70 63 63 68 50 72 6f 76 69 64 65 72 29 3b 0d   pcchProvider);.
1d50: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d  .#ifdef UNICODE.
1d60: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 47 65  .#define SCardGe
1d70: 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 64 65  tCardTypeProvide
1d80: 72 4e 61 6d 65 20 20 53 43 61 72 64 47 65 74 43  rName  SCardGetC
1d90: 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e  ardTypeProviderN
1da0: 61 6d 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65  ameW..#else..#de
1db0: 66 69 6e 65 20 53 43 61 72 64 47 65 74 43 61 72  fine SCardGetCar
1dc0: 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d  dTypeProviderNam
1dd0: 65 20 20 53 43 61 72 64 47 65 74 43 61 72 64 54  e  SCardGetCardT
1de0: 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65 41  ypeProviderNameA
1df0: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49  ..#endif // !UNI
1e00: 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54  CODE..//..// NOT
1e10: 45 3a 20 20 20 20 54 68 69 73 20 72 6f 75 74 69  E:    This routi
1e20: 6e 65 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69  ne is an extensi
1e30: 6f 6e 20 74 6f 20 74 68 65 20 50 43 2f 53 43 20  on to the PC/SC 
1e40: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0d 0a 2f 2f  definitions...//
1e50: 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 44 61 74  ......//..// Dat
1e60: 61 62 61 73 65 20 57 72 69 74 65 72 20 72 6f 75  abase Writer rou
1e70: 74 69 6e 65 73 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74  tines..//....ext
1e80: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
1e90: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
1ea0: 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65  rdIntroduceReade
1eb0: 72 47 72 6f 75 70 41 28 0d 0a 20 20 20 20 20 53  rGroupA(..     S
1ec0: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
1ed0: 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 53  text,..     LPCS
1ee0: 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d 65 29 3b  TR szGroupName);
1ef0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
1f00: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
1f10: 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65  ..SCardIntroduce
1f20: 52 65 61 64 65 72 47 72 6f 75 70 57 28 0d 0a 20  ReaderGroupW(.. 
1f30: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54      SCARDCONTEXT
1f40: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20   hContext,..    
1f50: 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f 75 70   LPCWSTR szGroup
1f60: 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20 55  Name);..#ifdef U
1f70: 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20  NICODE..#define 
1f80: 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52 65  SCardIntroduceRe
1f90: 61 64 65 72 47 72 6f 75 70 20 20 53 43 61 72 64  aderGroup  SCard
1fa0: 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72 47  IntroduceReaderG
1fb0: 72 6f 75 70 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  roupW..#else..#d
1fc0: 65 66 69 6e 65 20 53 43 61 72 64 49 6e 74 72 6f  efine SCardIntro
1fd0: 64 75 63 65 52 65 61 64 65 72 47 72 6f 75 70 20  duceReaderGroup 
1fe0: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52   SCardIntroduceR
1ff0: 65 61 64 65 72 47 72 6f 75 70 41 0d 0a 23 65 6e  eaderGroupA..#en
2000: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d  dif // !UNICODE.
2010: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
2020: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
2030: 49 0d 0a 53 43 61 72 64 46 6f 72 67 65 74 52 65  I..SCardForgetRe
2040: 61 64 65 72 47 72 6f 75 70 41 28 0d 0a 20 20 20  aderGroupA(..   
2050: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68    SCARDCONTEXT h
2060: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c  Context,..     L
2070: 50 43 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d  PCSTR szGroupNam
2080: 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  e);..extern WINS
2090: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
20a0: 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 65 74  API..SCardForget
20b0: 52 65 61 64 65 72 47 72 6f 75 70 57 28 0d 0a 20  ReaderGroupW(.. 
20c0: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54      SCARDCONTEXT
20d0: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20   hContext,..    
20e0: 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f 75 70   LPCWSTR szGroup
20f0: 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20 55  Name);..#ifdef U
2100: 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20  NICODE..#define 
2110: 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 64 65  SCardForgetReade
2120: 72 47 72 6f 75 70 20 20 53 43 61 72 64 46 6f 72  rGroup  SCardFor
2130: 67 65 74 52 65 61 64 65 72 47 72 6f 75 70 57 0d  getReaderGroupW.
2140: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
2150: 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 64 65  SCardForgetReade
2160: 72 47 72 6f 75 70 20 20 53 43 61 72 64 46 6f 72  rGroup  SCardFor
2170: 67 65 74 52 65 61 64 65 72 47 72 6f 75 70 41 0d  getReaderGroupA.
2180: 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43  .#endif // !UNIC
2190: 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49  ODE....extern WI
21a0: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
21b0: 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e 74 72  INAPI..SCardIntr
21c0: 6f 64 75 63 65 52 65 61 64 65 72 41 28 0d 0a 20  oduceReaderA(.. 
21d0: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54      SCARDCONTEXT
21e0: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20   hContext,..    
21f0: 20 4c 50 43 53 54 52 20 73 7a 52 65 61 64 65 72   LPCSTR szReader
2200: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 4c 50 43 53  Name,..     LPCS
2210: 54 52 20 73 7a 44 65 76 69 63 65 4e 61 6d 65 29  TR szDeviceName)
2220: 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ;..extern WINSCA
2230: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
2240: 49 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 75 63  I..SCardIntroduc
2250: 65 52 65 61 64 65 72 57 28 0d 0a 20 20 20 20 20  eReaderW(..     
2260: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
2270: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43  ntext,..     LPC
2280: 57 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61 6d  WSTR szReaderNam
2290: 65 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52  e,..     LPCWSTR
22a0: 20 73 7a 44 65 76 69 63 65 4e 61 6d 65 29 3b 0d   szDeviceName);.
22b0: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d  .#ifdef UNICODE.
22c0: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 49 6e  .#define SCardIn
22d0: 74 72 6f 64 75 63 65 52 65 61 64 65 72 20 20 53  troduceReader  S
22e0: 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61  CardIntroduceRea
22f0: 64 65 72 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65  derW..#else..#de
2300: 66 69 6e 65 20 53 43 61 72 64 49 6e 74 72 6f 64  fine SCardIntrod
2310: 75 63 65 52 65 61 64 65 72 20 20 53 43 61 72 64  uceReader  SCard
2320: 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72 41  IntroduceReaderA
2330: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49  ..#endif // !UNI
2340: 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57  CODE....extern W
2350: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
2360: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72  WINAPI..SCardFor
2370: 67 65 74 52 65 61 64 65 72 41 28 0d 0a 20 20 20  getReaderA(..   
2380: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68    SCARDCONTEXT h
2390: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c  Context,..     L
23a0: 50 43 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61  PCSTR szReaderNa
23b0: 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e  me);..extern WIN
23c0: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
23d0: 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 65  NAPI..SCardForge
23e0: 74 52 65 61 64 65 72 57 28 0d 0a 20 20 20 20 20  tReaderW(..     
23f0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
2400: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43  ntext,..     LPC
2410: 57 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61 6d  WSTR szReaderNam
2420: 65 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43  e);..#ifdef UNIC
2430: 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  ODE..#define SCa
2440: 72 64 46 6f 72 67 65 74 52 65 61 64 65 72 20 20  rdForgetReader  
2450: 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 64 65  SCardForgetReade
2460: 72 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69  rW..#else..#defi
2470: 6e 65 20 53 43 61 72 64 46 6f 72 67 65 74 52 65  ne SCardForgetRe
2480: 61 64 65 72 20 20 53 43 61 72 64 46 6f 72 67 65  ader  SCardForge
2490: 74 52 65 61 64 65 72 41 0d 0a 23 65 6e 64 69 66  tReaderA..#endif
24a0: 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a   // !UNICODE....
24b0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
24c0: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
24d0: 53 43 61 72 64 41 64 64 52 65 61 64 65 72 54 6f  SCardAddReaderTo
24e0: 47 72 6f 75 70 41 28 0d 0a 20 20 20 20 20 53 43  GroupA(..     SC
24f0: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
2500: 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 53 54  ext,..     LPCST
2510: 52 20 73 7a 52 65 61 64 65 72 4e 61 6d 65 2c 0d  R szReaderName,.
2520: 0a 20 20 20 20 20 4c 50 43 53 54 52 20 73 7a 47  .     LPCSTR szG
2530: 72 6f 75 70 4e 61 6d 65 29 3b 0d 0a 65 78 74 65  roupName);..exte
2540: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
2550: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
2560: 64 41 64 64 52 65 61 64 65 72 54 6f 47 72 6f 75  dAddReaderToGrou
2570: 70 57 28 0d 0a 20 20 20 20 20 53 43 41 52 44 43  pW(..     SCARDC
2580: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
2590: 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52 20 73  ..     LPCWSTR s
25a0: 7a 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20  zReaderName,..  
25b0: 20 20 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f     LPCWSTR szGro
25c0: 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66  upName);..#ifdef
25d0: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e   UNICODE..#defin
25e0: 65 20 53 43 61 72 64 41 64 64 52 65 61 64 65 72  e SCardAddReader
25f0: 54 6f 47 72 6f 75 70 20 20 53 43 61 72 64 41 64  ToGroup  SCardAd
2600: 64 52 65 61 64 65 72 54 6f 47 72 6f 75 70 57 0d  dReaderToGroupW.
2610: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
2620: 53 43 61 72 64 41 64 64 52 65 61 64 65 72 54 6f  SCardAddReaderTo
2630: 47 72 6f 75 70 20 20 53 43 61 72 64 41 64 64 52  Group  SCardAddR
2640: 65 61 64 65 72 54 6f 47 72 6f 75 70 41 0d 0a 23  eaderToGroupA..#
2650: 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44  endif // !UNICOD
2660: 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  E....extern WINS
2670: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
2680: 41 50 49 0d 0a 53 43 61 72 64 52 65 6d 6f 76 65  API..SCardRemove
2690: 52 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 70 41  ReaderFromGroupA
26a0: 28 0d 0a 20 20 20 20 20 53 43 41 52 44 43 4f 4e  (..     SCARDCON
26b0: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a  TEXT hContext,..
26c0: 20 20 20 20 20 4c 50 43 53 54 52 20 73 7a 52 65       LPCSTR szRe
26d0: 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  aderName,..     
26e0: 4c 50 43 53 54 52 20 73 7a 47 72 6f 75 70 4e 61  LPCSTR szGroupNa
26f0: 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e  me);..extern WIN
2700: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
2710: 4e 41 50 49 0d 0a 53 43 61 72 64 52 65 6d 6f 76  NAPI..SCardRemov
2720: 65 52 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 70  eReaderFromGroup
2730: 57 28 0d 0a 20 20 20 20 20 53 43 41 52 44 43 4f  W(..     SCARDCO
2740: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d  NTEXT hContext,.
2750: 0a 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a  .     LPCWSTR sz
2760: 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20  ReaderName,..   
2770: 20 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f 75    LPCWSTR szGrou
2780: 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20  pName);..#ifdef 
2790: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65  UNICODE..#define
27a0: 20 53 43 61 72 64 52 65 6d 6f 76 65 52 65 61 64   SCardRemoveRead
27b0: 65 72 46 72 6f 6d 47 72 6f 75 70 20 20 53 43 61  erFromGroup  SCa
27c0: 72 64 52 65 6d 6f 76 65 52 65 61 64 65 72 46 72  rdRemoveReaderFr
27d0: 6f 6d 47 72 6f 75 70 57 0d 0a 23 65 6c 73 65 0d  omGroupW..#else.
27e0: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 52 65  .#define SCardRe
27f0: 6d 6f 76 65 52 65 61 64 65 72 46 72 6f 6d 47 72  moveReaderFromGr
2800: 6f 75 70 20 20 53 43 61 72 64 52 65 6d 6f 76 65  oup  SCardRemove
2810: 52 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 70 41  ReaderFromGroupA
2820: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49  ..#endif // !UNI
2830: 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57  CODE....extern W
2840: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20  INSCARDAPI LONG 
2850: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e 74  WINAPI..SCardInt
2860: 72 6f 64 75 63 65 43 61 72 64 54 79 70 65 41 28  roduceCardTypeA(
2870: 0d 0a 20 20 20 20 20 20 20 20 20 53 43 41 52 44  ..         SCARD
2880: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
2890: 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c 50 43 53  ,..         LPCS
28a0: 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a  TR szCardName,..
28b0: 20 20 20 20 20 4c 50 43 47 55 49 44 20 70 67 75       LPCGUID pgu
28c0: 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 64 65  idPrimaryProvide
28d0: 72 2c 0d 0a 20 20 20 20 20 4c 50 43 47 55 49 44  r,..     LPCGUID
28e0: 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 63 65   rgguidInterface
28f0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 44 57 4f  s,..         DWO
2900: 52 44 20 64 77 49 6e 74 65 72 66 61 63 65 43 6f  RD dwInterfaceCo
2910: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c  unt,..         L
2920: 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d 0a 20  PCBYTE pbAtr,.. 
2930: 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 45 20          LPCBYTE 
2940: 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 20 20 20 20  pbAtrMask,..    
2950: 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 74 72       DWORD cbAtr
2960: 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49  Len);..extern WI
2970: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
2980: 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e 74 72  INAPI..SCardIntr
2990: 6f 64 75 63 65 43 61 72 64 54 79 70 65 57 28 0d  oduceCardTypeW(.
29a0: 0a 20 20 20 20 20 20 20 20 20 53 43 41 52 44 43  .         SCARDC
29b0: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 4c 50 43 57 53  ..         LPCWS
29d0: 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a  TR szCardName,..
29e0: 20 20 20 20 20 4c 50 43 47 55 49 44 20 70 67 75       LPCGUID pgu
29f0: 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 64 65  idPrimaryProvide
2a00: 72 2c 0d 0a 20 20 20 20 20 4c 50 43 47 55 49 44  r,..     LPCGUID
2a10: 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 63 65   rgguidInterface
2a20: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 44 57 4f  s,..         DWO
2a30: 52 44 20 64 77 49 6e 74 65 72 66 61 63 65 43 6f  RD dwInterfaceCo
2a40: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c  unt,..         L
2a50: 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d 0a 20  PCBYTE pbAtr,.. 
2a60: 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 45 20          LPCBYTE 
2a70: 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 20 20 20 20  pbAtrMask,..    
2a80: 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 74 72       DWORD cbAtr
2a90: 4c 65 6e 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  Len);..#ifdef UN
2aa0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
2ab0: 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61 72  CardIntroduceCar
2ac0: 64 54 79 70 65 20 20 53 43 61 72 64 49 6e 74 72  dType  SCardIntr
2ad0: 6f 64 75 63 65 43 61 72 64 54 79 70 65 57 0d 0a  oduceCardTypeW..
2ae0: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53  #else..#define S
2af0: 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61 72  CardIntroduceCar
2b00: 64 54 79 70 65 20 20 53 43 61 72 64 49 6e 74 72  dType  SCardIntr
2b10: 6f 64 75 63 65 43 61 72 64 54 79 70 65 41 0d 0a  oduceCardTypeA..
2b20: 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f  #endif // !UNICO
2b30: 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a  DE..//..// NOTE:
2b40: 20 20 20 20 54 68 65 20 72 6f 75 74 69 6e 65 20      The routine 
2b50: 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61  SCardIntroduceCa
2b60: 72 64 54 79 70 65 27 73 20 70 61 72 61 6d 65 74  rdType's paramet
2b70: 65 72 73 27 20 6f 72 64 65 72 20 64 69 66 66 65  ers' order diffe
2b80: 72 73 20 66 72 6f 6d 0d 0a 2f 2f 20 20 20 20 20  rs from..//     
2b90: 20 20 20 20 20 74 68 65 20 50 43 2f 53 43 20 64       the PC/SC d
2ba0: 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 74 20 73  efinition.  It s
2bb0: 68 6f 75 6c 64 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f  hould be:..//../
2bc0: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  /              e
2bd0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50  xtern WINSCARDAP
2be0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 2f  I LONG WINAPI../
2bf0: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  /              S
2c00: 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 61 72  CardIntroduceCar
2c10: 64 54 79 70 65 28 0d 0a 2f 2f 20 20 20 20 20 20  dType(..//      
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
2c40: 6f 6e 74 65 78 74 2c 0d 0a 2f 2f 20 20 20 20 20  ontext,..//     
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c60: 20 20 4c 50 43 54 53 54 52 20 73 7a 43 61 72 64    LPCTSTR szCard
2c70: 4e 61 6d 65 2c 0d 0a 2f 2f 20 20 20 20 20 20 20  Name,..//       
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c90: 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d 0a  LPCBYTE pbAtr,..
2ca0: 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
2cb0: 20 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 45           LPCBYTE
2cc0: 20 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 2f 2f 20   pbAtrMask,..// 
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 74        DWORD cbAt
2cf0: 72 4c 65 6e 2c 0d 0a 2f 2f 20 20 20 20 20 20 20  rLen,..//       
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 43 47              LPCG
2d10: 55 49 44 20 70 67 75 69 64 50 72 69 6d 61 72 79  UID pguidPrimary
2d20: 50 72 6f 76 69 64 65 72 2c 0d 0a 2f 2f 20 20 20  Provider,..//   
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d40: 4c 50 43 47 55 49 44 20 72 67 67 75 69 64 49 6e  LPCGUID rgguidIn
2d50: 74 65 72 66 61 63 65 73 2c 0d 0a 2f 2f 20 20 20  terfaces,..//   
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d70: 20 20 20 20 44 57 4f 52 44 20 64 77 49 6e 74 65      DWORD dwInte
2d80: 72 66 61 63 65 43 6f 75 6e 74 29 3b 0d 0a 2f 2f  rfaceCount);..//
2d90: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 48 65  ..//          He
2da0: 72 65 27 73 20 61 20 77 6f 72 6b 2d 61 72 6f 75  re's a work-arou
2db0: 6e 64 20 4d 41 43 52 4f 3a 0d 0a 23 64 65 66 69  nd MACRO:..#defi
2dc0: 6e 65 20 50 43 53 43 61 72 64 49 6e 74 72 6f 64  ne PCSCardIntrod
2dd0: 75 63 65 43 61 72 64 54 79 70 65 28 68 43 6f 6e  uceCardType(hCon
2de0: 74 65 78 74 2c 20 73 7a 43 61 72 64 4e 61 6d 65  text, szCardName
2df0: 2c 20 70 62 41 74 72 2c 20 70 62 41 74 72 4d 61  , pbAtr, pbAtrMa
2e00: 73 6b 2c 20 63 62 41 74 72 4c 65 6e 2c 20 70 67  sk, cbAtrLen, pg
2e10: 75 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 64  uidPrimaryProvid
2e20: 65 72 2c 20 72 67 67 75 69 64 49 6e 74 65 72 66  er, rgguidInterf
2e30: 61 63 65 73 2c 20 64 77 49 6e 74 65 72 66 61 63  aces, dwInterfac
2e40: 65 43 6f 75 6e 74 29 20 5c 0d 0a 20 20 20 20 20  eCount) \..     
2e50: 20 20 20 20 20 53 43 61 72 64 49 6e 74 72 6f 64       SCardIntrod
2e60: 75 63 65 43 61 72 64 54 79 70 65 28 68 43 6f 6e  uceCardType(hCon
2e70: 74 65 78 74 2c 20 73 7a 43 61 72 64 4e 61 6d 65  text, szCardName
2e80: 2c 20 70 67 75 69 64 50 72 69 6d 61 72 79 50 72  , pguidPrimaryPr
2e90: 6f 76 69 64 65 72 2c 20 72 67 67 75 69 64 49 6e  ovider, rgguidIn
2ea0: 74 65 72 66 61 63 65 73 2c 20 64 77 49 6e 74 65  terfaces, dwInte
2eb0: 72 66 61 63 65 43 6f 75 6e 74 2c 20 70 62 41 74  rfaceCount, pbAt
2ec0: 72 2c 20 70 62 41 74 72 4d 61 73 6b 2c 20 63 62  r, pbAtrMask, cb
2ed0: 41 74 72 4c 65 6e 29 0d 0a 0d 0a 65 78 74 65 72  AtrLen)....exter
2ee0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
2ef0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
2f00: 53 65 74 43 61 72 64 54 79 70 65 50 72 6f 76 69  SetCardTypeProvi
2f10: 64 65 72 4e 61 6d 65 41 28 0d 0a 20 20 20 20 20  derNameA(..     
2f20: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
2f30: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43  ntext,..     LPC
2f40: 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d  STR szCardName,.
2f50: 0a 20 20 20 20 20 44 57 4f 52 44 20 64 77 50 72  .     DWORD dwPr
2f60: 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20  oviderId,..     
2f70: 4c 50 43 53 54 52 20 73 7a 50 72 6f 76 69 64 65  LPCSTR szProvide
2f80: 72 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  r);..extern WINS
2f90: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
2fa0: 41 50 49 0d 0a 53 43 61 72 64 53 65 74 43 61 72  API..SCardSetCar
2fb0: 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d  dTypeProviderNam
2fc0: 65 57 28 0d 0a 20 20 20 20 20 53 43 41 52 44 43  eW(..     SCARDC
2fd0: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c  ONTEXT hContext,
2fe0: 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52 20 73  ..     LPCWSTR s
2ff0: 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 20 20  zCardName,..    
3000: 20 44 57 4f 52 44 20 64 77 50 72 6f 76 69 64 65   DWORD dwProvide
3010: 72 49 64 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53  rId,..     LPCWS
3020: 54 52 20 73 7a 50 72 6f 76 69 64 65 72 29 3b 0d  TR szProvider);.
3030: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d  .#ifdef UNICODE.
3040: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 53 65  .#define SCardSe
3050: 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 64 65  tCardTypeProvide
3060: 72 4e 61 6d 65 20 20 53 43 61 72 64 53 65 74 43  rName  SCardSetC
3070: 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e  ardTypeProviderN
3080: 61 6d 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65  ameW..#else..#de
3090: 66 69 6e 65 20 53 43 61 72 64 53 65 74 43 61 72  fine SCardSetCar
30a0: 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d  dTypeProviderNam
30b0: 65 20 20 53 43 61 72 64 53 65 74 43 61 72 64 54  e  SCardSetCardT
30c0: 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d 65 41  ypeProviderNameA
30d0: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49  ..#endif // !UNI
30e0: 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54  CODE..//..// NOT
30f0: 45 3a 20 20 20 20 54 68 69 73 20 72 6f 75 74 69  E:    This routi
3100: 6e 65 20 69 73 20 61 6e 20 65 78 74 65 6e 74 69  ne is an extenti
3110: 6f 6e 20 74 6f 20 74 68 65 20 50 43 2f 53 43 20  on to the PC/SC 
3120: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 73 2e 0d  specifications..
3130: 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49  .//....extern WI
3140: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
3150: 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67  INAPI..SCardForg
3160: 65 74 43 61 72 64 54 79 70 65 41 28 0d 0a 20 20  etCardTypeA(..  
3170: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
3180: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
3190: 4c 50 43 53 54 52 20 73 7a 43 61 72 64 4e 61 6d  LPCSTR szCardNam
31a0: 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  e);..extern WINS
31b0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
31c0: 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 65 74  API..SCardForget
31d0: 43 61 72 64 54 79 70 65 57 28 0d 0a 20 20 20 20  CardTypeW(..    
31e0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
31f0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50  ontext,..     LP
3200: 43 57 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65  CWSTR szCardName
3210: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f  );..#ifdef UNICO
3220: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  DE..#define SCar
3230: 64 46 6f 72 67 65 74 43 61 72 64 54 79 70 65 20  dForgetCardType 
3240: 20 53 43 61 72 64 46 6f 72 67 65 74 43 61 72 64   SCardForgetCard
3250: 54 79 70 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  TypeW..#else..#d
3260: 65 66 69 6e 65 20 53 43 61 72 64 46 6f 72 67 65  efine SCardForge
3270: 74 43 61 72 64 54 79 70 65 20 20 53 43 61 72 64  tCardType  SCard
3280: 46 6f 72 67 65 74 43 61 72 64 54 79 70 65 41 0d  ForgetCardTypeA.
3290: 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43  .#endif // !UNIC
32a0: 4f 44 45 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f  ODE......//..///
32b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f  /////////////../
3300: 2f 0d 0a 2f 2f 20 20 53 65 72 76 69 63 65 20 4d  /..//  Service M
3310: 61 6e 61 67 65 72 20 53 75 70 70 6f 72 74 20 52  anager Support R
3320: 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20  outines..//..// 
3330: 20 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69       The followi
3340: 6e 67 20 73 65 72 76 69 63 65 73 20 61 72 65 20  ng services are 
3350: 73 75 70 70 6c 69 65 64 20 74 6f 20 73 69 6d 70  supplied to simp
3360: 6c 69 66 79 20 74 68 65 20 75 73 65 20 6f 66 20  lify the use of 
3370: 74 68 65 20 53 65 72 76 69 63 65 0d 0a 2f 2f 20  the Service..// 
3380: 20 20 20 20 20 4d 61 6e 61 67 65 72 20 41 50 49       Manager API
3390: 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e 20  ...//....extern 
33a0: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
33b0: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 72   WINAPI..SCardFr
33c0: 65 65 4d 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20  eeMemory(..     
33d0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f  SCARDCONTEXT hCo
33e0: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43  ntext,..     LPC
33f0: 56 4f 49 44 20 70 76 4d 65 6d 29 3b 0d 0a 0d 0a  VOID pvMem);....
3400: 23 69 66 20 28 4e 54 44 44 49 5f 56 45 52 53 49  #if (NTDDI_VERSI
3410: 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58  ON >= NTDDI_WINX
3420: 50 29 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43  P)..extern WINSC
3430: 41 52 44 41 50 49 20 48 41 4e 44 4c 45 20 57 49  ARDAPI HANDLE WI
3440: 4e 41 50 49 0d 0a 53 43 61 72 64 41 63 63 65 73  NAPI..SCardAcces
3450: 73 53 74 61 72 74 65 64 45 76 65 6e 74 28 76 6f  sStartedEvent(vo
3460: 69 64 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57  id);....extern W
3470: 49 4e 53 43 41 52 44 41 50 49 20 76 6f 69 64 20  INSCARDAPI void 
3480: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 52 65 6c  WINAPI..SCardRel
3490: 65 61 73 65 53 74 61 72 74 65 64 45 76 65 6e 74  easeStartedEvent
34a0: 28 76 6f 69 64 29 3b 0d 0a 23 65 6e 64 69 66 20  (void);..#endif 
34b0: 2f 2f 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f  // (NTDDI_VERSIO
34c0: 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58 50  N >= NTDDI_WINXP
34d0: 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f  )....//..///////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f  /////////..//../
3530: 2f 20 20 52 65 61 64 65 72 20 53 65 72 76 69 63  /  Reader Servic
3540: 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20  es..//..//      
3550: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  The following se
3560: 72 76 69 63 65 73 20 73 75 70 70 6c 79 20 6d 65  rvices supply me
3570: 61 6e 73 20 66 6f 72 20 74 72 61 63 6b 69 6e 67  ans for tracking
3580: 20 63 61 72 64 73 20 77 69 74 68 69 6e 20 72 65   cards within re
3590: 61 64 65 72 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 74 79  aders...//....ty
35a0: 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a  pedef struct {..
35b0: 20 20 20 20 4c 50 43 53 54 52 20 20 20 20 20 20      LPCSTR      
35c0: 73 7a 52 65 61 64 65 72 3b 20 20 20 20 20 20 20  szReader;       
35d0: 2f 2f 20 72 65 61 64 65 72 20 6e 61 6d 65 0d 0a  // reader name..
35e0: 20 20 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20      LPVOID      
35f0: 70 76 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  pvUserData;     
3600: 2f 2f 20 75 73 65 72 20 64 65 66 69 6e 65 64 20  // user defined 
3610: 64 61 74 61 0d 0a 20 20 20 20 44 57 4f 52 44 20  data..    DWORD 
3620: 20 20 20 20 20 20 64 77 43 75 72 72 65 6e 74 53        dwCurrentS
3630: 74 61 74 65 3b 20 2f 2f 20 63 75 72 72 65 6e 74  tate; // current
3640: 20 73 74 61 74 65 20 6f 66 20 72 65 61 64 65 72   state of reader
3650: 20 61 74 20 74 69 6d 65 20 6f 66 20 63 61 6c 6c   at time of call
3660: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
3670: 20 20 64 77 45 76 65 6e 74 53 74 61 74 65 3b 20    dwEventState; 
3680: 20 20 2f 2f 20 73 74 61 74 65 20 6f 66 20 72 65    // state of re
3690: 61 64 65 72 20 61 66 74 65 72 20 73 74 61 74 65  ader after state
36a0: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 44 57 4f   change..    DWO
36b0: 52 44 20 20 20 20 20 20 20 63 62 41 74 72 3b 20  RD       cbAtr; 
36c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 75 6d 62           // Numb
36d0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
36e0: 68 65 20 72 65 74 75 72 6e 65 64 20 41 54 52 2e  he returned ATR.
36f0: 0d 0a 20 20 20 20 42 59 54 45 20 20 20 20 20 20  ..    BYTE      
3700: 20 20 72 67 62 41 74 72 5b 33 36 5d 3b 20 20 20    rgbAtr[36];   
3710: 20 20 2f 2f 20 41 74 72 20 6f 66 20 69 6e 73 65    // Atr of inse
3720: 72 74 65 64 20 63 61 72 64 2c 20 28 65 78 74 72  rted card, (extr
3730: 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62 79 74 65  a alignment byte
3740: 73 29 0d 0a 7d 20 53 43 41 52 44 5f 52 45 41 44  s)..} SCARD_READ
3750: 45 52 53 54 41 54 45 41 2c 20 2a 50 53 43 41 52  ERSTATEA, *PSCAR
3760: 44 5f 52 45 41 44 45 52 53 54 41 54 45 41 2c 20  D_READERSTATEA, 
3770: 2a 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52 53  *LPSCARD_READERS
3780: 54 41 54 45 41 3b 0d 0a 74 79 70 65 64 65 66 20  TATEA;..typedef 
3790: 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 4c 50  struct {..    LP
37a0: 43 57 53 54 52 20 20 20 20 20 73 7a 52 65 61 64  CWSTR     szRead
37b0: 65 72 3b 20 20 20 20 20 20 20 2f 2f 20 72 65 61  er;       // rea
37c0: 64 65 72 20 6e 61 6d 65 0d 0a 20 20 20 20 4c 50  der name..    LP
37d0: 56 4f 49 44 20 20 20 20 20 20 70 76 55 73 65 72  VOID      pvUser
37e0: 44 61 74 61 3b 20 20 20 20 20 2f 2f 20 75 73 65  Data;     // use
37f0: 72 20 64 65 66 69 6e 65 64 20 64 61 74 61 0d 0a  r defined data..
3800: 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20      DWORD       
3810: 64 77 43 75 72 72 65 6e 74 53 74 61 74 65 3b 20  dwCurrentState; 
3820: 2f 2f 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  // current state
3830: 20 6f 66 20 72 65 61 64 65 72 20 61 74 20 74 69   of reader at ti
3840: 6d 65 20 6f 66 20 63 61 6c 6c 0d 0a 20 20 20 20  me of call..    
3850: 44 57 4f 52 44 20 20 20 20 20 20 20 64 77 45 76  DWORD       dwEv
3860: 65 6e 74 53 74 61 74 65 3b 20 20 20 2f 2f 20 73  entState;   // s
3870: 74 61 74 65 20 6f 66 20 72 65 61 64 65 72 20 61  tate of reader a
3880: 66 74 65 72 20 73 74 61 74 65 20 63 68 61 6e 67  fter state chang
3890: 65 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  e..    DWORD    
38a0: 20 20 20 63 62 41 74 72 3b 20 20 20 20 20 20 20     cbAtr;       
38b0: 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20     // Number of 
38c0: 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 74  bytes in the ret
38d0: 75 72 6e 65 64 20 41 54 52 2e 0d 0a 20 20 20 20  urned ATR...    
38e0: 42 59 54 45 20 20 20 20 20 20 20 20 72 67 62 41  BYTE        rgbA
38f0: 74 72 5b 33 36 5d 3b 20 20 20 20 20 2f 2f 20 41  tr[36];     // A
3900: 74 72 20 6f 66 20 69 6e 73 65 72 74 65 64 20 63  tr of inserted c
3910: 61 72 64 2c 20 28 65 78 74 72 61 20 61 6c 69 67  ard, (extra alig
3920: 6e 6d 65 6e 74 20 62 79 74 65 73 29 0d 0a 7d 20  nment bytes)..} 
3930: 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54  SCARD_READERSTAT
3940: 45 57 2c 20 2a 50 53 43 41 52 44 5f 52 45 41 44  EW, *PSCARD_READ
3950: 45 52 53 54 41 54 45 57 2c 20 2a 4c 50 53 43 41  ERSTATEW, *LPSCA
3960: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 3b  RD_READERSTATEW;
3970: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45  ..#ifdef UNICODE
3980: 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 44 5f  ..typedef SCARD_
3990: 52 45 41 44 45 52 53 54 41 54 45 57 20 53 43 41  READERSTATEW SCA
39a0: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 3b 0d  RD_READERSTATE;.
39b0: 0a 74 79 70 65 64 65 66 20 50 53 43 41 52 44 5f  .typedef PSCARD_
39c0: 52 45 41 44 45 52 53 54 41 54 45 57 20 50 53 43  READERSTATEW PSC
39d0: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 3b  ARD_READERSTATE;
39e0: 0d 0a 74 79 70 65 64 65 66 20 4c 50 53 43 41 52  ..typedef LPSCAR
39f0: 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20 4c  D_READERSTATEW L
3a00: 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41  PSCARD_READERSTA
3a10: 54 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74 79 70 65  TE;..#else..type
3a20: 64 65 66 20 53 43 41 52 44 5f 52 45 41 44 45 52  def SCARD_READER
3a30: 53 54 41 54 45 41 20 53 43 41 52 44 5f 52 45 41  STATEA SCARD_REA
3a40: 44 45 52 53 54 41 54 45 3b 0d 0a 74 79 70 65 64  DERSTATE;..typed
3a50: 65 66 20 50 53 43 41 52 44 5f 52 45 41 44 45 52  ef PSCARD_READER
3a60: 53 54 41 54 45 41 20 50 53 43 41 52 44 5f 52 45  STATEA PSCARD_RE
3a70: 41 44 45 52 53 54 41 54 45 3b 0d 0a 74 79 70 65  ADERSTATE;..type
3a80: 64 65 66 20 4c 50 53 43 41 52 44 5f 52 45 41 44  def LPSCARD_READ
3a90: 45 52 53 54 41 54 45 41 20 4c 50 53 43 41 52 44  ERSTATEA LPSCARD
3aa0: 5f 52 45 41 44 45 52 53 54 41 54 45 3b 0d 0a 23  _READERSTATE;..#
3ab0: 65 6e 64 69 66 20 2f 2f 20 55 4e 49 43 4f 44 45  endif // UNICODE
3ac0: 0d 0a 0d 0a 2f 2f 20 42 61 63 6b 77 61 72 64 73  ....// Backwards
3ad0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6d   compatibility m
3ae0: 61 63 72 6f 73 0d 0a 23 64 65 66 69 6e 65 20 53  acros..#define S
3af0: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45  CARD_READERSTATE
3b00: 5f 41 20 53 43 41 52 44 5f 52 45 41 44 45 52 53  _A SCARD_READERS
3b10: 54 41 54 45 41 0d 0a 23 64 65 66 69 6e 65 20 53  TATEA..#define S
3b20: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45  CARD_READERSTATE
3b30: 5f 57 20 53 43 41 52 44 5f 52 45 41 44 45 52 53  _W SCARD_READERS
3b40: 54 41 54 45 57 0d 0a 23 64 65 66 69 6e 65 20 50  TATEW..#define P
3b50: 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54  SCARD_READERSTAT
3b60: 45 5f 41 20 50 53 43 41 52 44 5f 52 45 41 44 45  E_A PSCARD_READE
3b70: 52 53 54 41 54 45 41 0d 0a 23 64 65 66 69 6e 65  RSTATEA..#define
3b80: 20 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54   PSCARD_READERST
3b90: 41 54 45 5f 57 20 50 53 43 41 52 44 5f 52 45 41  ATE_W PSCARD_REA
3ba0: 44 45 52 53 54 41 54 45 57 0d 0a 23 64 65 66 69  DERSTATEW..#defi
3bb0: 6e 65 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45  ne LPSCARD_READE
3bc0: 52 53 54 41 54 45 5f 41 20 4c 50 53 43 41 52 44  RSTATE_A LPSCARD
3bd0: 5f 52 45 41 44 45 52 53 54 41 54 45 41 0d 0a 23  _READERSTATEA..#
3be0: 64 65 66 69 6e 65 20 4c 50 53 43 41 52 44 5f 52  define LPSCARD_R
3bf0: 45 41 44 45 52 53 54 41 54 45 5f 57 20 4c 50 53  EADERSTATE_W LPS
3c00: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45  CARD_READERSTATE
3c10: 57 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  W....#define SCA
3c20: 52 44 5f 53 54 41 54 45 5f 55 4e 41 57 41 52 45  RD_STATE_UNAWARE
3c30: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 30 20       0x00000000 
3c40: 20 2f 2f 20 54 68 65 20 61 70 70 6c 69 63 61 74   // The applicat
3c50: 69 6f 6e 20 69 73 20 75 6e 61 77 61 72 65 20 6f  ion is unaware o
3c60: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  f the..         
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c90: 20 20 20 2f 2f 20 63 75 72 72 65 6e 74 20 73 74     // current st
3ca0: 61 74 65 2c 20 61 6e 64 20 77 6f 75 6c 64 20 6c  ate, and would l
3cb0: 69 6b 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ike to..        
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 2f 2f 20 6b 6e 6f 77 2e 20 20 54 68      // know.  Th
3cf0: 65 20 75 73 65 20 6f 66 20 74 68 69 73 20 76 61  e use of this va
3d00: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d30: 20 2f 2f 20 72 65 73 75 6c 74 73 20 69 6e 20 61   // results in a
3d40: 6e 20 69 6d 6d 65 64 69 61 74 65 20 72 65 74 75  n immediate retu
3d50: 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rn..            
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 2f 2f 20 66 72 6f 6d 20 73 74 61 74 65 20 74 72  // from state tr
3d90: 61 6e 73 69 74 69 6f 6e 20 6d 6f 6e 69 74 6f 72  ansition monitor
3da0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 2f 2f 20 73 65 72 76 69 63 65 73 2e 20 20 54   // services.  T
3de0: 68 69 73 20 69 73 20 72 65 70 72 65 73 65 6e 74  his is represent
3df0: 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20  ed by..         
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e20: 20 20 20 2f 2f 20 61 6c 6c 20 62 69 74 73 20 73     // all bits s
3e30: 65 74 20 74 6f 20 7a 65 72 6f 2e 0d 0a 23 64 65  et to zero...#de
3e40: 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 54 45  fine SCARD_STATE
3e50: 5f 49 47 4e 4f 52 45 20 20 20 20 20 20 30 78 30  _IGNORE      0x0
3e60: 30 30 30 30 30 30 31 20 20 2f 2f 20 54 68 65 20  0000001  // The 
3e70: 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75  application requ
3e80: 65 73 74 65 64 20 74 68 61 74 0d 0a 20 20 20 20  ested that..    
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 20 20 20 20 20 20 2f 2f 20 74 68 69 73 20          // this 
3ec0: 72 65 61 64 65 72 20 62 65 20 69 67 6e 6f 72 65  reader be ignore
3ed0: 64 2e 20 20 4e 6f 20 6f 74 68 65 72 0d 0a 20 20  d.  No other..  
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 62 69 74            // bit
3f10: 73 20 77 69 6c 6c 20 62 65 20 73 65 74 2e 0d 0a  s will be set...
3f20: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54  #define SCARD_ST
3f30: 41 54 45 5f 43 48 41 4e 47 45 44 20 20 20 20 20  ATE_CHANGED     
3f40: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2f 20 54  0x00000002  // T
3f50: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
3f60: 20 74 68 65 72 65 20 69 73 20 61 0d 0a 20 20 20   there is a..   
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f90: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 66 66           // diff
3fa0: 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
3fb0: 68 65 20 73 74 61 74 65 0d 0a 20 20 20 20 20 20  he state..      
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fe0: 20 20 20 20 20 20 2f 2f 20 62 65 6c 69 65 76 65        // believe
3ff0: 64 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  d by the applica
4000: 74 69 6f 6e 2c 20 61 6e 64 0d 0a 20 20 20 20 20  tion, and..     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20 73 74         // the st
4040: 61 74 65 20 6b 6e 6f 77 6e 20 62 79 20 74 68 65  ate known by the
4050: 20 53 65 72 76 69 63 65 0d 0a 20 20 20 20 20 20   Service..      
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4080: 20 20 20 20 20 20 2f 2f 20 4d 61 6e 61 67 65 72        // Manager
4090: 2e 20 20 57 68 65 6e 20 74 68 69 73 20 62 69 74  .  When this bit
40a0: 20 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20   is set,..      
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 2f 2f 20 74 68 65 20 61 70 70        // the app
40e0: 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 61 73 73  lication may ass
40f0: 75 6d 65 20 61 0d 0a 20 20 20 20 20 20 20 20 20  ume a..         
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4120: 20 20 20 2f 2f 20 73 69 67 6e 69 66 69 63 61 6e     // significan
4130: 74 20 73 74 61 74 65 20 63 68 61 6e 67 65 20 68  t state change h
4140: 61 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  as..            
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 2f 2f 20 6f 63 63 75 72 72 65 64 20 6f 6e 20 74  // occurred on t
4180: 68 69 73 20 72 65 61 64 65 72 2e 0d 0a 23 64 65  his reader...#de
4190: 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 54 45  fine SCARD_STATE
41a0: 5f 55 4e 4b 4e 4f 57 4e 20 20 20 20 20 30 78 30  _UNKNOWN     0x0
41b0: 30 30 30 30 30 30 34 20 20 2f 2f 20 54 68 69 73  0000004  // This
41c0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
41d0: 65 20 67 69 76 65 6e 0d 0a 20 20 20 20 20 20 20  e given..       
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 20 2f 2f 20 72 65 61 64 65 72 20 6e       // reader n
4210: 61 6d 65 20 69 73 20 6e 6f 74 20 72 65 63 6f 67  ame is not recog
4220: 6e 69 7a 65 64 20 62 79 0d 0a 20 20 20 20 20 20  nized by..      
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 20 20 20 20 20 2f 2f 20 74 68 65 20 53 65 72        // the Ser
4260: 76 69 63 65 20 4d 61 6e 61 67 65 72 2e 20 20 49  vice Manager.  I
4270: 66 20 74 68 69 73 20 62 69 74 0d 0a 20 20 20 20  f this bit..    
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 73 65          // is se
42b0: 74 2c 20 74 68 65 6e 20 53 43 41 52 44 5f 53 54  t, then SCARD_ST
42c0: 41 54 45 5f 43 48 41 4e 47 45 44 0d 0a 20 20 20  ATE_CHANGED..   
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 61 6e 64 20           // and 
4300: 53 43 41 52 44 5f 53 54 41 54 45 5f 49 47 4e 4f  SCARD_STATE_IGNO
4310: 52 45 20 77 69 6c 6c 20 61 6c 73 6f 0d 0a 20 20  RE will also..  
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4340: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 62 65 20            // be 
4350: 73 65 74 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43  set...#define SC
4360: 41 52 44 5f 53 54 41 54 45 5f 55 4e 41 56 41 49  ARD_STATE_UNAVAI
4370: 4c 41 42 4c 45 20 30 78 30 30 30 30 30 30 30 38  LABLE 0x00000008
4380: 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65    // This implie
4390: 73 20 74 68 61 74 20 74 68 65 20 61 63 74 75 61  s that the actua
43a0: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
43d0: 2f 20 73 74 61 74 65 20 6f 66 20 74 68 69 73 20  / state of this 
43e0: 72 65 61 64 65 72 20 69 73 20 6e 6f 74 0d 0a 20  reader is not.. 
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 20 20 20 20 20 20 20                  
4410: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 76             // av
4420: 61 69 6c 61 62 6c 65 2e 20 20 49 66 20 74 68 69  ailable.  If thi
4430: 73 20 62 69 74 20 69 73 20 73 65 74 2c 0d 0a 20  s bit is set,.. 
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 20 20 20 20 20 20 20                  
4460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68             // th
4470: 65 6e 20 61 6c 6c 20 74 68 65 20 66 6f 6c 6c 6f  en all the follo
4480: 77 69 6e 67 20 62 69 74 73 20 61 72 65 0d 0a 20  wing bits are.. 
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 6c             // cl
44c0: 65 61 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43  ear...#define SC
44d0: 41 52 44 5f 53 54 41 54 45 5f 45 4d 50 54 59 20  ARD_STATE_EMPTY 
44e0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30        0x00000010
44f0: 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65    // This implie
4500: 73 20 74 68 61 74 20 74 68 65 72 65 20 69 73 20  s that there is 
4510: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  not..           
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 2f 2f 20 63 61 72 64 20 69 6e 20 74 68 65 20   // card in the 
4550: 72 65 61 64 65 72 2e 20 20 49 66 20 74 68 69 73  reader.  If this
4560: 20 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20   bit..          
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 20 20 20 20 20 20 20 20                  
4590: 20 20 2f 2f 20 69 73 20 73 65 74 2c 20 61 6c 6c    // is set, all
45a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   the following b
45b0: 69 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  its..           
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 20 20 20 20 20 20 20                  
45e0: 20 2f 2f 20 77 69 6c 6c 20 62 65 20 63 6c 65 61   // will be clea
45f0: 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52  r...#define SCAR
4600: 44 5f 53 54 41 54 45 5f 50 52 45 53 45 4e 54 20  D_STATE_PRESENT 
4610: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
4620: 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  // This implies 
4630: 74 68 61 74 20 74 68 65 72 65 20 69 73 20 61 20  that there is a 
4640: 63 61 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20  card..          
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 2f 2f 20 69 6e 20 74 68 65 20 72 65 61 64    // in the read
4680: 65 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  er...#define SCA
4690: 52 44 5f 53 54 41 54 45 5f 41 54 52 4d 41 54 43  RD_STATE_ATRMATC
46a0: 48 20 20 20 20 30 78 30 30 30 30 30 30 34 30 20  H    0x00000040 
46b0: 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73   // This implies
46c0: 20 74 68 61 74 20 74 68 65 72 65 20 69 73 20 61   that there is a
46d0: 20 63 61 72 64 0d 0a 20 20 20 20 20 20 20 20 20   card..         
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4700: 20 20 20 2f 2f 20 69 6e 20 74 68 65 20 72 65 61     // in the rea
4710: 64 65 72 20 77 69 74 68 20 61 6e 20 41 54 52 0d  der with an ATR.
4720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
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 2f 2f 20               // 
4750: 6d 61 74 63 68 69 6e 67 20 6f 6e 65 20 6f 66 20  matching one of 
4760: 74 68 65 20 74 61 72 67 65 74 20 63 61 72 64 73  the target cards
4770: 2e 0d 0a 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 20 2f                 /
47a0: 2f 20 49 66 20 74 68 69 73 20 62 69 74 20 69 73  / If this bit is
47b0: 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20   set,..         
47c0: 20 20 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 2f 2f 20 53 43 41 52 44 5f 53 54 41 54     // SCARD_STAT
47f0: 45 5f 50 52 45 53 45 4e 54 20 77 69 6c 6c 20 61  E_PRESENT will a
4800: 6c 73 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20  lso be..        
4810: 20 20 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 2f 2f 20 73 65 74 2e 20 20 54 68 69      // set.  Thi
4840: 73 20 62 69 74 20 69 73 20 6f 6e 6c 79 20 72 65  s bit is only re
4850: 74 75 72 6e 65 64 0d 0a 20 20 20 20 20 20 20 20  turned..        
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 20 20 2f 2f 20 6f 6e 20 74 68 65 20 53 43      // on the SC
4890: 61 72 64 4c 6f 63 61 74 65 43 61 72 64 28 29 20  ardLocateCard() 
48a0: 73 65 72 76 69 63 65 2e 0d 0a 23 64 65 66 69 6e  service...#defin
48b0: 65 20 53 43 41 52 44 5f 53 54 41 54 45 5f 45 58  e SCARD_STATE_EX
48c0: 43 4c 55 53 49 56 45 20 20 20 30 78 30 30 30 30  CLUSIVE   0x0000
48d0: 30 30 38 30 20 20 2f 2f 20 54 68 69 73 20 69 6d  0080  // This im
48e0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 63  plies that the c
48f0: 61 72 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ard in the..    
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 61 64 65          // reade
4930: 72 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  r is allocated f
4940: 6f 72 20 65 78 63 6c 75 73 69 76 65 0d 0a 20 20  or exclusive..  
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4970: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 75 73 65            // use
4980: 20 62 79 20 61 6e 6f 74 68 65 72 20 61 70 70 6c   by another appl
4990: 69 63 61 74 69 6f 6e 2e 20 20 49 66 0d 0a 20 20  ication.  If..  
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 69            // thi
49d0: 73 20 62 69 74 20 69 73 20 73 65 74 2c 0d 0a 20  s bit is set,.. 
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53 43             // SC
4a10: 41 52 44 5f 53 54 41 54 45 5f 50 52 45 53 45 4e  ARD_STATE_PRESEN
4a20: 54 20 77 69 6c 6c 20 61 6c 73 6f 20 62 65 0d 0a  T will also be..
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73              // s
4a60: 65 74 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  et...#define SCA
4a70: 52 44 5f 53 54 41 54 45 5f 49 4e 55 53 45 20 20  RD_STATE_INUSE  
4a80: 20 20 20 20 20 30 78 30 30 30 30 30 31 30 30 20       0x00000100 
4a90: 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73   // This implies
4aa0: 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 69   that the card i
4ab0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  n the..         
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ae0: 20 20 20 2f 2f 20 72 65 61 64 65 72 20 69 73 20     // reader is 
4af0: 69 6e 20 75 73 65 20 62 79 20 6f 6e 65 20 6f 72  in use by one or
4b00: 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 20   more..         
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 2f 2f 20 6f 74 68 65 72 20 61 70 70 6c     // other appl
4b40: 69 63 61 74 69 6f 6e 73 2c 20 62 75 74 20 6d 61  ications, but ma
4b50: 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  y be..          
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b80: 20 20 2f 2f 20 63 6f 6e 6e 65 63 74 65 64 20 74    // connected t
4b90: 6f 20 69 6e 20 73 68 61 72 65 64 20 6d 6f 64 65  o in shared mode
4ba0: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20  .  If..         
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 20 20 20 2f 2f 20 74 68 69 73 20 62 69 74 20 69     // this bit i
4be0: 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  s set,..        
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 20 20 20 20 20 20 20 20 20                  
4c10: 20 20 20 20 2f 2f 20 53 43 41 52 44 5f 53 54 41      // SCARD_STA
4c20: 54 45 5f 50 52 45 53 45 4e 54 20 77 69 6c 6c 20  TE_PRESENT will 
4c30: 61 6c 73 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  also be..       
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c60: 20 20 20 20 20 2f 2f 20 73 65 74 2e 0d 0a 23 64       // set...#d
4c70: 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 54  efine SCARD_STAT
4c80: 45 5f 4d 55 54 45 20 20 20 20 20 20 20 20 30 78  E_MUTE        0x
4c90: 30 30 30 30 30 32 30 30 20 20 2f 2f 20 54 68 69  00000200  // Thi
4ca0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
4cb0: 68 65 20 63 61 72 64 20 69 6e 20 74 68 65 0d 0a  he card in the..
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cd0: 20 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 2f 2f 20 72              // r
4cf0: 65 61 64 65 72 20 69 73 20 75 6e 72 65 73 70 6f  eader is unrespo
4d00: 6e 73 69 76 65 20 6f 72 20 6e 6f 74 0d 0a 20 20  nsive or not..  
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d20: 20 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 2f 2f 20 73 75 70            // sup
4d40: 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 72 65  ported by the re
4d50: 61 64 65 72 20 6f 72 0d 0a 20 20 20 20 20 20 20  ader or..       
4d60: 20 20 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 2f 2f 20 73 6f 66 74 77 61 72 65       // software
4d90: 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44  ...#define SCARD
4da0: 5f 53 54 41 54 45 5f 55 4e 50 4f 57 45 52 45 44  _STATE_UNPOWERED
4db0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
4dc0: 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74  / This implies t
4dd0: 68 61 74 20 74 68 65 20 63 61 72 64 20 69 6e 20  hat the card in 
4de0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 2f 2f 20 72 65 61 64 65 72 20 68 61 73 20 6e   // reader has n
4e20: 6f 74 20 62 65 65 6e 20 70 6f 77 65 72 65 64 20  ot been powered 
4e30: 75 70 2e 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49  up.....extern WI
4e40: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
4e50: 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c 6f 63 61  INAPI..SCardLoca
4e60: 74 65 43 61 72 64 73 41 28 0d 0a 20 20 20 20 20  teCardsA(..     
4e70: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
4e80: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
4e90: 20 20 20 4c 50 43 53 54 52 20 6d 73 7a 43 61 72     LPCSTR mszCar
4ea0: 64 73 2c 0d 0a 20 4c 50 53 43 41 52 44 5f 52 45  ds,.. LPSCARD_RE
4eb0: 41 44 45 52 53 54 41 54 45 41 20 72 67 52 65 61  ADERSTATEA rgRea
4ec0: 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 20 20 20  derStates,..    
4ed0: 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 64 65      DWORD cReade
4ee0: 72 73 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e  rs);..extern WIN
4ef0: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
4f00: 4e 41 50 49 0d 0a 53 43 61 72 64 4c 6f 63 61 74  NAPI..SCardLocat
4f10: 65 43 61 72 64 73 57 28 0d 0a 20 20 20 20 20 20  eCardsW(..      
4f20: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68    SCARDCONTEXT h
4f30: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  Context,..      
4f40: 20 20 4c 50 43 57 53 54 52 20 6d 73 7a 43 61 72    LPCWSTR mszCar
4f50: 64 73 2c 0d 0a 20 4c 50 53 43 41 52 44 5f 52 45  ds,.. LPSCARD_RE
4f60: 41 44 45 52 53 54 41 54 45 57 20 72 67 52 65 61  ADERSTATEW rgRea
4f70: 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 20 20 20  derStates,..    
4f80: 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 64 65      DWORD cReade
4f90: 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49  rs);..#ifdef UNI
4fa0: 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43  CODE..#define SC
4fb0: 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 20 20  ardLocateCards  
4fc0: 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73  SCardLocateCards
4fd0: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e  W..#else..#defin
4fe0: 65 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72  e SCardLocateCar
4ff0: 64 73 20 20 53 43 61 72 64 4c 6f 63 61 74 65 43  ds  SCardLocateC
5000: 61 72 64 73 41 0d 0a 23 65 6e 64 69 66 20 2f 2f  ardsA..#endif //
5010: 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 23 69 66   !UNICODE....#if
5020: 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f 4e 20   (NTDDI_VERSION 
5030: 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58 50 29 0d  >= NTDDI_WINXP).
5040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5050: 5f 53 43 41 52 44 5f 41 54 52 4d 41 53 4b 20 7b  _SCARD_ATRMASK {
5060: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
5070: 20 20 63 62 41 74 72 3b 20 20 20 20 20 20 20 20    cbAtr;        
5080: 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20 62    // Number of b
5090: 79 74 65 73 20 69 6e 20 74 68 65 20 41 54 52 20  ytes in the ATR 
50a0: 61 6e 64 20 74 68 65 20 6d 61 73 6b 2e 0d 0a 20  and the mask... 
50b0: 20 20 20 42 59 54 45 20 20 20 20 20 20 20 20 72     BYTE        r
50c0: 67 62 41 74 72 5b 33 36 5d 3b 20 20 20 20 20 2f  gbAtr[36];     /
50d0: 2f 20 41 74 72 20 6f 66 20 63 61 72 64 20 28 65  / Atr of card (e
50e0: 78 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62  xtra alignment b
50f0: 79 74 65 73 29 0d 0a 20 20 20 20 42 59 54 45 20  ytes)..    BYTE 
5100: 20 20 20 20 20 20 20 72 67 62 4d 61 73 6b 5b 33         rgbMask[3
5110: 36 5d 3b 20 20 20 20 2f 2f 20 4d 61 73 6b 20 66  6];    // Mask f
5120: 6f 72 20 74 68 65 20 41 74 72 20 28 65 78 74 72  or the Atr (extr
5130: 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62 79 74 65  a alignment byte
5140: 73 29 0d 0a 7d 20 53 43 41 52 44 5f 41 54 52 4d  s)..} SCARD_ATRM
5150: 41 53 4b 2c 20 2a 50 53 43 41 52 44 5f 41 54 52  ASK, *PSCARD_ATR
5160: 4d 41 53 4b 2c 20 2a 4c 50 53 43 41 52 44 5f 41  MASK, *LPSCARD_A
5170: 54 52 4d 41 53 4b 3b 0d 0a 0d 0a 0d 0a 65 78 74  TRMASK;......ext
5180: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
5190: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
51a0: 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 79 41  rdLocateCardsByA
51b0: 54 52 41 28 0d 0a 20 20 20 20 20 20 20 20 53 43  TRA(..        SC
51c0: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74  ARDCONTEXT hCont
51d0: 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 4c 50  ext,..        LP
51e0: 53 43 41 52 44 5f 41 54 52 4d 41 53 4b 20 72 67  SCARD_ATRMASK rg
51f0: 41 74 72 4d 61 73 6b 73 2c 0d 0a 20 20 20 20 20  AtrMasks,..     
5200: 20 20 20 44 57 4f 52 44 20 63 41 74 72 73 2c 0d     DWORD cAtrs,.
5210: 0a 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52  . LPSCARD_READER
5220: 53 54 41 54 45 41 20 72 67 52 65 61 64 65 72 53  STATEA rgReaderS
5230: 74 61 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  tates,..        
5240: 44 57 4f 52 44 20 63 52 65 61 64 65 72 73 29 3b  DWORD cReaders);
5250: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
5260: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
5270: 0d 0a 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72  ..SCardLocateCar
5280: 64 73 42 79 41 54 52 57 28 0d 0a 20 20 20 20 20  dsByATRW(..     
5290: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
52a0: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
52b0: 20 20 20 4c 50 53 43 41 52 44 5f 41 54 52 4d 41     LPSCARD_ATRMA
52c0: 53 4b 20 72 67 41 74 72 4d 61 73 6b 73 2c 0d 0a  SK rgAtrMasks,..
52d0: 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 41          DWORD cA
52e0: 74 72 73 2c 0d 0a 20 4c 50 53 43 41 52 44 5f 52  trs,.. LPSCARD_R
52f0: 45 41 44 45 52 53 54 41 54 45 57 20 72 67 52 65  EADERSTATEW rgRe
5300: 61 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 20 20  aderStates,..   
5310: 20 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 64       DWORD cRead
5320: 65 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e  ers);..#ifdef UN
5330: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53  ICODE..#define S
5340: 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42  CardLocateCardsB
5350: 79 41 54 52 20 20 53 43 61 72 64 4c 6f 63 61 74  yATR  SCardLocat
5360: 65 43 61 72 64 73 42 79 41 54 52 57 0d 0a 23 65  eCardsByATRW..#e
5370: 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61  lse..#define SCa
5380: 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 79 41  rdLocateCardsByA
5390: 54 52 20 20 53 43 61 72 64 4c 6f 63 61 74 65 43  TR  SCardLocateC
53a0: 61 72 64 73 42 79 41 54 52 41 0d 0a 23 65 6e 64  ardsByATRA..#end
53b0: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
53c0: 23 65 6e 64 69 66 20 2f 2f 20 28 4e 54 44 44 49  #endif // (NTDDI
53d0: 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44  _VERSION >= NTDD
53e0: 49 5f 57 49 4e 58 50 29 0d 0a 0d 0a 65 78 74 65  I_WINXP)....exte
53f0: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
5400: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
5410: 64 47 65 74 53 74 61 74 75 73 43 68 61 6e 67 65  dGetStatusChange
5420: 41 28 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52  A(..        SCAR
5430: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78  DCONTEXT hContex
5440: 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 4f 52  t,..        DWOR
5450: 44 20 64 77 54 69 6d 65 6f 75 74 2c 0d 0a 20 4c  D dwTimeout,.. L
5460: 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41  PSCARD_READERSTA
5470: 54 45 41 20 72 67 52 65 61 64 65 72 53 74 61 74  TEA rgReaderStat
5480: 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 4f  es,..        DWO
5490: 52 44 20 63 52 65 61 64 65 72 73 29 3b 0d 0a 65  RD cReaders);..e
54a0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50  xtern WINSCARDAP
54b0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53  I LONG WINAPI..S
54c0: 43 61 72 64 47 65 74 53 74 61 74 75 73 43 68 61  CardGetStatusCha
54d0: 6e 67 65 57 28 0d 0a 20 20 20 20 20 20 20 20 53  ngeW(..        S
54e0: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
54f0: 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 44  text,..        D
5500: 57 4f 52 44 20 64 77 54 69 6d 65 6f 75 74 2c 0d  WORD dwTimeout,.
5510: 0a 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52  . LPSCARD_READER
5520: 53 54 41 54 45 57 20 72 67 52 65 61 64 65 72 53  STATEW rgReaderS
5530: 74 61 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  tates,..        
5540: 44 57 4f 52 44 20 63 52 65 61 64 65 72 73 29 3b  DWORD cReaders);
5550: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45  ..#ifdef UNICODE
5560: 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 47  ..#define SCardG
5570: 65 74 53 74 61 74 75 73 43 68 61 6e 67 65 20 20  etStatusChange  
5580: 53 43 61 72 64 47 65 74 53 74 61 74 75 73 43 68  SCardGetStatusCh
5590: 61 6e 67 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 64  angeW..#else..#d
55a0: 65 66 69 6e 65 20 53 43 61 72 64 47 65 74 53 74  efine SCardGetSt
55b0: 61 74 75 73 43 68 61 6e 67 65 20 20 53 43 61 72  atusChange  SCar
55c0: 64 47 65 74 53 74 61 74 75 73 43 68 61 6e 67 65  dGetStatusChange
55d0: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
55e0: 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20  ICODE....extern 
55f0: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
5600: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 43 61   WINAPI..SCardCa
5610: 6e 63 65 6c 28 0d 0a 20 20 20 20 20 20 20 20 53  ncel(..        S
5620: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e  CARDCONTEXT hCon
5630: 74 65 78 74 29 3b 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a  text);......//..
5640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5690: 0d 0a 2f 2f 0d 0a 2f 2f 20 20 43 61 72 64 2f 52  ..//..//  Card/R
56a0: 65 61 64 65 72 20 43 6f 6d 6d 75 6e 69 63 61 74  eader Communicat
56b0: 69 6f 6e 20 53 65 72 76 69 63 65 73 0d 0a 2f 2f  ion Services..//
56c0: 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 66 6f  ..//      The fo
56d0: 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 65 73  llowing services
56e0: 20 70 72 6f 76 69 64 65 20 6d 65 61 6e 73 20 66   provide means f
56f0: 6f 72 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e  or communication
5700: 20 77 69 74 68 20 74 68 65 20 63 61 72 64 2e 0d   with the card..
5710: 0a 2f 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53  .//....#define S
5720: 43 41 52 44 5f 53 48 41 52 45 5f 45 58 43 4c 55  CARD_SHARE_EXCLU
5730: 53 49 56 45 20 31 20 2f 2f 20 54 68 69 73 20 61  SIVE 1 // This a
5740: 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 6e 6f  pplication is no
5750: 74 20 77 69 6c 6c 69 6e 67 20 74 6f 20 73 68 61  t willing to sha
5760: 72 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  re this..       
5770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5780: 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61 72 64           // card
5790: 20 77 69 74 68 20 6f 74 68 65 72 20 61 70 70 6c   with other appl
57a0: 69 63 61 74 69 6f 6e 73 2e 0d 0a 23 64 65 66 69  ications...#defi
57b0: 6e 65 20 53 43 41 52 44 5f 53 48 41 52 45 5f 53  ne SCARD_SHARE_S
57c0: 48 41 52 45 44 20 20 20 20 32 20 2f 2f 20 54 68  HARED    2 // Th
57d0: 69 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69  is application i
57e0: 73 20 77 69 6c 6c 69 6e 67 20 74 6f 20 73 68 61  s willing to sha
57f0: 72 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  re this..       
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61 72 64           // card
5820: 20 77 69 74 68 20 6f 74 68 65 72 20 61 70 70 6c   with other appl
5830: 69 63 61 74 69 6f 6e 73 2e 0d 0a 23 64 65 66 69  ications...#defi
5840: 6e 65 20 53 43 41 52 44 5f 53 48 41 52 45 5f 44  ne SCARD_SHARE_D
5850: 49 52 45 43 54 20 20 20 20 33 20 2f 2f 20 54 68  IRECT    3 // Th
5860: 69 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  is application d
5870: 65 6d 61 6e 64 73 20 64 69 72 65 63 74 20 63 6f  emands direct co
5880: 6e 74 72 6f 6c 20 6f 66 0d 0a 20 20 20 20 20 20  ntrol of..      
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65            // the
58b0: 20 72 65 61 64 65 72 2c 20 73 6f 20 69 74 20 69   reader, so it i
58c0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
58d0: 74 6f 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20  to other..      
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 70 70            // app
5900: 6c 69 63 61 74 69 6f 6e 73 2e 0d 0a 0d 0a 23 64  lications.....#d
5910: 65 66 69 6e 65 20 53 43 41 52 44 5f 4c 45 41 56  efine SCARD_LEAV
5920: 45 5f 43 41 52 44 20 20 20 20 20 20 30 20 2f 2f  E_CARD      0 //
5930: 20 44 6f 6e 27 74 20 64 6f 20 61 6e 79 74 68 69   Don't do anythi
5940: 6e 67 20 73 70 65 63 69 61 6c 20 6f 6e 20 63 6c  ng special on cl
5950: 6f 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 41  ose..#define SCA
5960: 52 44 5f 52 45 53 45 54 5f 43 41 52 44 20 20 20  RD_RESET_CARD   
5970: 20 20 20 31 20 2f 2f 20 52 65 73 65 74 20 74 68     1 // Reset th
5980: 65 20 63 61 72 64 20 6f 6e 20 63 6c 6f 73 65 0d  e card on close.
5990: 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 55  .#define SCARD_U
59a0: 4e 50 4f 57 45 52 5f 43 41 52 44 20 20 20 20 32  NPOWER_CARD    2
59b0: 20 2f 2f 20 50 6f 77 65 72 20 64 6f 77 6e 20 74   // Power down t
59c0: 68 65 20 63 61 72 64 20 6f 6e 20 63 6c 6f 73 65  he card on close
59d0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f  ..#define SCARD_
59e0: 45 4a 45 43 54 5f 43 41 52 44 20 20 20 20 20 20  EJECT_CARD      
59f0: 33 20 2f 2f 20 45 6a 65 63 74 20 74 68 65 20 63  3 // Eject the c
5a00: 61 72 64 20 6f 6e 20 63 6c 6f 73 65 0d 0a 0d 0a  ard on close....
5a10: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41  extern WINSCARDA
5a20: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a  PI LONG WINAPI..
5a30: 53 43 61 72 64 43 6f 6e 6e 65 63 74 41 28 0d 0a  SCardConnectA(..
5a40: 20 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e          SCARDCON
5a50: 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a  TEXT hContext,..
5a60: 20 20 20 20 20 20 20 20 4c 50 43 53 54 52 20 73          LPCSTR s
5a70: 7a 52 65 61 64 65 72 2c 0d 0a 20 20 20 20 20 20  zReader,..      
5a80: 20 20 44 57 4f 52 44 20 64 77 53 68 61 72 65 4d    DWORD dwShareM
5a90: 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 57  ode,..        DW
5aa0: 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 64 50  ORD dwPreferredP
5ab0: 72 6f 74 6f 63 6f 6c 73 2c 0d 0a 20 20 20 20 20  rotocols,..     
5ac0: 20 20 4c 50 53 43 41 52 44 48 41 4e 44 4c 45 20    LPSCARDHANDLE 
5ad0: 70 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20  phCard,..       
5ae0: 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 69 76  LPDWORD pdwActiv
5af0: 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 65 78 74  eProtocol);..ext
5b00: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
5b10: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
5b20: 72 64 43 6f 6e 6e 65 63 74 57 28 0d 0a 20 20 20  rdConnectW(..   
5b30: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58       SCARDCONTEX
5b40: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
5b50: 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a 52       LPCWSTR szR
5b60: 65 61 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  eader,..        
5b70: 44 57 4f 52 44 20 64 77 53 68 61 72 65 4d 6f 64  DWORD dwShareMod
5b80: 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 4f 52  e,..        DWOR
5b90: 44 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f  D dwPreferredPro
5ba0: 74 6f 63 6f 6c 73 2c 0d 0a 20 20 20 20 20 20 20  tocols,..       
5bb0: 4c 50 53 43 41 52 44 48 41 4e 44 4c 45 20 70 68  LPSCARDHANDLE ph
5bc0: 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 4c 50  Card,..       LP
5bd0: 44 57 4f 52 44 20 70 64 77 41 63 74 69 76 65 50  DWORD pdwActiveP
5be0: 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 23 69 66 64 65  rotocol);..#ifde
5bf0: 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69  f UNICODE..#defi
5c00: 6e 65 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 20  ne SCardConnect 
5c10: 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 57 0d 0a   SCardConnectW..
5c20: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53  #else..#define S
5c30: 43 61 72 64 43 6f 6e 6e 65 63 74 20 20 53 43 61  CardConnect  SCa
5c40: 72 64 43 6f 6e 6e 65 63 74 41 0d 0a 23 65 6e 64  rdConnectA..#end
5c50: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
5c60: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
5c70: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
5c80: 0d 0a 53 43 61 72 64 52 65 63 6f 6e 6e 65 63 74  ..SCardReconnect
5c90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 43 41  (..          SCA
5ca0: 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d  RDHANDLE hCard,.
5cb0: 0a 20 20 20 20 20 20 20 20 20 20 44 57 4f 52 44  .          DWORD
5cc0: 20 64 77 53 68 61 72 65 4d 6f 64 65 2c 0d 0a 20   dwShareMode,.. 
5cd0: 20 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 64           DWORD d
5ce0: 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63  wPreferredProtoc
5cf0: 6f 6c 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ols,..          
5d00: 44 57 4f 52 44 20 64 77 49 6e 69 74 69 61 6c 69  DWORD dwInitiali
5d10: 7a 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 4c 50  zation,..     LP
5d20: 44 57 4f 52 44 20 70 64 77 41 63 74 69 76 65 50  DWORD pdwActiveP
5d30: 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 0d 0a 65 78 74  rotocol);....ext
5d40: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
5d50: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
5d60: 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20  rdDisconnect(.. 
5d70: 20 20 20 20 20 20 20 53 43 41 52 44 48 41 4e 44         SCARDHAND
5d80: 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 20 20  LE hCard,..     
5d90: 20 20 20 44 57 4f 52 44 20 64 77 44 69 73 70 6f     DWORD dwDispo
5da0: 73 69 74 69 6f 6e 29 3b 0d 0a 0d 0a 65 78 74 65  sition);....exte
5db0: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
5dc0: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
5dd0: 64 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  dBeginTransactio
5de0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52  n(..        SCAR
5df0: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 29 3b 0d  DHANDLE hCard);.
5e00: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ...extern WINSCA
5e10: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
5e20: 49 0d 0a 53 43 61 72 64 45 6e 64 54 72 61 6e 73  I..SCardEndTrans
5e30: 61 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  action(..       
5e40: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61   SCARDHANDLE hCa
5e50: 72 64 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 4f  rd,..        DWO
5e60: 52 44 20 64 77 44 69 73 70 6f 73 69 74 69 6f 6e  RD dwDisposition
5e70: 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e  );....extern WIN
5e80: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49  SCARDAPI LONG WI
5e90: 4e 41 50 49 0d 0a 53 43 61 72 64 43 61 6e 63 65  NAPI..SCardCance
5ea0: 6c 54 72 61 6e 73 61 63 74 69 6f 6e 28 0d 0a 20  lTransaction(.. 
5eb0: 20 20 20 20 20 20 20 53 43 41 52 44 48 41 4e 44         SCARDHAND
5ec0: 4c 45 20 68 43 61 72 64 29 3b 0d 0a 2f 2f 0d 0a  LE hCard);..//..
5ed0: 2f 2f 20 4e 4f 54 45 3a 20 20 20 20 54 68 69 73  // NOTE:    This
5ee0: 20 63 61 6c 6c 20 63 6f 72 72 65 73 70 6f 6e 64   call correspond
5ef0: 73 20 74 6f 20 74 68 65 20 50 43 2f 53 43 20 53  s to the PC/SC S
5f00: 43 41 52 44 43 4f 4d 4d 3a 3a 43 61 6e 63 65 6c  CARDCOMM::Cancel
5f10: 20 72 6f 75 74 69 6e 65 2c 0d 0a 2f 2f 20 20 20   routine,..//   
5f20: 20 20 20 20 20 20 20 74 65 72 6d 69 6e 61 74 69         terminati
5f30: 6e 67 20 61 20 62 6c 6f 63 6b 65 64 20 53 43 61  ng a blocked SCa
5f40: 72 64 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  rdBeginTransacti
5f50: 6f 6e 20 73 65 72 76 69 63 65 2e 0d 0a 2f 2f 0d  on service...//.
5f60: 0a 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  .....extern WINS
5f70: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
5f80: 41 50 49 0d 0a 53 43 61 72 64 53 74 61 74 65 28  API..SCardState(
5f90: 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52 44 48  ..        SCARDH
5fa0: 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20  ANDLE hCard,..  
5fb0: 20 20 20 20 20 4c 50 44 57 4f 52 44 20 70 64 77       LPDWORD pdw
5fc0: 53 74 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 4c  State,..       L
5fd0: 50 44 57 4f 52 44 20 70 64 77 50 72 6f 74 6f 63  PDWORD pdwProtoc
5fe0: 6f 6c 2c 0d 0a 20 20 20 20 20 20 20 4c 50 42 59  ol,..       LPBY
5ff0: 54 45 20 70 62 41 74 72 2c 0d 0a 20 4c 50 44 57  TE pbAtr,.. LPDW
6000: 4f 52 44 20 70 63 62 41 74 72 4c 65 6e 29 3b 0d  ORD pcbAtrLen);.
6010: 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20  .//..// NOTE:   
6020: 20 53 43 61 72 64 53 74 61 74 65 20 69 73 20 61   SCardState is a
6030: 6e 20 6f 62 73 6f 6c 65 74 65 20 72 6f 75 74 69  n obsolete routi
6040: 6e 65 2e 20 20 50 43 2f 53 43 20 68 61 73 20 72  ne.  PC/SC has r
6050: 65 70 6c 61 63 65 64 20 69 74 20 77 69 74 68 0d  eplaced it with.
6060: 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 53 43 61  .//          SCa
6070: 72 64 53 74 61 74 75 73 2e 0d 0a 2f 2f 0d 0a 0d  rdStatus...//...
6080: 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44  .extern WINSCARD
6090: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d  API LONG WINAPI.
60a0: 0a 53 43 61 72 64 53 74 61 74 75 73 41 28 0d 0a  .SCardStatusA(..
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 43 41 52              SCAR
60c0: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a  DHANDLE hCard,..
60d0: 20 20 20 20 20 20 4c 50 53 54 52 20 6d 73 7a 52        LPSTR mszR
60e0: 65 61 64 65 72 4e 61 6d 65 73 2c 0d 0a 20 4c 50  eaderNames,.. LP
60f0: 44 57 4f 52 44 20 70 63 63 68 52 65 61 64 65 72  DWORD pcchReader
6100: 4c 65 6e 2c 0d 0a 20 20 20 20 20 20 20 4c 50 44  Len,..       LPD
6110: 57 4f 52 44 20 70 64 77 53 74 61 74 65 2c 0d 0a  WORD pdwState,..
6120: 20 20 20 20 20 20 20 4c 50 44 57 4f 52 44 20 70         LPDWORD p
6130: 64 77 50 72 6f 74 6f 63 6f 6c 2c 0d 0a 20 20 20  dwProtocol,..   
6140: 20 20 4c 50 42 59 54 45 20 70 62 41 74 72 2c 0d    LPBYTE pbAtr,.
6150: 0a 20 4c 50 44 57 4f 52 44 20 70 63 62 41 74 72  . LPDWORD pcbAtr
6160: 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49  Len);..extern WI
6170: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57  NSCARDAPI LONG W
6180: 49 4e 41 50 49 0d 0a 53 43 61 72 64 53 74 61 74  INAPI..SCardStat
6190: 75 73 57 28 0d 0a 20 20 20 20 20 20 20 20 20 20  usW(..          
61a0: 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43    SCARDHANDLE hC
61b0: 61 72 64 2c 0d 0a 20 20 20 20 20 20 4c 50 57 53  ard,..      LPWS
61c0: 54 52 20 6d 73 7a 52 65 61 64 65 72 4e 61 6d 65  TR mszReaderName
61d0: 73 2c 0d 0a 20 4c 50 44 57 4f 52 44 20 70 63 63  s,.. LPDWORD pcc
61e0: 68 52 65 61 64 65 72 4c 65 6e 2c 0d 0a 20 20 20  hReaderLen,..   
61f0: 20 20 20 20 4c 50 44 57 4f 52 44 20 70 64 77 53      LPDWORD pdwS
6200: 74 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 4c 50  tate,..       LP
6210: 44 57 4f 52 44 20 70 64 77 50 72 6f 74 6f 63 6f  DWORD pdwProtoco
6220: 6c 2c 0d 0a 20 20 20 20 20 4c 50 42 59 54 45 20  l,..     LPBYTE 
6230: 70 62 41 74 72 2c 0d 0a 20 4c 50 44 57 4f 52 44  pbAtr,.. LPDWORD
6240: 20 70 63 62 41 74 72 4c 65 6e 29 3b 0d 0a 23 69   pcbAtrLen);..#i
6250: 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64  fdef UNICODE..#d
6260: 65 66 69 6e 65 20 53 43 61 72 64 53 74 61 74 75  efine SCardStatu
6270: 73 20 20 53 43 61 72 64 53 74 61 74 75 73 57 0d  s  SCardStatusW.
6280: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20  .#else..#define 
6290: 53 43 61 72 64 53 74 61 74 75 73 20 20 53 43 61  SCardStatus  SCa
62a0: 72 64 53 74 61 74 75 73 41 0d 0a 23 65 6e 64 69  rdStatusA..#endi
62b0: 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d  f // !UNICODE...
62c0: 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44  .extern WINSCARD
62d0: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d  API LONG WINAPI.
62e0: 0a 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 0d  .SCardTransmit(.
62f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 41  .            SCA
6300: 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d  RDHANDLE hCard,.
6310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 43  .            LPC
6320: 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54  SCARD_IO_REQUEST
6330: 20 70 69 6f 53 65 6e 64 50 63 69 2c 0d 0a 20 20   pioSendPci,..  
6340: 20 20 20 4c 50 43 42 59 54 45 20 70 62 53 65 6e     LPCBYTE pbSen
6350: 64 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20  dBuffer,..      
6360: 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 53 65        DWORD cbSe
6370: 6e 64 4c 65 6e 67 74 68 2c 0d 0a 20 4c 50 53 43  ndLength,.. LPSC
6380: 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 20 70  ARD_IO_REQUEST p
6390: 69 6f 52 65 63 76 50 63 69 2c 0d 0a 20 20 20 20  ioRecvPci,..    
63a0: 20 4c 50 42 59 54 45 20 70 62 52 65 63 76 42 75   LPBYTE pbRecvBu
63b0: 66 66 65 72 2c 0d 0a 20 20 20 20 20 4c 50 44 57  ffer,..     LPDW
63c0: 4f 52 44 20 70 63 62 52 65 63 76 4c 65 6e 67 74  ORD pcbRecvLengt
63d0: 68 29 3b 0d 0a 0d 0a 23 69 66 20 28 4e 54 44 44  h);....#if (NTDD
63e0: 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44  I_VERSION >= NTD
63f0: 44 49 5f 56 49 53 54 41 29 0d 0a 65 78 74 65 72  DI_VISTA)..exter
6400: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
6410: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
6420: 47 65 74 54 72 61 6e 73 6d 69 74 43 6f 75 6e 74  GetTransmitCount
6430: 28 0d 0a 20 20 20 20 20 53 43 41 52 44 48 41 4e  (..     SCARDHAN
6440: 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 20  DLE hCard,..    
6450: 20 4c 50 44 57 4f 52 44 20 70 63 54 72 61 6e 73   LPDWORD pcTrans
6460: 6d 69 74 43 6f 75 6e 74 29 3b 0d 0a 23 65 6e 64  mitCount);..#end
6470: 69 66 20 2f 2f 20 28 4e 54 44 44 49 5f 56 45 52  if // (NTDDI_VER
6480: 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 56 49  SION >= NTDDI_VI
6490: 53 54 41 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f  STA)....//..////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f  ////////////..//
64f0: 0d 0a 2f 2f 20 20 52 65 61 64 65 72 20 43 6f 6e  ..//  Reader Con
6500: 74 72 6f 6c 20 52 6f 75 74 69 6e 65 73 0d 0a 2f  trol Routines../
6510: 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 66  /..//      The f
6520: 6f 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 65  ollowing service
6530: 73 20 70 72 6f 76 69 64 65 20 66 6f 72 20 64 69  s provide for di
6540: 72 65 63 74 2c 20 6c 6f 77 2d 6c 65 76 65 6c 20  rect, low-level 
6550: 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 20 6f 66 20  manipulation of 
6560: 74 68 65 0d 0a 2f 2f 20 20 20 20 20 20 72 65 61  the..//      rea
6570: 64 65 72 20 62 79 20 74 68 65 20 63 61 6c 6c 69  der by the calli
6580: 6e 67 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61  ng application a
6590: 6c 6c 6f 77 69 6e 67 20 69 74 20 63 6f 6e 74 72  llowing it contr
65a0: 6f 6c 20 6f 76 65 72 20 74 68 65 0d 0a 2f 2f 20  ol over the..// 
65b0: 20 20 20 20 20 61 74 74 72 69 62 75 74 65 73 20       attributes 
65c0: 6f 66 20 74 68 65 20 63 6f 6d 6d 75 6e 69 63 61  of the communica
65d0: 74 69 6f 6e 73 20 77 69 74 68 20 74 68 65 20 63  tions with the c
65e0: 61 72 64 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65  ard...//....exte
65f0: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
6600: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
6610: 64 43 6f 6e 74 72 6f 6c 28 0d 0a 20 20 20 20 20  dControl(..     
6620: 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68     SCARDHANDLE h
6630: 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 20 44  Card,..        D
6640: 57 4f 52 44 20 64 77 43 6f 6e 74 72 6f 6c 43 6f  WORD dwControlCo
6650: 64 65 2c 0d 0a 20 20 20 20 20 4c 50 43 56 4f 49  de,..     LPCVOI
6660: 44 20 6c 70 49 6e 42 75 66 66 65 72 2c 0d 0a 20  D lpInBuffer,.. 
6670: 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 49         DWORD cbI
6680: 6e 42 75 66 66 65 72 53 69 7a 65 2c 0d 0a 20 20  nBufferSize,..  
6690: 20 20 20 4c 50 56 4f 49 44 20 6c 70 4f 75 74 42     LPVOID lpOutB
66a0: 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  uffer,..        
66b0: 44 57 4f 52 44 20 63 62 4f 75 74 42 75 66 66 65  DWORD cbOutBuffe
66c0: 72 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20 20 4c  rSize,..       L
66d0: 50 44 57 4f 52 44 20 6c 70 42 79 74 65 73 52 65  PDWORD lpBytesRe
66e0: 74 75 72 6e 65 64 29 3b 0d 0a 0d 0a 65 78 74 65  turned);....exte
66f0: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
6700: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72  ONG WINAPI..SCar
6710: 64 47 65 74 41 74 74 72 69 62 28 0d 0a 20 20 20  dGetAttrib(..   
6720: 20 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45       SCARDHANDLE
6730: 20 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20   hCard,..       
6740: 20 44 57 4f 52 44 20 64 77 41 74 74 72 49 64 2c   DWORD dwAttrId,
6750: 0d 0a 20 20 20 20 20 4c 50 42 59 54 45 20 70 62  ..     LPBYTE pb
6760: 41 74 74 72 2c 0d 0a 20 4c 50 44 57 4f 52 44 20  Attr,.. LPDWORD 
6770: 70 63 62 41 74 74 72 4c 65 6e 29 3b 0d 0a 2f 2f  pcbAttrLen);..//
6780: 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20 20 54 68  ..// NOTE:    Th
6790: 65 20 72 6f 75 74 69 6e 65 20 53 43 61 72 64 47  e routine SCardG
67a0: 65 74 41 74 74 72 69 62 27 73 20 6e 61 6d 65 20  etAttrib's name 
67b0: 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
67c0: 20 50 43 2f 53 43 20 64 65 66 69 6e 69 74 69 6f   PC/SC definitio
67d0: 6e 2e 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  n...//          
67e0: 49 74 20 73 68 6f 75 6c 64 20 62 65 3a 0d 0a 2f  It should be:../
67f0: 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20  /..//           
6800: 20 20 20 65 78 74 65 72 6e 20 57 49 4e 53 43 41     extern WINSCA
6810: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
6820: 49 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20  I..//           
6830: 20 20 20 53 43 61 72 64 47 65 74 52 65 61 64 65     SCardGetReade
6840: 72 43 61 70 61 62 69 6c 69 74 69 65 73 28 0d 0a  rCapabilities(..
6850: 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  //              
6860: 20 20 20 20 20 20 20 20 53 43 41 52 44 48 41 4e          SCARDHAN
6870: 44 4c 45 20 68 43 61 72 64 2c 0d 0a 2f 2f 20 20  DLE hCard,..//  
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 20 20 44 57 4f 52 44 20 64 77 54 61 67 2c      DWORD dwTag,
68a0: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20  ..//            
68b0: 20 20 20 20 20 20 20 20 20 4c 50 42 59 54 45 20           LPBYTE 
68c0: 70 62 41 74 74 72 2c 0d 0a 2f 2f 20 20 20 20 20  pbAttr,..//     
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74               out
68e0: 20 4c 50 44 57 4f 52 44 20 70 63 62 41 74 74 72   LPDWORD pcbAttr
68f0: 4c 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20  Len);..//..//   
6900: 20 20 20 20 20 20 20 48 65 72 65 27 73 20 61 20         Here's a 
6910: 77 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d 41 43 52  work-around MACR
6920: 4f 3a 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72  O:..#define SCar
6930: 64 47 65 74 52 65 61 64 65 72 43 61 70 61 62 69  dGetReaderCapabi
6940: 6c 69 74 69 65 73 20 53 43 61 72 64 47 65 74 41  lities SCardGetA
6950: 74 74 72 69 62 0d 0a 0d 0a 65 78 74 65 72 6e 20  ttrib....extern 
6960: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
6970: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 53 65   WINAPI..SCardSe
6980: 74 41 74 74 72 69 62 28 0d 0a 20 20 20 20 20 53  tAttrib(..     S
6990: 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64  CARDHANDLE hCard
69a0: 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 64 77  ,..     DWORD dw
69b0: 41 74 74 72 49 64 2c 0d 0a 20 20 20 20 20 4c 50  AttrId,..     LP
69c0: 43 42 59 54 45 20 70 62 41 74 74 72 2c 0d 0a 20  CBYTE pbAttr,.. 
69d0: 20 20 20 20 44 57 4f 52 44 20 63 62 41 74 74 72      DWORD cbAttr
69e0: 4c 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f  Len);..//..// NO
69f0: 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69  TE:    The routi
6a00: 6e 65 20 53 43 61 72 64 53 65 74 41 74 74 72 69  ne SCardSetAttri
6a10: 62 27 73 20 6e 61 6d 65 20 64 69 66 66 65 72 73  b's name differs
6a20: 20 66 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20   from the PC/SC 
6a30: 64 65 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f 2f 20  definition...// 
6a40: 20 20 20 20 20 20 20 20 20 49 74 20 73 68 6f 75           It shou
6a50: 6c 64 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20  ld be:..//..//  
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 65              exte
6a70: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c  rn WINSCARDAPI L
6a80: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 2f 2f 20 20  ONG WINAPI..//  
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 53 43 61 72              SCar
6aa0: 64 53 65 74 52 65 61 64 65 72 43 61 70 61 62 69  dSetReaderCapabi
6ab0: 6c 69 74 69 65 73 28 0d 0a 2f 2f 20 20 20 20 20  lities(..//     
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ad0: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61   SCARDHANDLE hCa
6ae0: 72 64 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20  rd,..//         
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 57 4f               DWO
6b00: 52 44 20 64 77 54 61 67 2c 0d 0a 2f 2f 20 20 20  RD dwTag,..//   
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b20: 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 74     LPCBYTE pbAtt
6b30: 72 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  r,..//          
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 44 57 4f 52              DWOR
6b50: 44 20 63 62 41 74 74 72 4c 65 6e 29 3b 0d 0a 2f  D cbAttrLen);../
6b60: 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 48  /..//          H
6b70: 65 72 65 27 73 20 61 20 77 6f 72 6b 2d 61 72 6f  ere's a work-aro
6b80: 75 6e 64 20 4d 41 43 52 4f 3a 0d 0a 23 64 65 66  und MACRO:..#def
6b90: 69 6e 65 20 53 43 61 72 64 53 65 74 52 65 61 64  ine SCardSetRead
6ba0: 65 72 43 61 70 61 62 69 6c 69 74 69 65 73 20 53  erCapabilities S
6bb0: 43 61 72 64 53 65 74 41 74 74 72 69 62 0d 0a 0d  CardSetAttrib...
6bc0: 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...//../////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20  ///////..//..// 
6c20: 20 53 6d 61 72 74 20 43 61 72 64 20 44 69 61 6c   Smart Card Dial
6c30: 6f 67 20 64 65 66 69 6e 69 74 69 6f 6e 73 0d 0a  og definitions..
6c40: 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 20  //..//      The 
6c50: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 63 74 69 6f  following sectio
6c60: 6e 20 63 6f 6e 74 61 69 6e 73 20 73 74 72 75 63  n contains struc
6c70: 74 75 72 65 73 20 61 6e 64 20 20 65 78 70 6f 72  tures and  expor
6c80: 74 65 64 20 66 75 6e 63 74 69 6f 6e 0d 0a 2f 2f  ted function..//
6c90: 20 20 20 20 20 20 64 65 63 6c 61 72 61 74 69 6f        declaratio
6ca0: 6e 73 20 66 6f 72 20 74 68 65 20 53 6d 61 72 74  ns for the Smart
6cb0: 20 43 61 72 64 20 43 6f 6d 6d 6f 6e 20 44 69 61   Card Common Dia
6cc0: 6c 6f 67 20 64 69 61 6c 6f 67 2e 0d 0a 2f 2f 0d  log dialog...//.
6cd0: 0a 0d 0a 2f 2f 20 44 65 66 69 6e 65 64 20 63 6f  ...// Defined co
6ce0: 6e 73 74 61 6e 74 73 0d 0a 2f 2f 20 46 6c 61 67  nstants..// Flag
6cf0: 73 0d 0a 23 64 65 66 69 6e 65 20 53 43 5f 44 4c  s..#define SC_DL
6d00: 47 5f 4d 49 4e 49 4d 41 4c 5f 55 49 20 20 20 20  G_MINIMAL_UI    
6d10: 20 20 20 30 78 30 31 0d 0a 23 64 65 66 69 6e 65     0x01..#define
6d20: 20 53 43 5f 44 4c 47 5f 4e 4f 5f 55 49 20 20 20   SC_DLG_NO_UI   
6d30: 20 20 20 20 20 20 20 20 20 30 78 30 32 0d 0a 23           0x02..#
6d40: 64 65 66 69 6e 65 20 53 43 5f 44 4c 47 5f 46 4f  define SC_DLG_FO
6d50: 52 43 45 5f 55 49 20 20 20 20 20 20 20 20 20 30  RCE_UI         0
6d60: 78 30 34 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53  x04....#define S
6d70: 43 45 52 52 5f 4e 4f 43 41 52 44 4e 41 4d 45 20  CERR_NOCARDNAME 
6d80: 20 20 20 20 20 20 20 30 78 34 30 30 30 0d 0a 23         0x4000..#
6d90: 64 65 66 69 6e 65 20 53 43 45 52 52 5f 4e 4f 47  define SCERR_NOG
6da0: 55 49 44 53 20 20 20 20 20 20 20 20 20 20 20 30  UIDS           0
6db0: 78 38 30 30 30 0d 0a 0d 0a 74 79 70 65 64 65 66  x8000....typedef
6dc0: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 28 57 49   SCARDHANDLE (WI
6dd0: 4e 41 50 49 20 2a 4c 50 4f 43 4e 43 4f 4e 4e 50  NAPI *LPOCNCONNP
6de0: 52 4f 43 41 29 20 28 20 53 43 41 52 44 43 4f 4e  ROCA) ( SCARDCON
6df0: 54 45 58 54 2c 20 20 4c 50 53 54 52 2c 20 20 4c  TEXT,  LPSTR,  L
6e00: 50 53 54 52 2c 20 20 50 56 4f 49 44 29 3b 0d 0a  PSTR,  PVOID);..
6e10: 74 79 70 65 64 65 66 20 53 43 41 52 44 48 41 4e  typedef SCARDHAN
6e20: 44 4c 45 20 28 57 49 4e 41 50 49 20 2a 4c 50 4f  DLE (WINAPI *LPO
6e30: 43 4e 43 4f 4e 4e 50 52 4f 43 57 29 20 28 20 53  CNCONNPROCW) ( S
6e40: 43 41 52 44 43 4f 4e 54 45 58 54 2c 20 20 4c 50  CARDCONTEXT,  LP
6e50: 57 53 54 52 2c 20 20 4c 50 57 53 54 52 2c 20 20  WSTR,  LPWSTR,  
6e60: 50 56 4f 49 44 29 3b 0d 0a 23 69 66 64 65 66 20  PVOID);..#ifdef 
6e70: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65  UNICODE..#define
6e80: 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 20 20   LPOCNCONNPROC  
6e90: 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 57 0d 0a  LPOCNCONNPROCW..
6ea0: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 4c  #else..#define L
6eb0: 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 20 20 4c 50  POCNCONNPROC  LP
6ec0: 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 0d 0a 23 65  OCNCONNPROCA..#e
6ed0: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45  ndif // !UNICODE
6ee0: 0d 0a 74 79 70 65 64 65 66 20 42 4f 4f 4c 20 28  ..typedef BOOL (
6ef0: 57 49 4e 41 50 49 20 2a 4c 50 4f 43 4e 43 48 4b  WINAPI *LPOCNCHK
6f00: 50 52 4f 43 29 20 28 20 53 43 41 52 44 43 4f 4e  PROC) ( SCARDCON
6f10: 54 45 58 54 2c 20 20 53 43 41 52 44 48 41 4e 44  TEXT,  SCARDHAND
6f20: 4c 45 2c 20 20 50 56 4f 49 44 29 3b 0d 0a 74 79  LE,  PVOID);..ty
6f30: 70 65 64 65 66 20 76 6f 69 64 20 28 57 49 4e 41  pedef void (WINA
6f40: 50 49 20 2a 4c 50 4f 43 4e 44 53 43 50 52 4f 43  PI *LPOCNDSCPROC
6f50: 29 20 28 20 53 43 41 52 44 43 4f 4e 54 45 58 54  ) ( SCARDCONTEXT
6f60: 2c 20 20 53 43 41 52 44 48 41 4e 44 4c 45 2c 20  ,  SCARDHANDLE, 
6f70: 20 50 56 4f 49 44 29 3b 0d 0a 0d 0a 0d 0a 2f 2f   PVOID);......//
6f80: 0d 0a 2f 2f 20 4f 50 45 4e 43 41 52 44 5f 53 45  ..// OPENCARD_SE
6f90: 41 52 43 48 5f 43 52 49 54 45 52 49 41 3a 20 49  ARCH_CRITERIA: I
6fa0: 6e 20 6f 72 64 65 72 20 74 6f 20 73 70 65 63 69  n order to speci
6fb0: 66 79 20 61 20 75 73 65 72 2d 65 78 74 65 6e 64  fy a user-extend
6fc0: 65 64 20 73 65 61 72 63 68 2c 0d 0a 2f 2f 20 6c  ed search,..// l
6fd0: 70 66 6e 43 68 65 63 6b 20 6d 75 73 74 20 6e 6f  pfnCheck must no
6fe0: 74 20 62 65 20 4e 55 4c 4c 2e 20 20 4d 6f 72 65  t be NULL.  More
6ff0: 6f 76 65 72 2c 20 74 68 65 20 63 6f 6e 6e 65 63  over, the connec
7000: 74 69 6f 6e 20 74 6f 20 62 65 20 6d 61 64 65 20  tion to be made 
7010: 74 6f 20 74 68 65 0d 0a 2f 2f 20 63 61 72 64 20  to the..// card 
7020: 62 65 66 6f 72 65 20 70 65 72 66 6f 72 6d 69 6e  before performin
7030: 67 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6d  g the callback m
7040: 75 73 74 20 62 65 20 69 6e 64 69 63 61 74 65 64  ust be indicated
7050: 20 62 79 20 65 69 74 68 65 72 20 70 72 6f 76 69   by either provi
7060: 64 69 6e 67 0d 0a 2f 2f 20 6c 70 66 6e 43 6f 6e  ding..// lpfnCon
7070: 6e 65 63 74 20 61 6e 64 20 6c 70 66 6e 44 69 73  nect and lpfnDis
7080: 63 6f 6e 6e 65 63 74 20 4f 52 20 62 79 20 73 65  connect OR by se
7090: 74 74 69 6e 67 20 64 77 53 68 61 72 65 4d 6f 64  tting dwShareMod
70a0: 65 2e 0d 0a 2f 2f 20 49 66 20 62 6f 74 68 20 74  e...// If both t
70b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61  he connection ca
70c0: 6c 6c 62 61 63 6b 73 20 61 6e 64 20 64 77 53 68  llbacks and dwSh
70d0: 61 72 65 4d 6f 64 65 20 61 72 65 20 6e 6f 6e 2d  areMode are non-
70e0: 4e 55 4c 4c 2c 20 74 68 65 20 63 61 6c 6c 62 61  NULL, the callba
70f0: 63 6b 73 0d 0a 2f 2f 20 77 69 6c 6c 20 62 65 20  cks..// will be 
7100: 75 73 65 64 2e 0d 0a 2f 2f 0d 0a 0d 0a 74 79 70  used...//....typ
7110: 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20  edef struct {.. 
7120: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
7130: 20 20 20 64 77 53 74 72 75 63 74 53 69 7a 65 3b     dwStructSize;
7140: 0d 0a 20 20 20 20 4c 50 53 54 52 20 20 20 20 20  ..    LPSTR     
7150: 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f 75 70        lpstrGroup
7160: 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 2f 2f  Names;        //
7170: 20 4f 50 54 49 4f 4e 41 4c 20 72 65 61 64 65 72   OPTIONAL reader
7180: 20 67 72 6f 75 70 73 20 74 6f 20 69 6e 63 6c 75   groups to inclu
7190: 64 65 20 69 6e 0d 0a 20 20 20 20 44 57 4f 52 44  de in..    DWORD
71a0: 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 47             nMaxG
71b0: 72 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 20  roupNames;      
71c0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 73     //          s
71d0: 65 61 72 63 68 2e 20 20 4e 55 4c 4c 20 64 65 66  earch.  NULL def
71e0: 61 75 6c 74 73 20 74 6f 0d 0a 20 20 20 20 20 20  aults to..      
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
7220: 20 20 53 43 61 72 64 24 44 65 66 61 75 6c 74 52    SCard$DefaultR
7230: 65 61 64 65 72 73 0d 0a 20 20 20 20 4c 50 43 47  eaders..    LPCG
7240: 55 49 44 20 20 20 20 20 20 20 20 20 72 67 67 75  UID         rggu
7250: 69 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20  idInterfaces;   
7260: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20      // OPTIONAL 
7270: 72 65 71 75 65 73 74 65 64 20 69 6e 74 65 72 66  requested interf
7280: 61 63 65 73 0d 0a 20 20 20 20 44 57 4f 52 44 20  aces..    DWORD 
7290: 20 20 20 20 20 20 20 20 20 20 63 67 75 69 64 49            cguidI
72a0: 6e 74 65 72 66 61 63 65 73 3b 20 20 20 20 20 20  nterfaces;      
72b0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 73 75    //          su
72c0: 70 70 6f 72 74 65 64 20 62 79 20 63 61 72 64 27  pported by card'
72d0: 73 20 53 53 50 0d 0a 20 20 20 20 4c 50 53 54 52  s SSP..    LPSTR
72e0: 20 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72             lpstr
72f0: 43 61 72 64 4e 61 6d 65 73 3b 20 20 20 20 20 20  CardNames;      
7300: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72     // OPTIONAL r
7310: 65 71 75 65 73 74 65 64 20 63 61 72 64 20 6e 61  equested card na
7320: 6d 65 73 3b 20 61 6c 6c 20 63 61 72 64 73 20 77  mes; all cards w
7330: 2f 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  /..    DWORD    
7340: 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 4e         nMaxCardN
7350: 61 6d 65 73 3b 20 20 20 20 20 20 20 20 20 20 2f  ames;          /
7360: 2f 20 20 20 20 20 20 20 20 20 20 6d 61 74 63 68  /          match
7370: 69 6e 67 20 41 54 52 73 20 77 69 6c 6c 20 62 65  ing ATRs will be
7380: 20 61 63 63 65 70 74 65 64 0d 0a 20 20 20 20 4c   accepted..    L
7390: 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20 20 6c  POCNCHKPROC    l
73a0: 70 66 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20  pfnCheck;       
73b0: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
73c0: 41 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f 20 75 73  AL if NULL no us
73d0: 65 72 20 63 68 65 63 6b 20 77 69 6c 6c 20 62 65  er check will be
73e0: 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20 20 20   performed...   
73f0: 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20   LPOCNCONNPROCA 
7400: 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20 20   lpfnConnect;   
7410: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49           // OPTI
7420: 4f 4e 41 4c 20 69 66 20 6c 70 66 6e 43 6f 6e 6e  ONAL if lpfnConn
7430: 65 63 74 20 69 73 20 70 72 6f 76 69 64 65 64 2c  ect is provided,
7440: 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43 50 52  ..    LPOCNDSCPR
7450: 4f 43 20 20 20 20 6c 70 66 6e 44 69 73 63 6f 6e  OC    lpfnDiscon
7460: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2f  nect;         //
7470: 20 20 20 20 20 20 20 20 20 20 6c 70 66 6e 44 69            lpfnDi
7480: 73 63 6f 6e 6e 65 63 74 20 6d 75 73 74 20 61 6c  sconnect must al
7490: 73 6f 20 62 65 20 73 65 74 2e 0d 0a 20 20 20 20  so be set...    
74a0: 4c 50 56 4f 49 44 20 20 20 20 20 20 20 20 20 20  LPVOID          
74b0: 70 76 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  pvUserData;     
74c0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f          // OPTIO
74d0: 4e 41 4c 20 70 61 72 61 6d 65 74 65 72 20 74 6f  NAL parameter to
74e0: 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 20 20   callbacks..    
74f0: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
7500: 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 20 20  dwShareMode;    
7510: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f          // OPTIO
7520: 4e 41 4c 20 6d 75 73 74 20 62 65 20 73 65 74 20  NAL must be set 
7530: 69 66 20 6c 70 66 6e 43 68 65 63 6b 20 69 73 20  if lpfnCheck is 
7540: 6e 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20 20 44 57  not null..    DW
7550: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
7560: 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f  PreferredProtoco
7570: 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41  ls;   // OPTIONA
7580: 4c 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 5f 53 45  L..} OPENCARD_SE
7590: 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 2c 20  ARCH_CRITERIAA, 
75a0: 2a 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43  *POPENCARD_SEARC
75b0: 48 5f 43 52 49 54 45 52 49 41 41 2c 20 2a 4c 50  H_CRITERIAA, *LP
75c0: 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f  OPENCARD_SEARCH_
75d0: 43 52 49 54 45 52 49 41 41 3b 0d 0a 74 79 70 65  CRITERIAA;..type
75e0: 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20  def struct {..  
75f0: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
7600: 20 20 64 77 53 74 72 75 63 74 53 69 7a 65 3b 0d    dwStructSize;.
7610: 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 20 20  .    LPWSTR     
7620: 20 20 20 20 20 6c 70 73 74 72 47 72 6f 75 70 4e       lpstrGroupN
7630: 61 6d 65 73 3b 20 20 20 20 20 20 20 20 2f 2f 20  ames;        // 
7640: 4f 50 54 49 4f 4e 41 4c 20 72 65 61 64 65 72 20  OPTIONAL reader 
7650: 67 72 6f 75 70 73 20 74 6f 20 69 6e 63 6c 75 64  groups to includ
7660: 65 20 69 6e 0d 0a 20 20 20 20 44 57 4f 52 44 20  e in..    DWORD 
7670: 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 47 72            nMaxGr
7680: 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 20 20  oupNames;       
7690: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 73 65    //          se
76a0: 61 72 63 68 2e 20 20 4e 55 4c 4c 20 64 65 66 61  arch.  NULL defa
76b0: 75 6c 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  ults to..       
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76e0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
76f0: 20 53 43 61 72 64 24 44 65 66 61 75 6c 74 52 65   SCard$DefaultRe
7700: 61 64 65 72 73 0d 0a 20 20 20 20 4c 50 43 47 55  aders..    LPCGU
7710: 49 44 20 20 20 20 20 20 20 20 20 72 67 67 75 69  ID         rggui
7720: 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20 20  dInterfaces;    
7730: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72     // OPTIONAL r
7740: 65 71 75 65 73 74 65 64 20 69 6e 74 65 72 66 61  equested interfa
7750: 63 65 73 0d 0a 20 20 20 20 44 57 4f 52 44 20 20  ces..    DWORD  
7760: 20 20 20 20 20 20 20 20 20 63 67 75 69 64 49 6e           cguidIn
7770: 74 65 72 66 61 63 65 73 3b 20 20 20 20 20 20 20  terfaces;       
7780: 20 2f 2f 20 20 20 20 20 20 20 20 20 20 73 75 70   //          sup
7790: 70 6f 72 74 65 64 20 62 79 20 63 61 72 64 27 73  ported by card's
77a0: 20 53 53 50 0d 0a 20 20 20 20 4c 50 57 53 54 52   SSP..    LPWSTR
77b0: 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 43            lpstrC
77c0: 61 72 64 4e 61 6d 65 73 3b 20 20 20 20 20 20 20  ardNames;       
77d0: 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72 65    // OPTIONAL re
77e0: 71 75 65 73 74 65 64 20 63 61 72 64 20 6e 61 6d  quested card nam
77f0: 65 73 3b 20 61 6c 6c 20 63 61 72 64 73 20 77 2f  es; all cards w/
7800: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
7810: 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 4e 61        nMaxCardNa
7820: 6d 65 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2f  mes;          //
7830: 20 20 20 20 20 20 20 20 20 20 6d 61 74 63 68 69            matchi
7840: 6e 67 20 41 54 52 73 20 77 69 6c 6c 20 62 65 20  ng ATRs will be 
7850: 61 63 63 65 70 74 65 64 0d 0a 20 20 20 20 4c 50  accepted..    LP
7860: 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20 20 6c 70  OCNCHKPROC    lp
7870: 66 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20  fnCheck;        
7880: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41        // OPTIONA
7890: 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f 20 75 73 65  L if NULL no use
78a0: 72 20 63 68 65 63 6b 20 77 69 6c 6c 20 62 65 20  r check will be 
78b0: 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20 20 20 20  performed...    
78c0: 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 57 20 20  LPOCNCONNPROCW  
78d0: 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20 20 20  lpfnConnect;    
78e0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f          // OPTIO
78f0: 4e 41 4c 20 69 66 20 6c 70 66 6e 43 6f 6e 6e 65  NAL if lpfnConne
7900: 63 74 20 69 73 20 70 72 6f 76 69 64 65 64 2c 0d  ct is provided,.
7910: 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43 50 52 4f  .    LPOCNDSCPRO
7920: 43 20 20 20 20 6c 70 66 6e 44 69 73 63 6f 6e 6e  C    lpfnDisconn
7930: 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2f 20  ect;         // 
7940: 20 20 20 20 20 20 20 20 20 6c 70 66 6e 44 69 73           lpfnDis
7950: 63 6f 6e 6e 65 63 74 20 6d 75 73 74 20 61 6c 73  connect must als
7960: 6f 20 62 65 20 73 65 74 2e 0d 0a 20 20 20 20 4c  o be set...    L
7970: 50 56 4f 49 44 20 20 20 20 20 20 20 20 20 20 70  PVOID          p
7980: 76 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 20  vUserData;      
7990: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
79a0: 41 4c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  AL parameter to 
79b0: 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 20 20 44  callbacks..    D
79c0: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64  WORD           d
79d0: 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 20 20 20  wShareMode;     
79e0: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
79f0: 41 4c 20 6d 75 73 74 20 62 65 20 73 65 74 20 69  AL must be set i
7a00: 66 20 6c 70 66 6e 43 68 65 63 6b 20 69 73 20 6e  f lpfnCheck is n
7a10: 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20 20 44 57 4f  ot null..    DWO
7a20: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 50  RD           dwP
7a30: 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f 6c  referredProtocol
7a40: 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c  s;   // OPTIONAL
7a50: 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 5f 53 45 41  ..} OPENCARD_SEA
7a60: 52 43 48 5f 43 52 49 54 45 52 49 41 57 2c 20 2a  RCH_CRITERIAW, *
7a70: 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48  POPENCARD_SEARCH
7a80: 5f 43 52 49 54 45 52 49 41 57 2c 20 2a 4c 50 4f  _CRITERIAW, *LPO
7a90: 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43  PENCARD_SEARCH_C
7aa0: 52 49 54 45 52 49 41 57 3b 0d 0a 23 69 66 64 65  RITERIAW;..#ifde
7ab0: 66 20 55 4e 49 43 4f 44 45 0d 0a 74 79 70 65 64  f UNICODE..typed
7ac0: 65 66 20 4f 50 45 4e 43 41 52 44 5f 53 45 41 52  ef OPENCARD_SEAR
7ad0: 43 48 5f 43 52 49 54 45 52 49 41 57 20 4f 50 45  CH_CRITERIAW OPE
7ae0: 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52 49  NCARD_SEARCH_CRI
7af0: 54 45 52 49 41 3b 0d 0a 74 79 70 65 64 65 66 20  TERIA;..typedef 
7b00: 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48  POPENCARD_SEARCH
7b10: 5f 43 52 49 54 45 52 49 41 57 20 50 4f 50 45 4e  _CRITERIAW POPEN
7b20: 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52 49 54  CARD_SEARCH_CRIT
7b30: 45 52 49 41 3b 0d 0a 74 79 70 65 64 65 66 20 4c  ERIA;..typedef L
7b40: 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48  POPENCARD_SEARCH
7b50: 5f 43 52 49 54 45 52 49 41 57 20 4c 50 4f 50 45  _CRITERIAW LPOPE
7b60: 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52 49  NCARD_SEARCH_CRI
7b70: 54 45 52 49 41 3b 0d 0a 23 65 6c 73 65 0d 0a 74  TERIA;..#else..t
7b80: 79 70 65 64 65 66 20 4f 50 45 4e 43 41 52 44 5f  ypedef OPENCARD_
7b90: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 41  SEARCH_CRITERIAA
7ba0: 20 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48   OPENCARD_SEARCH
7bb0: 5f 43 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 65  _CRITERIA;..type
7bc0: 64 65 66 20 50 4f 50 45 4e 43 41 52 44 5f 53 45  def POPENCARD_SE
7bd0: 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 20 50  ARCH_CRITERIAA P
7be0: 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f  OPENCARD_SEARCH_
7bf0: 43 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 65 64  CRITERIA;..typed
7c00: 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45  ef LPOPENCARD_SE
7c10: 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 20 4c  ARCH_CRITERIAA L
7c20: 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48  POPENCARD_SEARCH
7c30: 5f 43 52 49 54 45 52 49 41 3b 0d 0a 23 65 6e 64  _CRITERIA;..#end
7c40: 69 66 20 2f 2f 20 55 4e 49 43 4f 44 45 0d 0a 0d  if // UNICODE...
7c50: 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 4f 50 45 4e 43 41  ...//..// OPENCA
7c60: 52 44 4e 41 4d 45 5f 45 58 3a 20 75 73 65 64 20  RDNAME_EX: used 
7c70: 62 79 20 53 43 61 72 64 55 49 44 6c 67 53 65 6c  by SCardUIDlgSel
7c80: 65 63 74 43 61 72 64 3b 20 72 65 70 6c 61 63 65  ectCard; replace
7c90: 73 20 6f 62 73 6f 6c 65 74 65 20 4f 50 45 4e 43  s obsolete OPENC
7ca0: 41 52 44 4e 41 4d 45 0d 0a 2f 2f 0d 0a 0d 0a 74  ARDNAME..//....t
7cb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d  ypedef struct {.
7cc0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
7cd0: 20 20 20 20 20 64 77 53 74 72 75 63 74 53 69 7a       dwStructSiz
7ce0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e;           // 
7cf0: 52 45 51 55 49 52 45 44 0d 0a 20 20 20 20 53 43  REQUIRED..    SC
7d00: 41 52 44 43 4f 4e 54 45 58 54 20 20 20 20 68 53  ARDCONTEXT    hS
7d10: 43 61 72 64 43 6f 6e 74 65 78 74 3b 20 20 20 20  CardContext;    
7d20: 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52 45        // REQUIRE
7d30: 44 0d 0a 20 20 20 20 48 57 4e 44 20 20 20 20 20  D..    HWND     
7d40: 20 20 20 20 20 20 20 68 77 6e 64 4f 77 6e 65 72         hwndOwner
7d50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
7d60: 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 20  / OPTIONAL..    
7d70: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
7d80: 64 77 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  dwFlags;        
7d90: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f          // OPTIO
7da0: 4e 41 4c 20 2d 2d 20 64 65 66 61 75 6c 74 20 69  NAL -- default i
7db0: 73 20 53 43 5f 44 4c 47 5f 4d 49 4e 49 4d 41 4c  s SC_DLG_MINIMAL
7dc0: 5f 55 49 0d 0a 20 20 20 20 4c 50 43 53 54 52 20  _UI..    LPCSTR 
7dd0: 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 54 69           lpstrTi
7de0: 74 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  tle;            
7df0: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20   // OPTIONAL..  
7e00: 20 20 4c 50 43 53 54 52 20 20 20 20 20 20 20 20    LPCSTR        
7e10: 20 20 6c 70 73 74 72 53 65 61 72 63 68 44 65 73    lpstrSearchDes
7e20: 63 3b 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54  c;        // OPT
7e30: 49 4f 4e 41 4c 20 28 65 67 2e 20 22 50 6c 65 61  IONAL (eg. "Plea
7e40: 73 65 20 69 6e 73 65 72 74 20 79 6f 75 72 20 3c  se insert your <
7e50: 62 72 61 6e 64 6e 61 6d 65 3e 20 73 6d 61 72 74  brandname> smart
7e60: 20 63 61 72 64 2e 22 29 0d 0a 20 20 20 20 48 49   card.")..    HI
7e70: 43 4f 4e 20 20 20 20 20 20 20 20 20 20 20 68 49  CON           hI
7e80: 63 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  con;            
7e90: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41        // OPTIONA
7ea0: 4c 20 33 32 78 33 32 20 69 63 6f 6e 20 66 6f 72  L 32x32 icon for
7eb0: 20 79 6f 75 72 20 62 72 61 6e 64 20 69 6e 73 69   your brand insi
7ec0: 67 6e 69 61 0d 0a 20 20 20 20 50 4f 50 45 4e 43  gnia..    POPENC
7ed0: 41 52 44 5f 53 45 41 52 43 48 5f 43 52 49 54 45  ARD_SEARCH_CRITE
7ee0: 52 49 41 41 20 70 4f 70 65 6e 43 61 72 64 53 65  RIAA pOpenCardSe
7ef0: 61 72 63 68 43 72 69 74 65 72 69 61 3b 20 2f 2f  archCriteria; //
7f00: 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c   OPTIONAL..    L
7f10: 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20 20 6c  POCNCONNPROCA  l
7f20: 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20 20 20 20  pfnConnect;     
7f30: 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e         // OPTION
7f40: 41 4c 20 2d 20 70 65 72 66 6f 72 6d 65 64 20 6f  AL - performed o
7f50: 6e 20 73 75 63 63 65 73 73 66 75 6c 20 73 65 6c  n successful sel
7f60: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 4c 50 56 4f  ection..    LPVO
7f70: 49 44 20 20 20 20 20 20 20 20 20 20 70 76 55 73  ID          pvUs
7f80: 65 72 44 61 74 61 3b 20 20 20 20 20 20 20 20 20  erData;         
7f90: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20      // OPTIONAL 
7fa0: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 6c 70 66  parameter to lpf
7fb0: 6e 43 6f 6e 6e 65 63 74 0d 0a 20 20 20 20 44 57  nConnect..    DW
7fc0: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
7fd0: 53 68 61 72 65 4d 6f 64 65 3b 20 20 20 20 20 20  ShareMode;      
7fe0: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41        // OPTIONA
7ff0: 4c 20 2d 20 69 66 20 6c 70 66 6e 43 6f 6e 6e 65  L - if lpfnConne
8000: 63 74 20 69 73 20 4e 55 4c 4c 2c 20 64 77 53 68  ct is NULL, dwSh
8010: 61 72 65 4d 6f 64 65 20 61 6e 64 0d 0a 20 20 20  areMode and..   
8020: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20   DWORD          
8030: 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74   dwPreferredProt
8040: 6f 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49  ocols;   // OPTI
8050: 4f 4e 41 4c 20 64 77 50 72 65 66 65 72 72 65 64  ONAL dwPreferred
8060: 50 72 6f 74 6f 63 6f 6c 73 20 77 69 6c 6c 20 62  Protocols will b
8070: 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20  e used to..     
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80a0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
80b0: 20 20 20 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68     connect to th
80c0: 65 20 73 65 6c 65 63 74 65 64 20 63 61 72 64 0d  e selected card.
80d0: 0a 20 20 20 20 4c 50 53 54 52 20 20 20 20 20 20  .    LPSTR      
80e0: 20 20 20 20 20 6c 70 73 74 72 52 64 72 3b 20 20       lpstrRdr;  
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
8100: 52 45 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54  REQUIRED [IN|OUT
8110: 5d 20 4e 61 6d 65 20 6f 66 20 73 65 6c 65 63 74  ] Name of select
8120: 65 64 20 72 65 61 64 65 72 0d 0a 20 20 20 20 44  ed reader..    D
8130: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e  WORD           n
8140: 4d 61 78 52 64 72 3b 20 20 20 20 20 20 20 20 20  MaxRdr;         
8150: 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52         // REQUIR
8160: 45 44 20 5b 49 4e 7c 4f 55 54 5d 0d 0a 20 20 20  ED [IN|OUT]..   
8170: 20 4c 50 53 54 52 20 20 20 20 20 20 20 20 20 20   LPSTR          
8180: 20 6c 70 73 74 72 43 61 72 64 3b 20 20 20 20 20   lpstrCard;     
8190: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55           // REQU
81a0: 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 20 4e 61  IRED [IN|OUT] Na
81b0: 6d 65 20 6f 66 20 73 65 6c 65 63 74 65 64 20 63  me of selected c
81c0: 61 72 64 0d 0a 20 20 20 20 44 57 4f 52 44 20 20  ard..    DWORD  
81d0: 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72           nMaxCar
81e0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
81f0: 20 2f 2f 20 52 45 51 55 49 52 45 44 20 5b 49 4e   // REQUIRED [IN
8200: 7c 4f 55 54 5d 0d 0a 20 20 20 20 44 57 4f 52 44  |OUT]..    DWORD
8210: 20 20 20 20 20 20 20 20 20 20 20 64 77 41 63 74             dwAct
8220: 69 76 65 50 72 6f 74 6f 63 6f 6c 3b 20 20 20 20  iveProtocol;    
8230: 20 20 20 2f 2f 20 5b 4f 55 54 5d 20 73 65 74 20     // [OUT] set 
8240: 6f 6e 6c 79 20 69 66 20 64 77 53 68 61 72 65 4d  only if dwShareM
8250: 6f 64 65 20 6e 6f 74 20 4e 55 4c 4c 0d 0a 20 20  ode not NULL..  
8260: 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 20 20    SCARDHANDLE   
8270: 20 20 68 43 61 72 64 48 61 6e 64 6c 65 3b 20 20    hCardHandle;  
8280: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 5b 4f 55            // [OU
8290: 54 5d 20 73 65 74 20 69 66 20 61 20 63 61 72 64  T] set if a card
82a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
82b0: 69 6e 64 69 63 61 74 65 64 0d 0a 7d 20 4f 50 45  indicated..} OPE
82c0: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41 2c 20 2a  NCARDNAME_EXA, *
82d0: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58  POPENCARDNAME_EX
82e0: 41 2c 20 2a 4c 50 4f 50 45 4e 43 41 52 44 4e 41  A, *LPOPENCARDNA
82f0: 4d 45 5f 45 58 41 3b 0d 0a 74 79 70 65 64 65 66  ME_EXA;..typedef
8300: 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 44   struct {..    D
8310: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64  WORD           d
8320: 77 53 74 72 75 63 74 53 69 7a 65 3b 20 20 20 20  wStructSize;    
8330: 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52         // REQUIR
8340: 45 44 0d 0a 20 20 20 20 53 43 41 52 44 43 4f 4e  ED..    SCARDCON
8350: 54 45 58 54 20 20 20 20 68 53 43 61 72 64 43 6f  TEXT    hSCardCo
8360: 6e 74 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  ntext;          
8370: 2f 2f 20 52 45 51 55 49 52 45 44 0d 0a 20 20 20  // REQUIRED..   
8380: 20 48 57 4e 44 20 20 20 20 20 20 20 20 20 20 20   HWND           
8390: 20 68 77 6e 64 4f 77 6e 65 72 3b 20 20 20 20 20   hwndOwner;     
83a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49           // OPTI
83b0: 4f 4e 41 4c 0d 0a 20 20 20 20 44 57 4f 52 44 20  ONAL..    DWORD 
83c0: 20 20 20 20 20 20 20 20 20 20 64 77 46 6c 61 67            dwFlag
83d0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
83e0: 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d 2d    // OPTIONAL --
83f0: 20 64 65 66 61 75 6c 74 20 69 73 20 53 43 5f 44   default is SC_D
8400: 4c 47 5f 4d 49 4e 49 4d 41 4c 5f 55 49 0d 0a 20  LG_MINIMAL_UI.. 
8410: 20 20 20 4c 50 43 57 53 54 52 20 20 20 20 20 20     LPCWSTR      
8420: 20 20 20 6c 70 73 74 72 54 69 74 6c 65 3b 20 20     lpstrTitle;  
8430: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50             // OP
8440: 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c 50 43 57  TIONAL..    LPCW
8450: 53 54 52 20 20 20 20 20 20 20 20 20 6c 70 73 74  STR         lpst
8460: 72 53 65 61 72 63 68 44 65 73 63 3b 20 20 20 20  rSearchDesc;    
8470: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20      // OPTIONAL 
8480: 28 65 67 2e 20 22 50 6c 65 61 73 65 20 69 6e 73  (eg. "Please ins
8490: 65 72 74 20 79 6f 75 72 20 3c 62 72 61 6e 64 6e  ert your <brandn
84a0: 61 6d 65 3e 20 73 6d 61 72 74 20 63 61 72 64 2e  ame> smart card.
84b0: 22 29 0d 0a 20 20 20 20 48 49 43 4f 4e 20 20 20  ")..    HICON   
84c0: 20 20 20 20 20 20 20 20 68 49 63 6f 6e 3b 20 20          hIcon;  
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84e0: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 33 32 78 33  // OPTIONAL 32x3
84f0: 32 20 69 63 6f 6e 20 66 6f 72 20 79 6f 75 72 20  2 icon for your 
8500: 62 72 61 6e 64 20 69 6e 73 69 67 6e 69 61 0d 0a  brand insignia..
8510: 20 20 20 20 50 4f 50 45 4e 43 41 52 44 5f 53 45      POPENCARD_SE
8520: 41 52 43 48 5f 43 52 49 54 45 52 49 41 57 20 70  ARCH_CRITERIAW p
8530: 4f 70 65 6e 43 61 72 64 53 65 61 72 63 68 43 72  OpenCardSearchCr
8540: 69 74 65 72 69 61 3b 20 2f 2f 20 4f 50 54 49 4f  iteria; // OPTIO
8550: 4e 41 4c 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 4f  NAL..    LPOCNCO
8560: 4e 4e 50 52 4f 43 57 20 20 6c 70 66 6e 43 6f 6e  NNPROCW  lpfnCon
8570: 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  nect;           
8580: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d 20 70   // OPTIONAL - p
8590: 65 72 66 6f 72 6d 65 64 20 6f 6e 20 73 75 63 63  erformed on succ
85a0: 65 73 73 66 75 6c 20 73 65 6c 65 63 74 69 6f 6e  essful selection
85b0: 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20 20 20 20  ..    LPVOID    
85c0: 20 20 20 20 20 20 70 76 55 73 65 72 44 61 74 61        pvUserData
85d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ;             //
85e0: 20 4f 50 54 49 4f 4e 41 4c 20 70 61 72 61 6d 65   OPTIONAL parame
85f0: 74 65 72 20 74 6f 20 6c 70 66 6e 43 6f 6e 6e 65  ter to lpfnConne
8600: 63 74 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20  ct..    DWORD   
8610: 20 20 20 20 20 20 20 20 64 77 53 68 61 72 65 4d          dwShareM
8620: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
8630: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d 20 69 66  // OPTIONAL - if
8640: 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 20 69 73 20   lpfnConnect is 
8650: 4e 55 4c 4c 2c 20 64 77 53 68 61 72 65 4d 6f 64  NULL, dwShareMod
8660: 65 20 61 6e 64 0d 0a 20 20 20 20 44 57 4f 52 44  e and..    DWORD
8670: 20 20 20 20 20 20 20 20 20 20 20 64 77 50 72 65             dwPre
8680: 66 65 72 72 65 64 50 72 6f 74 6f 63 6f 6c 73 3b  ferredProtocols;
8690: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 64     // OPTIONAL d
86a0: 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63  wPreferredProtoc
86b0: 6f 6c 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ols will be used
86c0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86f0: 20 2f 2f 20 20 20 20 20 20 20 20 20 20 63 6f 6e   //          con
8700: 6e 65 63 74 20 74 6f 20 74 68 65 20 73 65 6c 65  nect to the sele
8710: 63 74 65 64 20 63 61 72 64 0d 0a 20 20 20 20 4c  cted card..    L
8720: 50 57 53 54 52 20 20 20 20 20 20 20 20 20 20 6c  PWSTR          l
8730: 70 73 74 72 52 64 72 3b 20 20 20 20 20 20 20 20  pstrRdr;        
8740: 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52         // REQUIR
8750: 45 44 20 5b 49 4e 7c 4f 55 54 5d 20 4e 61 6d 65  ED [IN|OUT] Name
8760: 20 6f 66 20 73 65 6c 65 63 74 65 64 20 72 65 61   of selected rea
8770: 64 65 72 0d 0a 20 20 20 20 44 57 4f 52 44 20 20  der..    DWORD  
8780: 20 20 20 20 20 20 20 20 20 6e 4d 61 78 52 64 72           nMaxRdr
8790: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
87a0: 20 2f 2f 20 52 45 51 55 49 52 45 44 20 5b 49 4e   // REQUIRED [IN
87b0: 7c 4f 55 54 5d 0d 0a 20 20 20 20 4c 50 57 53 54  |OUT]..    LPWST
87c0: 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72  R          lpstr
87d0: 43 61 72 64 3b 20 20 20 20 20 20 20 20 20 20 20  Card;           
87e0: 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 20 5b     // REQUIRED [
87f0: 49 4e 7c 4f 55 54 5d 20 4e 61 6d 65 20 6f 66 20  IN|OUT] Name of 
8800: 73 65 6c 65 63 74 65 64 20 63 61 72 64 0d 0a 20  selected card.. 
8810: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
8820: 20 20 20 6e 4d 61 78 43 61 72 64 3b 20 20 20 20     nMaxCard;    
8830: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45             // RE
8840: 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 0d  QUIRED [IN|OUT].
8850: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
8860: 20 20 20 20 20 64 77 41 63 74 69 76 65 50 72 6f       dwActivePro
8870: 74 6f 63 6f 6c 3b 20 20 20 20 20 20 20 2f 2f 20  tocol;       // 
8880: 5b 4f 55 54 5d 20 73 65 74 20 6f 6e 6c 79 20 69  [OUT] set only i
8890: 66 20 64 77 53 68 61 72 65 4d 6f 64 65 20 6e 6f  f dwShareMode no
88a0: 74 20 4e 55 4c 4c 0d 0a 20 20 20 20 53 43 41 52  t NULL..    SCAR
88b0: 44 48 41 4e 44 4c 45 20 20 20 20 20 68 43 61 72  DHANDLE     hCar
88c0: 64 48 61 6e 64 6c 65 3b 20 20 20 20 20 20 20 20  dHandle;        
88d0: 20 20 20 20 2f 2f 20 5b 4f 55 54 5d 20 73 65 74      // [OUT] set
88e0: 20 69 66 20 61 20 63 61 72 64 20 63 6f 6e 6e 65   if a card conne
88f0: 63 74 69 6f 6e 20 77 61 73 20 69 6e 64 69 63 61  ction was indica
8900: 74 65 64 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 4e  ted..} OPENCARDN
8910: 41 4d 45 5f 45 58 57 2c 20 2a 50 4f 50 45 4e 43  AME_EXW, *POPENC
8920: 41 52 44 4e 41 4d 45 5f 45 58 57 2c 20 2a 4c 50  ARDNAME_EXW, *LP
8930: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57  OPENCARDNAME_EXW
8940: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44  ;..#ifdef UNICOD
8950: 45 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43  E..typedef OPENC
8960: 41 52 44 4e 41 4d 45 5f 45 58 57 20 4f 50 45 4e  ARDNAME_EXW OPEN
8970: 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79  CARDNAME_EX;..ty
8980: 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 44 4e  pedef POPENCARDN
8990: 41 4d 45 5f 45 58 57 20 50 4f 50 45 4e 43 41 52  AME_EXW POPENCAR
89a0: 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 65 64  DNAME_EX;..typed
89b0: 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d  ef LPOPENCARDNAM
89c0: 45 5f 45 58 57 20 4c 50 4f 50 45 4e 43 41 52 44  E_EXW LPOPENCARD
89d0: 4e 41 4d 45 5f 45 58 3b 0d 0a 23 65 6c 73 65 0d  NAME_EX;..#else.
89e0: 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43 41 52  .typedef OPENCAR
89f0: 44 4e 41 4d 45 5f 45 58 41 20 4f 50 45 4e 43 41  DNAME_EXA OPENCA
8a00: 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 65  RDNAME_EX;..type
8a10: 64 65 66 20 50 4f 50 45 4e 43 41 52 44 4e 41 4d  def POPENCARDNAM
8a20: 45 5f 45 58 41 20 50 4f 50 45 4e 43 41 52 44 4e  E_EXA POPENCARDN
8a30: 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 65 64 65 66  AME_EX;..typedef
8a40: 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f   LPOPENCARDNAME_
8a50: 45 58 41 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41  EXA LPOPENCARDNA
8a60: 4d 45 5f 45 58 3b 0d 0a 23 65 6e 64 69 66 20 2f  ME_EX;..#endif /
8a70: 2f 20 55 4e 49 43 4f 44 45 0d 0a 0d 0a 23 64 65  / UNICODE....#de
8a80: 66 69 6e 65 20 4f 50 45 4e 43 41 52 44 4e 41 4d  fine OPENCARDNAM
8a90: 45 41 5f 45 58 20 4f 50 45 4e 43 41 52 44 4e 41  EA_EX OPENCARDNA
8aa0: 4d 45 5f 45 58 41 0d 0a 23 64 65 66 69 6e 65 20  ME_EXA..#define 
8ab0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 5f 45 58  OPENCARDNAMEW_EX
8ac0: 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58   OPENCARDNAME_EX
8ad0: 57 0d 0a 23 64 65 66 69 6e 65 20 50 4f 50 45 4e  W..#define POPEN
8ae0: 43 41 52 44 4e 41 4d 45 41 5f 45 58 20 50 4f 50  CARDNAMEA_EX POP
8af0: 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41 0d 0a  ENCARDNAME_EXA..
8b00: 23 64 65 66 69 6e 65 20 50 4f 50 45 4e 43 41 52  #define POPENCAR
8b10: 44 4e 41 4d 45 57 5f 45 58 20 50 4f 50 45 4e 43  DNAMEW_EX POPENC
8b20: 41 52 44 4e 41 4d 45 5f 45 58 57 0d 0a 23 64 65  ARDNAME_EXW..#de
8b30: 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52 44 4e  fine LPOPENCARDN
8b40: 41 4d 45 41 5f 45 58 20 4c 50 4f 50 45 4e 43 41  AMEA_EX LPOPENCA
8b50: 52 44 4e 41 4d 45 5f 45 58 41 0d 0a 23 64 65 66  RDNAME_EXA..#def
8b60: 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41  ine LPOPENCARDNA
8b70: 4d 45 57 5f 45 58 20 4c 50 4f 50 45 4e 43 41 52  MEW_EX LPOPENCAR
8b80: 44 4e 41 4d 45 5f 45 58 57 0d 0a 0d 0a 0d 0a 2f  DNAME_EXW....../
8b90: 2f 0d 0a 2f 2f 20 53 43 61 72 64 55 49 44 6c 67  /..// SCardUIDlg
8ba0: 53 65 6c 65 63 74 43 61 72 64 20 72 65 70 6c 61  SelectCard repla
8bb0: 63 65 73 20 47 65 74 4f 70 65 6e 43 61 72 64 4e  ces GetOpenCardN
8bc0: 61 6d 65 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72  ame..//....exter
8bd0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
8be0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
8bf0: 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72 64 41  UIDlgSelectCardA
8c00: 28 0d 0a 20 20 20 20 4c 50 4f 50 45 4e 43 41 52  (..    LPOPENCAR
8c10: 44 4e 41 4d 45 41 5f 45 58 29 3b 0d 0a 65 78 74  DNAMEA_EX);..ext
8c20: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
8c30: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
8c40: 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72  rdUIDlgSelectCar
8c50: 64 57 28 0d 0a 20 20 20 20 4c 50 4f 50 45 4e 43  dW(..    LPOPENC
8c60: 41 52 44 4e 41 4d 45 57 5f 45 58 29 3b 0d 0a 23  ARDNAMEW_EX);..#
8c70: 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23  ifdef UNICODE..#
8c80: 64 65 66 69 6e 65 20 53 43 61 72 64 55 49 44 6c  define SCardUIDl
8c90: 67 53 65 6c 65 63 74 43 61 72 64 20 20 53 43 61  gSelectCard  SCa
8ca0: 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72  rdUIDlgSelectCar
8cb0: 64 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69  dW..#else..#defi
8cc0: 6e 65 20 53 43 61 72 64 55 49 44 6c 67 53 65 6c  ne SCardUIDlgSel
8cd0: 65 63 74 43 61 72 64 20 20 53 43 61 72 64 55 49  ectCard  SCardUI
8ce0: 44 6c 67 53 65 6c 65 63 74 43 61 72 64 41 0d 0a  DlgSelectCardA..
8cf0: 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f  #endif // !UNICO
8d00: 44 45 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 22  DE......//..// "
8d10: 53 6d 61 72 74 20 43 61 72 64 20 43 6f 6d 6d 6f  Smart Card Commo
8d20: 6e 20 44 69 61 6c 6f 67 22 20 64 65 66 69 6e 69  n Dialog" defini
8d30: 74 69 6f 6e 73 20 66 6f 72 20 62 61 63 6b 77 61  tions for backwa
8d40: 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
8d50: 79 0d 0a 2f 2f 20 20 77 69 74 68 20 74 68 65 20  y..//  with the 
8d60: 53 6d 61 72 74 20 43 61 72 64 20 42 61 73 65 20  Smart Card Base 
8d70: 53 65 72 76 69 63 65 73 20 53 44 4b 20 76 65 72  Services SDK ver
8d80: 73 69 6f 6e 20 31 2e 30 0d 0a 2f 2f 0d 0a 0d 0a  sion 1.0..//....
8d90: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
8da0: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20  ..    DWORD     
8db0: 20 20 20 20 20 20 64 77 53 74 72 75 63 74 53 69        dwStructSi
8dc0: 7a 65 3b 0d 0a 20 20 20 20 48 57 4e 44 20 20 20  ze;..    HWND   
8dd0: 20 20 20 20 20 20 20 20 20 68 77 6e 64 4f 77 6e           hwndOwn
8de0: 65 72 3b 0d 0a 20 20 20 20 53 43 41 52 44 43 4f  er;..    SCARDCO
8df0: 4e 54 45 58 54 20 20 20 20 68 53 43 61 72 64 43  NTEXT    hSCardC
8e00: 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 4c 50 53  ontext;..    LPS
8e10: 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70 73  TR           lps
8e20: 74 72 47 72 6f 75 70 4e 61 6d 65 73 3b 0d 0a 20  trGroupNames;.. 
8e30: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
8e40: 20 20 20 6e 4d 61 78 47 72 6f 75 70 4e 61 6d 65     nMaxGroupName
8e50: 73 3b 0d 0a 20 20 20 20 4c 50 53 54 52 20 20 20  s;..    LPSTR   
8e60: 20 20 20 20 20 20 20 20 6c 70 73 74 72 43 61 72          lpstrCar
8e70: 64 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 44 57 4f  dNames;..    DWO
8e80: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61  RD           nMa
8e90: 78 43 61 72 64 4e 61 6d 65 73 3b 0d 0a 20 20 20  xCardNames;..   
8ea0: 20 4c 50 43 47 55 49 44 20 20 20 20 20 20 20 20   LPCGUID        
8eb0: 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 63 65   rgguidInterface
8ec0: 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20  s;..    DWORD   
8ed0: 20 20 20 20 20 20 20 20 63 67 75 69 64 49 6e 74          cguidInt
8ee0: 65 72 66 61 63 65 73 3b 0d 0a 20 20 20 20 4c 50  erfaces;..    LP
8ef0: 53 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70  STR           lp
8f00: 73 74 72 52 64 72 3b 0d 0a 20 20 20 20 44 57 4f  strRdr;..    DWO
8f10: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61  RD           nMa
8f20: 78 52 64 72 3b 0d 0a 20 20 20 20 4c 50 53 54 52  xRdr;..    LPSTR
8f30: 20 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72             lpstr
8f40: 43 61 72 64 3b 0d 0a 20 20 20 20 44 57 4f 52 44  Card;..    DWORD
8f50: 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43             nMaxC
8f60: 61 72 64 3b 0d 0a 20 20 20 20 4c 50 43 53 54 52  ard;..    LPCSTR
8f70: 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 54            lpstrT
8f80: 69 74 6c 65 3b 0d 0a 20 20 20 20 44 57 4f 52 44  itle;..    DWORD
8f90: 20 20 20 20 20 20 20 20 20 20 20 64 77 46 6c 61             dwFla
8fa0: 67 73 3b 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20  gs;..    LPVOID 
8fb0: 20 20 20 20 20 20 20 20 20 70 76 55 73 65 72 44           pvUserD
8fc0: 61 74 61 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20  ata;..    DWORD 
8fd0: 20 20 20 20 20 20 20 20 20 20 64 77 53 68 61 72            dwShar
8fe0: 65 4d 6f 64 65 3b 0d 0a 20 20 20 20 44 57 4f 52  eMode;..    DWOR
8ff0: 44 20 20 20 20 20 20 20 20 20 20 20 64 77 50 72  D           dwPr
9000: 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f 6c 73  eferredProtocols
9010: 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20  ;..    DWORD    
9020: 20 20 20 20 20 20 20 64 77 41 63 74 69 76 65 50         dwActiveP
9030: 72 6f 74 6f 63 6f 6c 3b 0d 0a 20 20 20 20 4c 50  rotocol;..    LP
9040: 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20 20 6c 70  OCNCONNPROCA  lp
9050: 66 6e 43 6f 6e 6e 65 63 74 3b 0d 0a 20 20 20 20  fnConnect;..    
9060: 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20 20  LPOCNCHKPROC    
9070: 6c 70 66 6e 43 68 65 63 6b 3b 0d 0a 20 20 20 20  lpfnCheck;..    
9080: 4c 50 4f 43 4e 44 53 43 50 52 4f 43 20 20 20 20  LPOCNDSCPROC    
9090: 6c 70 66 6e 44 69 73 63 6f 6e 6e 65 63 74 3b 0d  lpfnDisconnect;.
90a0: 0a 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45  .    SCARDHANDLE
90b0: 20 20 20 20 20 68 43 61 72 64 48 61 6e 64 6c 65       hCardHandle
90c0: 3b 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 4e 41 4d  ;..} OPENCARDNAM
90d0: 45 41 2c 20 2a 50 4f 50 45 4e 43 41 52 44 4e 41  EA, *POPENCARDNA
90e0: 4d 45 41 2c 20 2a 4c 50 4f 50 45 4e 43 41 52 44  MEA, *LPOPENCARD
90f0: 4e 41 4d 45 41 3b 0d 0a 74 79 70 65 64 65 66 20  NAMEA;..typedef 
9100: 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 44 57  struct {..    DW
9110: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77  ORD           dw
9120: 53 74 72 75 63 74 53 69 7a 65 3b 0d 0a 20 20 20  StructSize;..   
9130: 20 48 57 4e 44 20 20 20 20 20 20 20 20 20 20 20   HWND           
9140: 20 68 77 6e 64 4f 77 6e 65 72 3b 0d 0a 20 20 20   hwndOwner;..   
9150: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 20 20   SCARDCONTEXT   
9160: 20 68 53 43 61 72 64 43 6f 6e 74 65 78 74 3b 0d   hSCardContext;.
9170: 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 20 20  .    LPWSTR     
9180: 20 20 20 20 20 6c 70 73 74 72 47 72 6f 75 70 4e       lpstrGroupN
9190: 61 6d 65 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44  ames;..    DWORD
91a0: 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 47             nMaxG
91b0: 72 6f 75 70 4e 61 6d 65 73 3b 0d 0a 20 20 20 20  roupNames;..    
91c0: 4c 50 57 53 54 52 20 20 20 20 20 20 20 20 20 20  LPWSTR          
91d0: 6c 70 73 74 72 43 61 72 64 4e 61 6d 65 73 3b 0d  lpstrCardNames;.
91e0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
91f0: 20 20 20 20 20 6e 4d 61 78 43 61 72 64 4e 61 6d       nMaxCardNam
9200: 65 73 3b 0d 0a 20 20 20 20 4c 50 43 47 55 49 44  es;..    LPCGUID
9210: 20 20 20 20 20 20 20 20 20 72 67 67 75 69 64 49           rgguidI
9220: 6e 74 65 72 66 61 63 65 73 3b 0d 0a 20 20 20 20  nterfaces;..    
9230: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
9240: 63 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 3b  cguidInterfaces;
9250: 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 20  ..    LPWSTR    
9260: 20 20 20 20 20 20 6c 70 73 74 72 52 64 72 3b 0d        lpstrRdr;.
9270: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20  .    DWORD      
9280: 20 20 20 20 20 6e 4d 61 78 52 64 72 3b 0d 0a 20       nMaxRdr;.. 
9290: 20 20 20 4c 50 57 53 54 52 20 20 20 20 20 20 20     LPWSTR       
92a0: 20 20 20 6c 70 73 74 72 43 61 72 64 3b 0d 0a 20     lpstrCard;.. 
92b0: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
92c0: 20 20 20 6e 4d 61 78 43 61 72 64 3b 0d 0a 20 20     nMaxCard;..  
92d0: 20 20 4c 50 43 57 53 54 52 20 20 20 20 20 20 20    LPCWSTR       
92e0: 20 20 6c 70 73 74 72 54 69 74 6c 65 3b 0d 0a 20    lpstrTitle;.. 
92f0: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20     DWORD        
9300: 20 20 20 64 77 46 6c 61 67 73 3b 0d 0a 20 20 20     dwFlags;..   
9310: 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20 20 20   LPVOID         
9320: 20 70 76 55 73 65 72 44 61 74 61 3b 0d 0a 20 20   pvUserData;..  
9330: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20    DWORD         
9340: 20 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 0d 0a    dwShareMode;..
9350: 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20      DWORD       
9360: 20 20 20 20 64 77 50 72 65 66 65 72 72 65 64 50      dwPreferredP
9370: 72 6f 74 6f 63 6f 6c 73 3b 0d 0a 20 20 20 20 44  rotocols;..    D
9380: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64  WORD           d
9390: 77 41 63 74 69 76 65 50 72 6f 74 6f 63 6f 6c 3b  wActiveProtocol;
93a0: 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50  ..    LPOCNCONNP
93b0: 52 4f 43 57 20 20 6c 70 66 6e 43 6f 6e 6e 65 63  ROCW  lpfnConnec
93c0: 74 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 48 4b  t;..    LPOCNCHK
93d0: 50 52 4f 43 20 20 20 20 6c 70 66 6e 43 68 65 63  PROC    lpfnChec
93e0: 6b 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43  k;..    LPOCNDSC
93f0: 50 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 73 63  PROC    lpfnDisc
9400: 6f 6e 6e 65 63 74 3b 0d 0a 20 20 20 20 53 43 41  onnect;..    SCA
9410: 52 44 48 41 4e 44 4c 45 20 20 20 20 20 68 43 61  RDHANDLE     hCa
9420: 72 64 48 61 6e 64 6c 65 3b 0d 0a 7d 20 4f 50 45  rdHandle;..} OPE
9430: 4e 43 41 52 44 4e 41 4d 45 57 2c 20 2a 50 4f 50  NCARDNAMEW, *POP
9440: 45 4e 43 41 52 44 4e 41 4d 45 57 2c 20 2a 4c 50  ENCARDNAMEW, *LP
9450: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 3b 0d 0a  OPENCARDNAMEW;..
9460: 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a  #ifdef UNICODE..
9470: 74 79 70 65 64 65 66 20 4f 50 45 4e 43 41 52 44  typedef OPENCARD
9480: 4e 41 4d 45 57 20 4f 50 45 4e 43 41 52 44 4e 41  NAMEW OPENCARDNA
9490: 4d 45 3b 0d 0a 74 79 70 65 64 65 66 20 50 4f 50  ME;..typedef POP
94a0: 45 4e 43 41 52 44 4e 41 4d 45 57 20 50 4f 50 45  ENCARDNAMEW POPE
94b0: 4e 43 41 52 44 4e 41 4d 45 3b 0d 0a 74 79 70 65  NCARDNAME;..type
94c0: 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41  def LPOPENCARDNA
94d0: 4d 45 57 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41  MEW LPOPENCARDNA
94e0: 4d 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74 79 70 65  ME;..#else..type
94f0: 64 65 66 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45  def OPENCARDNAME
9500: 41 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 3b 0d  A OPENCARDNAME;.
9510: 0a 74 79 70 65 64 65 66 20 50 4f 50 45 4e 43 41  .typedef POPENCA
9520: 52 44 4e 41 4d 45 41 20 50 4f 50 45 4e 43 41 52  RDNAMEA POPENCAR
9530: 44 4e 41 4d 45 3b 0d 0a 74 79 70 65 64 65 66 20  DNAME;..typedef 
9540: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 20  LPOPENCARDNAMEA 
9550: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 3b 0d  LPOPENCARDNAME;.
9560: 0a 23 65 6e 64 69 66 20 2f 2f 20 55 4e 49 43 4f  .#endif // UNICO
9570: 44 45 0d 0a 0d 0a 2f 2f 20 42 61 63 6b 77 61 72  DE....// Backwar
9580: 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
9590: 20 6d 61 63 72 6f 73 0d 0a 23 64 65 66 69 6e 65   macros..#define
95a0: 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20   OPENCARDNAME_A 
95b0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d 0a 23  OPENCARDNAMEA..#
95c0: 64 65 66 69 6e 65 20 4f 50 45 4e 43 41 52 44 4e  define OPENCARDN
95d0: 41 4d 45 5f 57 20 4f 50 45 4e 43 41 52 44 4e 41  AME_W OPENCARDNA
95e0: 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20 50 4f 50  MEW..#define POP
95f0: 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20 50 4f 50  ENCARDNAME_A POP
9600: 45 4e 43 41 52 44 4e 41 4d 45 41 0d 0a 23 64 65  ENCARDNAMEA..#de
9610: 66 69 6e 65 20 50 4f 50 45 4e 43 41 52 44 4e 41  fine POPENCARDNA
9620: 4d 45 5f 57 20 50 4f 50 45 4e 43 41 52 44 4e 41  ME_W POPENCARDNA
9630: 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20 4c 50 4f  MEW..#define LPO
9640: 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20 4c 50  PENCARDNAME_A LP
9650: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d 0a 23  OPENCARDNAMEA..#
9660: 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52  define LPOPENCAR
9670: 44 4e 41 4d 45 5f 57 20 4c 50 4f 50 45 4e 43 41  DNAME_W LPOPENCA
9680: 52 44 4e 41 4d 45 57 0d 0a 0d 0a 65 78 74 65 72  RDNAMEW....exter
9690: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
96a0: 4e 47 20 57 49 4e 41 50 49 0d 0a 47 65 74 4f 70  NG WINAPI..GetOp
96b0: 65 6e 43 61 72 64 4e 61 6d 65 41 28 0d 0a 20 20  enCardNameA(..  
96c0: 20 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45    LPOPENCARDNAME
96d0: 41 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53  A);..extern WINS
96e0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e  CARDAPI LONG WIN
96f0: 41 50 49 0d 0a 47 65 74 4f 70 65 6e 43 61 72 64  API..GetOpenCard
9700: 4e 61 6d 65 57 28 0d 0a 20 20 20 20 4c 50 4f 50  NameW(..    LPOP
9710: 45 4e 43 41 52 44 4e 41 4d 45 57 29 3b 0d 0a 23  ENCARDNAMEW);..#
9720: 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23  ifdef UNICODE..#
9730: 64 65 66 69 6e 65 20 47 65 74 4f 70 65 6e 43 61  define GetOpenCa
9740: 72 64 4e 61 6d 65 20 20 47 65 74 4f 70 65 6e 43  rdName  GetOpenC
9750: 61 72 64 4e 61 6d 65 57 0d 0a 23 65 6c 73 65 0d  ardNameW..#else.
9760: 0a 23 64 65 66 69 6e 65 20 47 65 74 4f 70 65 6e  .#define GetOpen
9770: 43 61 72 64 4e 61 6d 65 20 20 47 65 74 4f 70 65  CardName  GetOpe
9780: 6e 43 61 72 64 4e 61 6d 65 41 0d 0a 23 65 6e 64  nCardNameA..#end
9790: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a  if // !UNICODE..
97a0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52  ..extern WINSCAR
97b0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49  DAPI LONG WINAPI
97c0: 0d 0a 53 43 61 72 64 44 6c 67 45 78 74 65 6e 64  ..SCardDlgExtend
97d0: 65 64 45 72 72 6f 72 20 28 76 6f 69 64 29 3b 0d  edError (void);.
97e0: 0a 0d 0a 23 69 66 20 28 4e 54 44 44 49 5f 56 45  ...#if (NTDDI_VE
97f0: 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 56  RSION >= NTDDI_V
9800: 49 53 54 41 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20  ISTA)....//..// 
9810: 53 6d 61 72 74 63 61 72 64 20 43 61 63 68 69 6e  Smartcard Cachin
9820: 67 20 41 50 49 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74  g API..//....ext
9830: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20  ern WINSCARDAPI 
9840: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61  LONG WINAPI..SCa
9850: 72 64 52 65 61 64 43 61 63 68 65 41 28 0d 0a 20  rdReadCacheA(.. 
9860: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58       SCARDCONTEX
9870: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  T hContext,..   
9880: 20 20 20 55 55 49 44 20 2a 43 61 72 64 49 64 65     UUID *CardIde
9890: 6e 74 69 66 69 65 72 2c 0d 0a 20 20 20 20 20 20  ntifier,..      
98a0: 44 57 4f 52 44 20 46 72 65 73 68 6e 65 73 73 43  DWORD FreshnessC
98b0: 6f 75 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 4c  ounter,..      L
98c0: 50 53 54 52 20 4c 6f 6f 6b 75 70 4e 61 6d 65 2c  PSTR LookupName,
98d0: 0d 0a 20 20 20 20 20 50 42 59 54 45 20 44 61 74  ..     PBYTE Dat
98e0: 61 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 2a  a,..     DWORD *
98f0: 44 61 74 61 4c 65 6e 29 3b 0d 0a 65 78 74 65 72  DataLen);..exter
9900: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f  n WINSCARDAPI LO
9910: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64  NG WINAPI..SCard
9920: 52 65 61 64 43 61 63 68 65 57 28 0d 0a 20 20 20  ReadCacheW(..   
9930: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20     SCARDCONTEXT 
9940: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  hContext,..     
9950: 20 55 55 49 44 20 2a 43 61 72 64 49 64 65 6e 74   UUID *CardIdent
9960: 69 66 69 65 72 2c 0d 0a 20 20 20 20 20 20 44 57  ifier,..      DW
9970: 4f 52 44 20 46 72 65 73 68 6e 65 73 73 43 6f 75  ORD FreshnessCou
9980: 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 4c 50 57  nter,..      LPW
9990: 53 54 52 20 4c 6f 6f 6b 75 70 4e 61 6d 65 2c 0d  STR LookupName,.
99a0: 0a 20 20 20 20 20 50 42 59 54 45 20 44 61 74 61  .     PBYTE Data
99b0: 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 2a 44  ,..     DWORD *D
99c0: 61 74 61 4c 65 6e 29 3b 0d 0a 23 69 66 64 65 66  ataLen);..#ifdef
99d0: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e   UNICODE..#defin
99e0: 65 20 53 43 61 72 64 52 65 61 64 43 61 63 68 65  e SCardReadCache
99f0: 20 20 53 43 61 72 64 52 65 61 64 43 61 63 68 65    SCardReadCache
9a00: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e  W..#else..#defin
9a10: 65 20 53 43 61 72 64 52 65 61 64 43 61 63 68 65  e SCardReadCache
9a20: 20 20 53 43 61 72 64 52 65 61 64 43 61 63 68 65    SCardReadCache
9a30: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e  A..#endif // !UN
9a40: 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20  ICODE....extern 
9a50: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47  WINSCARDAPI LONG
9a60: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 57 72   WINAPI..SCardWr
9a70: 69 74 65 43 61 63 68 65 41 28 0d 0a 20 20 20 20  iteCacheA(..    
9a80: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43   SCARDCONTEXT hC
9a90: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 55 55  ontext,..     UU
9aa0: 49 44 20 2a 43 61 72 64 49 64 65 6e 74 69 66 69  ID *CardIdentifi
9ab0: 65 72 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20  er,..     DWORD 
9ac0: 46 72 65 73 68 6e 65 73 73 43 6f 75 6e 74 65 72  FreshnessCounter
9ad0: 2c 0d 0a 20 20 20 20 20 4c 50 53 54 52 20 4c 6f  ,..     LPSTR Lo
9ae0: 6f 6b 75 70 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  okupName,..     
9af0: 50 42 59 54 45 20 44 61 74 61 2c 0d 0a 20 20 20  PBYTE Data,..   
9b00: 20 20 44 57 4f 52 44 20 44 61 74 61 4c 65 6e 29    DWORD DataLen)
9b10: 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41  ;..extern WINSCA
9b20: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50  RDAPI LONG WINAP
9b30: 49 0d 0a 53 43 61 72 64 57 72 69 74 65 43 61 63  I..SCardWriteCac
9b40: 68 65 57 28 0d 0a 20 20 20 20 20 53 43 41 52 44  heW(..     SCARD
9b50: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74  CONTEXT hContext
9b60: 2c 0d 0a 20 20 20 20 20 55 55 49 44 20 2a 43 61  ,..     UUID *Ca
9b70: 72 64 49 64 65 6e 74 69 66 69 65 72 2c 0d 0a 20  rdIdentifier,.. 
9b80: 20 20 20 20 44 57 4f 52 44 20 46 72 65 73 68 6e      DWORD Freshn
9b90: 65 73 73 43 6f 75 6e 74 65 72 2c 0d 0a 20 20 20  essCounter,..   
9ba0: 20 20 4c 50 57 53 54 52 20 4c 6f 6f 6b 75 70 4e    LPWSTR LookupN
9bb0: 61 6d 65 2c 0d 0a 20 20 20 20 20 50 42 59 54 45  ame,..     PBYTE
9bc0: 20 44 61 74 61 2c 0d 0a 20 20 20 20 20 44 57 4f   Data,..     DWO
9bd0: 52 44 20 44 61 74 61 4c 65 6e 29 3b 0d 0a 23 69  RD DataLen);..#i
9be0: 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64  fdef UNICODE..#d
9bf0: 65 66 69 6e 65 20 53 43 61 72 64 57 72 69 74 65  efine SCardWrite
9c00: 43 61 63 68 65 20 20 53 43 61 72 64 57 72 69 74  Cache  SCardWrit
9c10: 65 43 61 63 68 65 57 0d 0a 23 65 6c 73 65 0d 0a  eCacheW..#else..
9c20: 23 64 65 66 69 6e 65 20 53 43 61 72 64 57 72 69  #define SCardWri
9c30: 74 65 43 61 63 68 65 20 20 53 43 61 72 64 57 72  teCache  SCardWr
9c40: 69 74 65 43 61 63 68 65 41 0d 0a 23 65 6e 64 69  iteCacheA..#endi
9c50: 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d  f // !UNICODE...
9c60: 0a 23 65 6e 64 69 66 20 2f 2f 20 28 4e 54 44 44  .#endif // (NTDD
9c70: 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44  I_VERSION >= NTD
9c80: 44 49 5f 56 49 53 54 41 29 0d 0a 0d 0a 23 69 66  DI_VISTA)....#if
9c90: 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0d  def __cplusplus.
9ca0: 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6e 64  .}..#endif..#end
9cb0: 69 66 20 2f 2f 20 5f 57 49 4e 53 43 41 52 44 5f  if // _WINSCARD_
9cc0: 48 5f 0d 0a 0d 0a 0d 0a                          H_......