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 73 74 61 74 69 63 20 63 6f 6e 73 RE)..static cons
04d0: 74 20 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 t SCARD_IO_REQUE
04e0: 53 54 20 73 74 61 74 69 63 5f 67 5f 72 67 53 43 ST static_g_rgSC
04f0: 61 72 64 54 30 50 63 69 20 3d 20 7b 20 53 43 41 ardT0Pci = { SCA
0500: 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 30 2c 20 RD_PROTOCOL_T0,
0510: 38 20 7d 3b 0d 0a 73 74 61 74 69 63 20 63 6f 6e 8 };..static con
0520: 73 74 20 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 st SCARD_IO_REQU
0530: 45 53 54 20 73 74 61 74 69 63 5f 67 5f 72 67 53 EST static_g_rgS
0540: 43 61 72 64 54 31 50 63 69 20 3d 20 7b 20 53 43 CardT1Pci = { SC
0550: 41 52 44 5f 50 52 4f 54 4f 43 4f 4c 5f 54 31 2c ARD_PROTOCOL_T1,
0560: 20 38 20 7d 3b 0d 0a 0d 0a 57 49 4e 53 43 41 52 8 };....WINSCAR
0570: 44 44 41 54 41 20 65 78 74 65 72 6e 20 63 6f 6e DDATA extern con
0580: 73 74 20 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 st SCARD_IO_REQU
0590: 45 53 54 0d 0a 20 20 20 20 67 5f 72 67 53 43 61 EST.. g_rgSCa
05a0: 72 64 54 30 50 63 69 2c 0d 0a 20 20 20 20 67 5f rdT0Pci,.. g_
05b0: 72 67 53 43 61 72 64 54 31 50 63 69 2c 0d 0a 20 rgSCardT1Pci,..
05c0: 20 20 20 67 5f 72 67 53 43 61 72 64 52 61 77 50 g_rgSCardRawP
05d0: 63 69 3b 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 ci;..#define SCA
05e0: 52 44 5f 50 43 49 5f 54 30 20 20 28 26 73 74 61 RD_PCI_T0 (&sta
05f0: 74 69 63 5f 67 5f 72 67 53 43 61 72 64 54 30 50 tic_g_rgSCardT0P
0600: 63 69 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 ci)..#define SCA
0610: 52 44 5f 50 43 49 5f 54 31 20 20 28 26 73 74 61 RD_PCI_T1 (&sta
0620: 74 69 63 5f 67 5f 72 67 53 43 61 72 64 54 31 50 tic_g_rgSCardT1P
0630: 63 69 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 ci)..#define SCA
0640: 52 44 5f 50 43 49 5f 52 41 57 20 28 26 67 5f 72 RD_PCI_RAW (&g_r
0650: 67 53 43 61 72 64 52 61 77 50 63 69 29 0d 0a 23 gSCardRawPci)..#
0660: 65 6e 64 69 66 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f endif....//..///
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
06a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
06b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f /////////////../
06c0: 2f 0d 0a 2f 2f 20 20 53 65 72 76 69 63 65 20 4d /..// Service M
06d0: 61 6e 61 67 65 72 20 41 63 63 65 73 73 20 53 65 anager Access Se
06e0: 72 76 69 63 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 rvices..//..//
06f0: 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e The followin
0700: 67 20 73 65 72 76 69 63 65 73 20 61 72 65 20 75 g services are u
0710: 73 65 64 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 sed to manage us
0720: 65 72 20 61 6e 64 20 74 65 72 6d 69 6e 61 6c 20 er and terminal
0730: 63 6f 6e 74 65 78 74 73 20 66 6f 72 0d 0a 2f 2f contexts for..//
0740: 20 20 20 20 20 20 53 6d 61 72 74 20 43 61 72 64 Smart Card
0750: 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 74 79 70 65 64 65 s...//....typede
0760: 66 20 55 4c 4f 4e 47 5f 50 54 52 20 53 43 41 52 f ULONG_PTR SCAR
0770: 44 43 4f 4e 54 45 58 54 3b 0d 0a 74 79 70 65 64 DCONTEXT;..typed
0780: 65 66 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 ef SCARDCONTEXT
0790: 2a 50 53 43 41 52 44 43 4f 4e 54 45 58 54 2c 20 *PSCARDCONTEXT,
07a0: 2a 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 54 3b *LPSCARDCONTEXT;
07b0: 0d 0a 0d 0a 74 79 70 65 64 65 66 20 55 4c 4f 4e ....typedef ULON
07c0: 47 5f 50 54 52 20 53 43 41 52 44 48 41 4e 44 4c G_PTR SCARDHANDL
07d0: 45 3b 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 E;..typedef SCAR
07e0: 44 48 41 4e 44 4c 45 20 2a 50 53 43 41 52 44 48 DHANDLE *PSCARDH
07f0: 41 4e 44 4c 45 2c 20 2a 4c 50 53 43 41 52 44 48 ANDLE, *LPSCARDH
0800: 41 4e 44 4c 45 3b 0d 0a 0d 0a 23 64 65 66 69 6e ANDLE;....#defin
0810: 65 20 53 43 41 52 44 5f 41 55 54 4f 41 4c 4c 4f e SCARD_AUTOALLO
0820: 43 41 54 45 20 28 44 57 4f 52 44 29 28 2d 31 29 CATE (DWORD)(-1)
0830: 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 ....#define SCAR
0840: 44 5f 53 43 4f 50 45 5f 55 53 45 52 20 20 20 20 D_SCOPE_USER
0850: 20 30 20 20 2f 2f 20 54 68 65 20 63 6f 6e 74 65 0 // The conte
0860: 78 74 20 69 73 20 61 20 75 73 65 72 20 63 6f 6e xt is a user con
0870: 74 65 78 74 2c 20 61 6e 64 20 61 6e 79 0d 0a 20 text, and any..
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
08a0: 2f 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 / database opera
08b0: 74 69 6f 6e 73 20 61 72 65 20 70 65 72 66 6f 72 tions are perfor
08c0: 6d 65 64 20 77 69 74 68 69 6e 20 74 68 65 0d 0a med within the..
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08f0: 2f 2f 20 64 6f 6d 61 69 6e 20 6f 66 20 74 68 65 // domain of the
0900: 20 75 73 65 72 2e 0d 0a 23 64 65 66 69 6e 65 20 user...#define
0910: 53 43 41 52 44 5f 53 43 4f 50 45 5f 54 45 52 4d SCARD_SCOPE_TERM
0920: 49 4e 41 4c 20 31 20 20 2f 2f 20 54 68 65 20 63 INAL 1 // The c
0930: 6f 6e 74 65 78 74 20 69 73 20 74 68 61 74 20 6f ontext is that o
0940: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 f the current te
0950: 72 6d 69 6e 61 6c 2c 0d 0a 20 20 20 20 20 20 20 rminal,..
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0970: 20 20 20 20 20 20 20 20 20 2f 2f 20 61 6e 64 20 // and
0980: 61 6e 79 20 64 61 74 61 62 61 73 65 20 6f 70 65 any database ope
0990: 72 61 74 69 6f 6e 73 20 61 72 65 20 70 65 72 66 rations are perf
09a0: 6f 72 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20 ormed..
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
09c0: 20 20 20 20 20 20 20 2f 2f 20 77 69 74 68 69 6e // within
09d0: 20 74 68 65 20 64 6f 6d 61 69 6e 20 6f 66 20 74 the domain of t
09e0: 68 61 74 20 74 65 72 6d 69 6e 61 6c 2e 20 20 28 hat terminal. (
09f0: 54 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 The..
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a10: 20 20 20 20 20 2f 2f 20 63 61 6c 6c 69 6e 67 20 // calling
0a20: 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 application must
0a30: 20 68 61 76 65 20 61 70 70 72 6f 70 72 69 61 74 have appropriat
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a60: 20 20 20 2f 2f 20 61 63 63 65 73 73 20 70 65 72 // access per
0a70: 6d 69 73 73 69 6f 6e 73 20 66 6f 72 20 61 6e 79 missions for any
0a80: 20 64 61 74 61 62 61 73 65 20 61 63 74 69 6f 6e database action
0a90: 73 2e 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 s.)..#define SCA
0aa0: 52 44 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 20 RD_SCOPE_SYSTEM
0ab0: 20 20 20 32 20 2f 2f 20 54 68 65 20 63 6f 6e 74 2 // The cont
0ac0: 65 78 74 20 69 73 20 74 68 65 20 73 79 73 74 65 ext is the syste
0ad0: 6d 20 63 6f 6e 74 65 78 74 2c 20 61 6e 64 20 61 m context, and a
0ae0: 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ny..
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b00: 20 20 20 20 2f 2f 20 64 61 74 61 62 61 73 65 20 // database
0b10: 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 operations are p
0b20: 65 72 66 6f 72 6d 65 64 20 77 69 74 68 69 6e 20 erformed within
0b30: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the..
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b50: 20 20 20 20 20 2f 2f 20 64 6f 6d 61 69 6e 20 6f // domain o
0b60: 66 20 74 68 65 20 73 79 73 74 65 6d 2e 20 20 28 f the system. (
0b70: 54 68 65 20 63 61 6c 6c 69 6e 67 0d 0a 20 20 20 The calling..
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
0ba0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 application must
0bb0: 20 68 61 76 65 20 61 70 70 72 6f 70 72 69 61 74 have appropriat
0bc0: 65 20 61 63 63 65 73 73 0d 0a 20 20 20 20 20 20 e access..
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0be0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 70 65 72 // per
0bf0: 6d 69 73 73 69 6f 6e 73 20 66 6f 72 20 61 6e 79 missions for any
0c00: 20 64 61 74 61 62 61 73 65 20 61 63 74 69 6f 6e database action
0c10: 73 2e 29 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 s.)....extern WI
0c20: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
0c30: 49 4e 41 50 49 0d 0a 53 43 61 72 64 45 73 74 61 INAPI..SCardEsta
0c40: 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 0d 0a 20 blishContext(..
0c50: 20 20 20 20 20 44 57 4f 52 44 20 64 77 53 63 6f DWORD dwSco
0c60: 70 65 2c 0d 0a 20 20 20 20 20 20 4c 50 43 56 4f pe,.. LPCVO
0c70: 49 44 20 70 76 52 65 73 65 72 76 65 64 31 2c 0d ID pvReserved1,.
0c80: 0a 20 20 20 20 20 20 4c 50 43 56 4f 49 44 20 70 . LPCVOID p
0c90: 76 52 65 73 65 72 76 65 64 32 2c 0d 0a 20 20 20 vReserved2,..
0ca0: 20 20 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 54 LPSCARDCONTEXT
0cb0: 20 70 68 43 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a phContext);....
0cc0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 extern WINSCARDA
0cd0: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a PI LONG WINAPI..
0ce0: 53 43 61 72 64 52 65 6c 65 61 73 65 43 6f 6e 74 SCardReleaseCont
0cf0: 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ext(..
0d00: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
0d10: 6e 74 65 78 74 29 3b 0d 0a 0d 0a 65 78 74 65 72 ntext);....exter
0d20: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
0d30: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
0d40: 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74 28 0d IsValidContext(.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 53 43 41 52 44 . SCARD
0d60: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 CONTEXT hContext
0d70: 29 3b 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f );......//..////
0d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f ////////////..//
0dd0: 0d 0a 2f 2f 20 20 53 6d 61 72 74 20 43 61 72 64 ..// Smart Card
0de0: 20 44 61 74 61 62 61 73 65 20 4d 61 6e 61 67 65 Database Manage
0df0: 6d 65 6e 74 20 53 65 72 76 69 63 65 73 0d 0a 2f ment Services../
0e00: 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 66 /..// The f
0e10: 6f 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 65 ollowing service
0e20: 73 20 70 72 6f 76 69 64 65 20 66 6f 72 20 6d 61 s provide for ma
0e30: 6e 61 67 69 6e 67 20 74 68 65 20 53 6d 61 72 74 naging the Smart
0e40: 20 43 61 72 64 20 44 61 74 61 62 61 73 65 2e 0d Card Database..
0e50: 0a 2f 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 .//....#define S
0e60: 43 41 52 44 5f 41 4c 4c 5f 52 45 41 44 45 52 53 CARD_ALL_READERS
0e70: 20 20 20 20 20 20 20 54 45 58 54 28 22 53 43 61 TEXT("SCa
0e80: 72 64 24 41 6c 6c 52 65 61 64 65 72 73 5c 30 30 rd$AllReaders\00
0e90: 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 0")..#define SCA
0ea0: 52 44 5f 44 45 46 41 55 4c 54 5f 52 45 41 44 45 RD_DEFAULT_READE
0eb0: 52 53 20 20 20 54 45 58 54 28 22 53 43 61 72 64 RS TEXT("SCard
0ec0: 24 44 65 66 61 75 6c 74 52 65 61 64 65 72 73 5c $DefaultReaders\
0ed0: 30 30 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 000")..#define S
0ee0: 43 41 52 44 5f 4c 4f 43 41 4c 5f 52 45 41 44 45 CARD_LOCAL_READE
0ef0: 52 53 20 20 20 20 20 54 45 58 54 28 22 53 43 61 RS TEXT("SCa
0f00: 72 64 24 4c 6f 63 61 6c 52 65 61 64 65 72 73 5c rd$LocalReaders\
0f10: 30 30 30 22 29 0d 0a 23 64 65 66 69 6e 65 20 53 000")..#define S
0f20: 43 41 52 44 5f 53 59 53 54 45 4d 5f 52 45 41 44 CARD_SYSTEM_READ
0f30: 45 52 53 20 20 20 20 54 45 58 54 28 22 53 43 61 ERS TEXT("SCa
0f40: 72 64 24 53 79 73 74 65 6d 52 65 61 64 65 72 73 rd$SystemReaders
0f50: 5c 30 30 30 22 29 0d 0a 0d 0a 23 64 65 66 69 6e \000")....#defin
0f60: 65 20 53 43 41 52 44 5f 50 52 4f 56 49 44 45 52 e SCARD_PROVIDER
0f70: 5f 50 52 49 4d 41 52 59 20 20 31 20 20 20 2f 2f _PRIMARY 1 //
0f80: 20 50 72 69 6d 61 72 79 20 50 72 6f 76 69 64 65 Primary Provide
0f90: 72 20 49 64 0d 0a 23 64 65 66 69 6e 65 20 53 43 r Id..#define SC
0fa0: 41 52 44 5f 50 52 4f 56 49 44 45 52 5f 43 53 50 ARD_PROVIDER_CSP
0fb0: 20 20 20 20 20 20 32 20 20 20 2f 2f 20 43 72 79 2 // Cry
0fc0: 70 74 6f 20 53 65 72 76 69 63 65 20 50 72 6f 76 pto Service Prov
0fd0: 69 64 65 72 20 49 64 0d 0a 23 64 65 66 69 6e 65 ider Id..#define
0fe0: 20 53 43 41 52 44 5f 50 52 4f 56 49 44 45 52 5f SCARD_PROVIDER_
0ff0: 4b 53 50 20 20 20 20 20 20 33 20 20 20 2f 2f 20 KSP 3 //
1000: 4b 65 79 20 53 74 6f 72 61 67 65 20 50 72 6f 76 Key Storage Prov
1010: 69 64 65 72 20 49 64 0d 0a 0d 0a 0d 0a 2f 2f 0d ider Id......//.
1020: 0a 2f 2f 20 44 61 74 61 62 61 73 65 20 52 65 61 .// Database Rea
1030: 64 65 72 20 72 6f 75 74 69 6e 65 73 0d 0a 2f 2f der routines..//
1040: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 ....extern WINSC
1050: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
1060: 50 49 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 PI..SCardListRea
1070: 64 65 72 47 72 6f 75 70 73 41 28 0d 0a 20 20 20 derGroupsA(..
1080: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
1090: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
10a0: 20 20 20 20 20 4c 50 53 54 52 20 6d 73 7a 47 72 LPSTR mszGr
10b0: 6f 75 70 73 2c 0d 0a 20 4c 50 44 57 4f 52 44 20 oups,.. LPDWORD
10c0: 70 63 63 68 47 72 6f 75 70 73 29 3b 0d 0a 65 78 pcchGroups);..ex
10d0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
10e0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
10f0: 61 72 64 4c 69 73 74 52 65 61 64 65 72 47 72 6f ardListReaderGro
1100: 75 70 73 57 28 0d 0a 20 20 20 20 20 20 20 20 53 upsW(.. S
1110: 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e CARDCONTEXT hCon
1120: 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 4c text,.. L
1130: 50 57 53 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c PWSTR mszGroups,
1140: 0d 0a 20 4c 50 44 57 4f 52 44 20 70 63 63 68 47 .. LPDWORD pcchG
1150: 72 6f 75 70 73 29 3b 0d 0a 23 69 66 64 65 66 20 roups);..#ifdef
1160: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 UNICODE..#define
1170: 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 SCardListReader
1180: 47 72 6f 75 70 73 20 20 53 43 61 72 64 4c 69 73 Groups SCardLis
1190: 74 52 65 61 64 65 72 47 72 6f 75 70 73 57 0d 0a tReaderGroupsW..
11a0: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 #else..#define S
11b0: 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 47 72 CardListReaderGr
11c0: 6f 75 70 73 20 20 53 43 61 72 64 4c 69 73 74 52 oups SCardListR
11d0: 65 61 64 65 72 47 72 6f 75 70 73 41 0d 0a 23 65 eaderGroupsA..#e
11e0: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 ndif // !UNICODE
11f0: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 ....extern WINSC
1200: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
1210: 50 49 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 PI..SCardListRea
1220: 64 65 72 73 41 28 0d 0a 20 20 20 20 20 20 20 20 dersA(..
1230: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 SCARDCONTEXT hC
1240: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 ontext,.. LP
1250: 43 53 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c 0d CSTR mszGroups,.
1260: 0a 20 20 20 20 20 20 4c 50 53 54 52 20 6d 73 7a . LPSTR msz
1270: 52 65 61 64 65 72 73 2c 0d 0a 20 20 4c 50 44 57 Readers,.. LPDW
1280: 4f 52 44 20 70 63 63 68 52 65 61 64 65 72 73 29 ORD pcchReaders)
1290: 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 ;..extern WINSCA
12a0: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 RDAPI LONG WINAP
12b0: 49 0d 0a 53 43 61 72 64 4c 69 73 74 52 65 61 64 I..SCardListRead
12c0: 65 72 73 57 28 0d 0a 20 20 20 20 20 20 20 20 20 ersW(..
12d0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
12e0: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 ntext,.. LPC
12f0: 57 53 54 52 20 6d 73 7a 47 72 6f 75 70 73 2c 0d WSTR mszGroups,.
1300: 0a 20 20 20 20 20 20 4c 50 57 53 54 52 20 6d 73 . LPWSTR ms
1310: 7a 52 65 61 64 65 72 73 2c 0d 0a 20 20 4c 50 44 zReaders,.. LPD
1320: 57 4f 52 44 20 70 63 63 68 52 65 61 64 65 72 73 WORD pcchReaders
1330: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f );..#ifdef UNICO
1340: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 DE..#define SCar
1350: 64 4c 69 73 74 52 65 61 64 65 72 73 20 20 53 43 dListReaders SC
1360: 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 57 0d ardListReadersW.
1370: 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 .#else..#define
1380: 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 72 73 SCardListReaders
1390: 20 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65 SCardListReade
13a0: 72 73 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 rsA..#endif // !
13b0: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 UNICODE....exter
13c0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
13d0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
13e0: 4c 69 73 74 43 61 72 64 73 41 28 0d 0a 20 20 20 ListCardsA(..
13f0: 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 SCARDCONT
1400: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 EXT hContext,..
1410: 20 20 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 LPCBYTE pbA
1420: 74 72 2c 0d 0a 20 20 20 20 20 20 4c 50 43 47 55 tr,.. LPCGU
1430: 49 44 20 72 67 71 75 69 64 49 6e 74 65 72 66 61 ID rgquidInterfa
1440: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ces,..
1450: 44 57 4f 52 44 20 63 67 75 69 64 49 6e 74 65 72 DWORD cguidInter
1460: 66 61 63 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 faceCount,..
1470: 20 20 4c 50 53 54 52 20 6d 73 7a 43 61 72 64 73 LPSTR mszCards
1480: 2c 0d 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 63 ,.. LPDWORD pc
1490: 63 68 43 61 72 64 73 29 3b 0d 0a 65 78 74 65 72 chCards);..exter
14a0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
14b0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
14c0: 4c 69 73 74 43 61 72 64 73 57 28 0d 0a 20 20 20 ListCardsW(..
14d0: 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 SCARDCONT
14e0: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 EXT hContext,..
14f0: 20 20 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 LPCBYTE pbA
1500: 74 72 2c 0d 0a 20 20 20 20 20 20 4c 50 43 47 55 tr,.. LPCGU
1510: 49 44 20 72 67 71 75 69 64 49 6e 74 65 72 66 61 ID rgquidInterfa
1520: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ces,..
1530: 44 57 4f 52 44 20 63 67 75 69 64 49 6e 74 65 72 DWORD cguidInter
1540: 66 61 63 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 faceCount,..
1550: 20 20 4c 50 57 53 54 52 20 6d 73 7a 43 61 72 64 LPWSTR mszCard
1560: 73 2c 0d 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 s,.. LPDWORD p
1570: 63 63 68 43 61 72 64 73 29 3b 0d 0a 23 69 66 64 cchCards);..#ifd
1580: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 ef UNICODE..#def
1590: 69 6e 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 ine SCardListCar
15a0: 64 73 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 ds SCardListCar
15b0: 64 73 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 dsW..#else..#def
15c0: 69 6e 65 20 53 43 61 72 64 4c 69 73 74 43 61 72 ine SCardListCar
15d0: 64 73 20 20 53 43 61 72 64 4c 69 73 74 43 61 72 ds SCardListCar
15e0: 64 73 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 dsA..#endif // !
15f0: 55 4e 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 UNICODE..//..//
1600: 4e 4f 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 NOTE: The rou
1610: 74 69 6e 65 20 53 43 61 72 64 4c 69 73 74 43 61 tine SCardListCa
1620: 72 64 73 20 6e 61 6d 65 20 64 69 66 66 65 72 73 rds name differs
1630: 20 66 72 6f 6d 20 74 68 65 20 50 43 2f 53 43 20 from the PC/SC
1640: 64 65 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f 2f 20 definition...//
1650: 20 20 20 20 20 20 20 20 20 49 74 20 73 68 6f 75 It shou
1660: 6c 64 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f 20 20 ld be:..//..//
1670: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 65 exte
1680: 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c rn WINSCARDAPI L
1690: 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 2f 2f 20 20 ONG WINAPI..//
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 43 61 72 SCar
16b0: 64 4c 69 73 74 43 61 72 64 54 79 70 65 73 28 0d dListCardTypes(.
16c0: 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 .//
16d0: 20 20 20 20 20 20 20 20 20 20 20 53 43 41 52 44 SCARD
16e0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 CONTEXT hContext
16f0: 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 ,..//
1700: 20 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 45 LPCBYTE
1710: 20 70 62 41 74 72 2c 0d 0a 2f 2f 20 20 20 20 20 pbAtr,..//
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c L
1730: 50 43 47 55 49 44 20 72 67 71 75 69 64 49 6e 74 PCGUID rgquidInt
1740: 65 72 66 61 63 65 73 2c 0d 0a 2f 2f 20 20 20 20 erfaces,..//
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 44 57 4f 52 44 20 63 67 75 69 64 49 DWORD cguidI
1770: 6e 74 65 72 66 61 63 65 43 6f 75 6e 74 2c 0d 0a nterfaceCount,..
1780: 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 //
1790: 20 20 20 20 20 4c 50 54 53 54 52 20 6d 73 7a 43 LPTSTR mszC
17a0: 61 72 64 73 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 ards,..//
17b0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 20 out
17c0: 20 4c 50 44 57 4f 52 44 20 70 63 63 68 43 61 72 LPDWORD pcchCar
17d0: 64 73 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 ds);..//..//
17e0: 20 20 20 20 20 20 48 65 72 65 27 73 20 61 20 77 Here's a w
17f0: 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d 41 43 52 4f ork-around MACRO
1800: 3a 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 :..#define SCard
1810: 4c 69 73 74 43 61 72 64 54 79 70 65 73 20 53 43 ListCardTypes SC
1820: 61 72 64 4c 69 73 74 43 61 72 64 73 0d 0a 0d 0a ardListCards....
1830: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 extern WINSCARDA
1840: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a PI LONG WINAPI..
1850: 53 43 61 72 64 4c 69 73 74 49 6e 74 65 72 66 61 SCardListInterfa
1860: 63 65 73 41 28 0d 0a 20 20 20 20 20 20 20 20 20 cesA(..
1870: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
1880: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 ntext,..
1890: 20 4c 50 43 53 54 52 20 73 7a 43 61 72 64 2c 0d LPCSTR szCard,.
18a0: 0a 20 20 20 20 20 20 20 20 4c 50 47 55 49 44 20 . LPGUID
18b0: 70 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 2c pguidInterfaces,
18c0: 0d 0a 20 20 4c 50 44 57 4f 52 44 20 70 63 67 75 .. LPDWORD pcgu
18d0: 69 64 49 6e 74 65 72 66 61 63 65 73 29 3b 0d 0a idInterfaces);..
18e0: 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 extern WINSCARDA
18f0: 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a PI LONG WINAPI..
1900: 53 43 61 72 64 4c 69 73 74 49 6e 74 65 72 66 61 SCardListInterfa
1910: 63 65 73 57 28 0d 0a 20 20 20 20 20 20 20 20 20 cesW(..
1920: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
1930: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 ntext,..
1940: 20 4c 50 43 57 53 54 52 20 73 7a 43 61 72 64 2c LPCWSTR szCard,
1950: 0d 0a 20 20 20 20 20 20 20 20 4c 50 47 55 49 44 .. LPGUID
1960: 20 70 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 pguidInterfaces
1970: 2c 0d 0a 20 20 4c 50 44 57 4f 52 44 20 70 63 67 ,.. LPDWORD pcg
1980: 75 69 64 49 6e 74 65 72 66 61 63 65 73 29 3b 0d uidInterfaces);.
1990: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d .#ifdef UNICODE.
19a0: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 4c 69 .#define SCardLi
19b0: 73 74 49 6e 74 65 72 66 61 63 65 73 20 20 53 43 stInterfaces SC
19c0: 61 72 64 4c 69 73 74 49 6e 74 65 72 66 61 63 65 ardListInterface
19d0: 73 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 sW..#else..#defi
19e0: 6e 65 20 53 43 61 72 64 4c 69 73 74 49 6e 74 65 ne SCardListInte
19f0: 72 66 61 63 65 73 20 20 53 43 61 72 64 4c 69 73 rfaces SCardLis
1a00: 74 49 6e 74 65 72 66 61 63 65 73 41 0d 0a 23 65 tInterfacesA..#e
1a10: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 ndif // !UNICODE
1a20: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 ....extern WINSC
1a30: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
1a40: 50 49 0d 0a 53 43 61 72 64 47 65 74 50 72 6f 76 PI..SCardGetProv
1a50: 69 64 65 72 49 64 41 28 0d 0a 20 20 20 20 20 20 iderIdA(..
1a60: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 SCARDCONTEXT
1a70: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 hContext,..
1a80: 20 20 20 20 4c 50 43 53 54 52 20 73 7a 43 61 72 LPCSTR szCar
1a90: 64 2c 0d 0a 20 20 20 20 20 20 20 20 4c 50 47 55 d,.. LPGU
1aa0: 49 44 20 70 67 75 69 64 50 72 6f 76 69 64 65 72 ID pguidProvider
1ab0: 49 64 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e Id);..extern WIN
1ac0: 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 SCARDAPI LONG WI
1ad0: 4e 41 50 49 0d 0a 53 43 61 72 64 47 65 74 50 72 NAPI..SCardGetPr
1ae0: 6f 76 69 64 65 72 49 64 57 28 0d 0a 20 20 20 20 oviderIdW(..
1af0: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
1b00: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
1b10: 20 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a LPCWSTR sz
1b20: 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 20 4c Card,.. L
1b30: 50 47 55 49 44 20 70 67 75 69 64 50 72 6f 76 69 PGUID pguidProvi
1b40: 64 65 72 49 64 29 3b 0d 0a 23 69 66 64 65 66 20 derId);..#ifdef
1b50: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 UNICODE..#define
1b60: 20 53 43 61 72 64 47 65 74 50 72 6f 76 69 64 65 SCardGetProvide
1b70: 72 49 64 20 20 53 43 61 72 64 47 65 74 50 72 6f rId SCardGetPro
1b80: 76 69 64 65 72 49 64 57 0d 0a 23 65 6c 73 65 0d viderIdW..#else.
1b90: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 47 65 .#define SCardGe
1ba0: 74 50 72 6f 76 69 64 65 72 49 64 20 20 53 43 61 tProviderId SCa
1bb0: 72 64 47 65 74 50 72 6f 76 69 64 65 72 49 64 41 rdGetProviderIdA
1bc0: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 ..#endif // !UNI
1bd0: 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 CODE..//..// NOT
1be0: 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69 6e E: The routin
1bf0: 65 20 53 43 61 72 64 47 65 74 50 72 6f 76 69 64 e SCardGetProvid
1c00: 65 72 49 64 20 69 6e 20 74 68 69 73 20 69 6d 70 erId in this imp
1c10: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73 65 73 lementation uses
1c20: 20 47 55 49 44 73 2e 0d 0a 2f 2f 20 20 20 20 20 GUIDs...//
1c30: 20 20 20 20 20 54 68 65 20 50 43 2f 53 43 20 64 The PC/SC d
1c40: 65 66 69 6e 69 74 69 6f 6e 20 75 73 65 73 20 42 efinition uses B
1c50: 59 54 45 73 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 YTEs...//....ext
1c60: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
1c70: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 LONG WINAPI..SCa
1c80: 72 64 47 65 74 43 61 72 64 54 79 70 65 50 72 6f rdGetCardTypePro
1c90: 76 69 64 65 72 4e 61 6d 65 41 28 0d 0a 20 20 20 viderNameA(..
1ca0: 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 SCARDCONT
1cb0: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 EXT hContext,..
1cc0: 20 20 20 20 20 20 20 20 20 4c 50 43 53 54 52 20 LPCSTR
1cd0: 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 20 szCardName,..
1ce0: 20 20 20 20 20 20 20 44 57 4f 52 44 20 64 77 50 DWORD dwP
1cf0: 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 roviderId,..
1d00: 20 4c 50 53 54 52 20 73 7a 50 72 6f 76 69 64 65 LPSTR szProvide
1d10: 72 2c 0d 0a 20 20 20 4c 50 44 57 4f 52 44 20 70 r,.. LPDWORD p
1d20: 63 63 68 50 72 6f 76 69 64 65 72 29 3b 0d 0a 65 cchProvider);..e
1d30: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
1d40: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
1d50: 43 61 72 64 47 65 74 43 61 72 64 54 79 70 65 50 CardGetCardTypeP
1d60: 72 6f 76 69 64 65 72 4e 61 6d 65 57 28 0d 0a 20 roviderNameW(..
1d70: 20 20 20 20 20 20 20 20 20 53 43 41 52 44 43 4f SCARDCO
1d80: 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d NTEXT hContext,.
1d90: 0a 20 20 20 20 20 20 20 20 20 20 4c 50 43 57 53 . LPCWS
1da0: 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a TR szCardName,..
1db0: 20 20 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 DWORD
1dc0: 64 77 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 dwProviderId,..
1dd0: 20 20 20 20 4c 50 57 53 54 52 20 73 7a 50 72 6f LPWSTR szPro
1de0: 76 69 64 65 72 2c 0d 0a 20 20 20 4c 50 44 57 4f vider,.. LPDWO
1df0: 52 44 20 70 63 63 68 50 72 6f 76 69 64 65 72 29 RD pcchProvider)
1e00: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 ;..#ifdef UNICOD
1e10: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 E..#define SCard
1e20: 47 65 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 GetCardTypeProvi
1e30: 64 65 72 4e 61 6d 65 20 20 53 43 61 72 64 47 65 derName SCardGe
1e40: 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 tCardTypeProvide
1e50: 72 4e 61 6d 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 rNameW..#else..#
1e60: 64 65 66 69 6e 65 20 53 43 61 72 64 47 65 74 43 define SCardGetC
1e70: 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e ardTypeProviderN
1e80: 61 6d 65 20 20 53 43 61 72 64 47 65 74 43 61 72 ame SCardGetCar
1e90: 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d dTypeProviderNam
1ea0: 65 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 eA..#endif // !U
1eb0: 4e 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e NICODE..//..// N
1ec0: 4f 54 45 3a 20 20 20 20 54 68 69 73 20 72 6f 75 OTE: This rou
1ed0: 74 69 6e 65 20 69 73 20 61 6e 20 65 78 74 65 6e tine is an exten
1ee0: 73 69 6f 6e 20 74 6f 20 74 68 65 20 50 43 2f 53 sion to the PC/S
1ef0: 43 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0d 0a C definitions...
1f00: 2f 2f 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 44 //......//..// D
1f10: 61 74 61 62 61 73 65 20 57 72 69 74 65 72 20 72 atabase Writer r
1f20: 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a 0d 0a 65 outines..//....e
1f30: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
1f40: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
1f50: 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61 CardIntroduceRea
1f60: 64 65 72 47 72 6f 75 70 41 28 0d 0a 20 20 20 20 derGroupA(..
1f70: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 SCARDCONTEXT hC
1f80: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 ontext,.. LP
1f90: 43 53 54 52 20 73 7a 47 72 6f 75 70 4e 61 6d 65 CSTR szGroupName
1fa0: 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 );..extern WINSC
1fb0: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
1fc0: 50 49 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 75 PI..SCardIntrodu
1fd0: 63 65 52 65 61 64 65 72 47 72 6f 75 70 57 28 0d ceReaderGroupW(.
1fe0: 0a 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 . SCARDCONTE
1ff0: 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 XT hContext,..
2000: 20 20 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f LPCWSTR szGro
2010: 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 upName);..#ifdef
2020: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e UNICODE..#defin
2030: 65 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 e SCardIntroduce
2040: 52 65 61 64 65 72 47 72 6f 75 70 20 20 53 43 61 ReaderGroup SCa
2050: 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 rdIntroduceReade
2060: 72 47 72 6f 75 70 57 0d 0a 23 65 6c 73 65 0d 0a rGroupW..#else..
2070: 23 64 65 66 69 6e 65 20 53 43 61 72 64 49 6e 74 #define SCardInt
2080: 72 6f 64 75 63 65 52 65 61 64 65 72 47 72 6f 75 roduceReaderGrou
2090: 70 20 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 p SCardIntroduc
20a0: 65 52 65 61 64 65 72 47 72 6f 75 70 41 0d 0a 23 eReaderGroupA..#
20b0: 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 endif // !UNICOD
20c0: 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 E....extern WINS
20d0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e CARDAPI LONG WIN
20e0: 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 65 74 API..SCardForget
20f0: 52 65 61 64 65 72 47 72 6f 75 70 41 28 0d 0a 20 ReaderGroupA(..
2100: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 SCARDCONTEXT
2110: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 hContext,..
2120: 20 4c 50 43 53 54 52 20 73 7a 47 72 6f 75 70 4e LPCSTR szGroupN
2130: 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 ame);..extern WI
2140: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
2150: 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 INAPI..SCardForg
2160: 65 74 52 65 61 64 65 72 47 72 6f 75 70 57 28 0d etReaderGroupW(.
2170: 0a 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 . SCARDCONTE
2180: 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 XT hContext,..
2190: 20 20 20 4c 50 43 57 53 54 52 20 73 7a 47 72 6f LPCWSTR szGro
21a0: 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 upName);..#ifdef
21b0: 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e UNICODE..#defin
21c0: 65 20 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 e SCardForgetRea
21d0: 64 65 72 47 72 6f 75 70 20 20 53 43 61 72 64 46 derGroup SCardF
21e0: 6f 72 67 65 74 52 65 61 64 65 72 47 72 6f 75 70 orgetReaderGroup
21f0: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e W..#else..#defin
2200: 65 20 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 e SCardForgetRea
2210: 64 65 72 47 72 6f 75 70 20 20 53 43 61 72 64 46 derGroup SCardF
2220: 6f 72 67 65 74 52 65 61 64 65 72 47 72 6f 75 70 orgetReaderGroup
2230: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e A..#endif // !UN
2240: 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 ICODE....extern
2250: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 WINSCARDAPI LONG
2260: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e WINAPI..SCardIn
2270: 74 72 6f 64 75 63 65 52 65 61 64 65 72 41 28 0d troduceReaderA(.
2280: 0a 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 . SCARDCONTE
2290: 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 XT hContext,..
22a0: 20 20 20 4c 50 43 53 54 52 20 73 7a 52 65 61 64 LPCSTR szRead
22b0: 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 4c 50 erName,.. LP
22c0: 43 53 54 52 20 73 7a 44 65 76 69 63 65 4e 61 6d CSTR szDeviceNam
22d0: 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 e);..extern WINS
22e0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e CARDAPI LONG WIN
22f0: 41 50 49 0d 0a 53 43 61 72 64 49 6e 74 72 6f 64 API..SCardIntrod
2300: 75 63 65 52 65 61 64 65 72 57 28 0d 0a 20 20 20 uceReaderW(..
2310: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 SCARDCONTEXT h
2320: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c Context,.. L
2330: 50 43 57 53 54 52 20 73 7a 52 65 61 64 65 72 4e PCWSTR szReaderN
2340: 61 6d 65 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53 ame,.. LPCWS
2350: 54 52 20 73 7a 44 65 76 69 63 65 4e 61 6d 65 29 TR szDeviceName)
2360: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 ;..#ifdef UNICOD
2370: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 E..#define SCard
2380: 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 72 20 IntroduceReader
2390: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 52 SCardIntroduceR
23a0: 65 61 64 65 72 57 0d 0a 23 65 6c 73 65 0d 0a 23 eaderW..#else..#
23b0: 64 65 66 69 6e 65 20 53 43 61 72 64 49 6e 74 72 define SCardIntr
23c0: 6f 64 75 63 65 52 65 61 64 65 72 20 20 53 43 61 oduceReader SCa
23d0: 72 64 49 6e 74 72 6f 64 75 63 65 52 65 61 64 65 rdIntroduceReade
23e0: 72 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 rA..#endif // !U
23f0: 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e NICODE....extern
2400: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e WINSCARDAPI LON
2410: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 G WINAPI..SCardF
2420: 6f 72 67 65 74 52 65 61 64 65 72 41 28 0d 0a 20 orgetReaderA(..
2430: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 SCARDCONTEXT
2440: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 hContext,..
2450: 20 4c 50 43 53 54 52 20 73 7a 52 65 61 64 65 72 LPCSTR szReader
2460: 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 Name);..extern W
2470: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 INSCARDAPI LONG
2480: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 WINAPI..SCardFor
2490: 67 65 74 52 65 61 64 65 72 57 28 0d 0a 20 20 20 getReaderW(..
24a0: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 SCARDCONTEXT h
24b0: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c Context,.. L
24c0: 50 43 57 53 54 52 20 73 7a 52 65 61 64 65 72 4e PCWSTR szReaderN
24d0: 61 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e ame);..#ifdef UN
24e0: 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 ICODE..#define S
24f0: 43 61 72 64 46 6f 72 67 65 74 52 65 61 64 65 72 CardForgetReader
2500: 20 20 53 43 61 72 64 46 6f 72 67 65 74 52 65 61 SCardForgetRea
2510: 64 65 72 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 derW..#else..#de
2520: 66 69 6e 65 20 53 43 61 72 64 46 6f 72 67 65 74 fine SCardForget
2530: 52 65 61 64 65 72 20 20 53 43 61 72 64 46 6f 72 Reader SCardFor
2540: 67 65 74 52 65 61 64 65 72 41 0d 0a 23 65 6e 64 getReaderA..#end
2550: 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a if // !UNICODE..
2560: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 ..extern WINSCAR
2570: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 DAPI LONG WINAPI
2580: 0d 0a 53 43 61 72 64 41 64 64 52 65 61 64 65 72 ..SCardAddReader
2590: 54 6f 47 72 6f 75 70 41 28 0d 0a 20 20 20 20 20 ToGroupA(..
25a0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
25b0: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c 50 43 ntext,.. LPC
25c0: 53 54 52 20 73 7a 52 65 61 64 65 72 4e 61 6d 65 STR szReaderName
25d0: 2c 0d 0a 20 20 20 20 20 4c 50 43 53 54 52 20 73 ,.. LPCSTR s
25e0: 7a 47 72 6f 75 70 4e 61 6d 65 29 3b 0d 0a 65 78 zGroupName);..ex
25f0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
2600: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
2610: 61 72 64 41 64 64 52 65 61 64 65 72 54 6f 47 72 ardAddReaderToGr
2620: 6f 75 70 57 28 0d 0a 20 20 20 20 20 53 43 41 52 oupW(.. SCAR
2630: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 DCONTEXT hContex
2640: 74 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52 t,.. LPCWSTR
2650: 20 73 7a 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a szReaderName,..
2660: 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a 47 LPCWSTR szG
2670: 72 6f 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 roupName);..#ifd
2680: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 ef UNICODE..#def
2690: 69 6e 65 20 53 43 61 72 64 41 64 64 52 65 61 64 ine SCardAddRead
26a0: 65 72 54 6f 47 72 6f 75 70 20 20 53 43 61 72 64 erToGroup SCard
26b0: 41 64 64 52 65 61 64 65 72 54 6f 47 72 6f 75 70 AddReaderToGroup
26c0: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e W..#else..#defin
26d0: 65 20 53 43 61 72 64 41 64 64 52 65 61 64 65 72 e SCardAddReader
26e0: 54 6f 47 72 6f 75 70 20 20 53 43 61 72 64 41 64 ToGroup SCardAd
26f0: 64 52 65 61 64 65 72 54 6f 47 72 6f 75 70 41 0d dReaderToGroupA.
2700: 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 .#endif // !UNIC
2710: 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 ODE....extern WI
2720: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
2730: 49 4e 41 50 49 0d 0a 53 43 61 72 64 52 65 6d 6f INAPI..SCardRemo
2740: 76 65 52 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 veReaderFromGrou
2750: 70 41 28 0d 0a 20 20 20 20 20 53 43 41 52 44 43 pA(.. SCARDC
2760: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c ONTEXT hContext,
2770: 0d 0a 20 20 20 20 20 4c 50 43 53 54 52 20 73 7a .. LPCSTR sz
2780: 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 20 20 ReaderName,..
2790: 20 20 4c 50 43 53 54 52 20 73 7a 47 72 6f 75 70 LPCSTR szGroup
27a0: 4e 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 Name);..extern W
27b0: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 INSCARDAPI LONG
27c0: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 52 65 6d WINAPI..SCardRem
27d0: 6f 76 65 52 65 61 64 65 72 46 72 6f 6d 47 72 6f oveReaderFromGro
27e0: 75 70 57 28 0d 0a 20 20 20 20 20 53 43 41 52 44 upW(.. SCARD
27f0: 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 CONTEXT hContext
2800: 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52 20 ,.. LPCWSTR
2810: 73 7a 52 65 61 64 65 72 4e 61 6d 65 2c 0d 0a 20 szReaderName,..
2820: 20 20 20 20 4c 50 43 57 53 54 52 20 73 7a 47 72 LPCWSTR szGr
2830: 6f 75 70 4e 61 6d 65 29 3b 0d 0a 23 69 66 64 65 oupName);..#ifde
2840: 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 f UNICODE..#defi
2850: 6e 65 20 53 43 61 72 64 52 65 6d 6f 76 65 52 65 ne SCardRemoveRe
2860: 61 64 65 72 46 72 6f 6d 47 72 6f 75 70 20 20 53 aderFromGroup S
2870: 43 61 72 64 52 65 6d 6f 76 65 52 65 61 64 65 72 CardRemoveReader
2880: 46 72 6f 6d 47 72 6f 75 70 57 0d 0a 23 65 6c 73 FromGroupW..#els
2890: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 e..#define SCard
28a0: 52 65 6d 6f 76 65 52 65 61 64 65 72 46 72 6f 6d RemoveReaderFrom
28b0: 47 72 6f 75 70 20 20 53 43 61 72 64 52 65 6d 6f Group SCardRemo
28c0: 76 65 52 65 61 64 65 72 46 72 6f 6d 47 72 6f 75 veReaderFromGrou
28d0: 70 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 pA..#endif // !U
28e0: 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 6e NICODE....extern
28f0: 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e WINSCARDAPI LON
2900: 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 G WINAPI..SCardI
2910: 6e 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65 ntroduceCardType
2920: 41 28 0d 0a 20 20 20 20 20 20 20 20 20 53 43 41 A(.. SCA
2930: 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 RDCONTEXT hConte
2940: 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c 50 xt,.. LP
2950: 43 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c CSTR szCardName,
2960: 0d 0a 20 20 20 20 20 4c 50 43 47 55 49 44 20 70 .. LPCGUID p
2970: 67 75 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 guidPrimaryProvi
2980: 64 65 72 2c 0d 0a 20 20 20 20 20 4c 50 43 47 55 der,.. LPCGU
2990: 49 44 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 ID rgguidInterfa
29a0: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 44 ces,.. D
29b0: 57 4f 52 44 20 64 77 49 6e 74 65 72 66 61 63 65 WORD dwInterface
29c0: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 Count,..
29d0: 20 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d LPCBYTE pbAtr,.
29e0: 0a 20 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 . LPCBYT
29f0: 45 20 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 20 20 E pbAtrMask,..
2a00: 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 DWORD cbA
2a10: 74 72 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e 20 trLen);..extern
2a20: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 WINSCARDAPI LONG
2a30: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 49 6e WINAPI..SCardIn
2a40: 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65 57 troduceCardTypeW
2a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 53 43 41 52 (.. SCAR
2a60: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 DCONTEXT hContex
2a70: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 4c 50 43 t,.. LPC
2a80: 57 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 2c WSTR szCardName,
2a90: 0d 0a 20 20 20 20 20 4c 50 43 47 55 49 44 20 70 .. LPCGUID p
2aa0: 67 75 69 64 50 72 69 6d 61 72 79 50 72 6f 76 69 guidPrimaryProvi
2ab0: 64 65 72 2c 0d 0a 20 20 20 20 20 4c 50 43 47 55 der,.. LPCGU
2ac0: 49 44 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 ID rgguidInterfa
2ad0: 63 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 44 ces,.. D
2ae0: 57 4f 52 44 20 64 77 49 6e 74 65 72 66 61 63 65 WORD dwInterface
2af0: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 Count,..
2b00: 20 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c 0d LPCBYTE pbAtr,.
2b10: 0a 20 20 20 20 20 20 20 20 20 4c 50 43 42 59 54 . LPCBYT
2b20: 45 20 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 20 20 E pbAtrMask,..
2b30: 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 DWORD cbA
2b40: 74 72 4c 65 6e 29 3b 0d 0a 23 69 66 64 65 66 20 trLen);..#ifdef
2b50: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 UNICODE..#define
2b60: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 SCardIntroduceC
2b70: 61 72 64 54 79 70 65 20 20 53 43 61 72 64 49 6e ardType SCardIn
2b80: 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65 57 troduceCardTypeW
2b90: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 ..#else..#define
2ba0: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 SCardIntroduceC
2bb0: 61 72 64 54 79 70 65 20 20 53 43 61 72 64 49 6e ardType SCardIn
2bc0: 74 72 6f 64 75 63 65 43 61 72 64 54 79 70 65 41 troduceCardTypeA
2bd0: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 ..#endif // !UNI
2be0: 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 CODE..//..// NOT
2bf0: 45 3a 20 20 20 20 54 68 65 20 72 6f 75 74 69 6e E: The routin
2c00: 65 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 e SCardIntroduce
2c10: 43 61 72 64 54 79 70 65 27 73 20 70 61 72 61 6d CardType's param
2c20: 65 74 65 72 73 27 20 6f 72 64 65 72 20 64 69 66 eters' order dif
2c30: 66 65 72 73 20 66 72 6f 6d 0d 0a 2f 2f 20 20 20 fers from..//
2c40: 20 20 20 20 20 20 20 74 68 65 20 50 43 2f 53 43 the PC/SC
2c50: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 74 definition. It
2c60: 20 73 68 6f 75 6c 64 20 62 65 3a 0d 0a 2f 2f 0d should be:..//.
2c70: 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 .//
2c80: 20 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 extern WINSCARD
2c90: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d API LONG WINAPI.
2ca0: 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 .//
2cb0: 20 53 43 61 72 64 49 6e 74 72 6f 64 75 63 65 43 SCardIntroduceC
2cc0: 61 72 64 54 79 70 65 28 0d 0a 2f 2f 20 20 20 20 ardType(..//
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ce0: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 SCARDCONTEXT
2cf0: 68 43 6f 6e 74 65 78 74 2c 0d 0a 2f 2f 20 20 20 hContext,..//
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d10: 20 20 20 20 4c 50 43 54 53 54 52 20 73 7a 43 61 LPCTSTR szCa
2d20: 72 64 4e 61 6d 65 2c 0d 0a 2f 2f 20 20 20 20 20 rdName,..//
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d40: 20 20 4c 50 43 42 59 54 45 20 70 62 41 74 72 2c LPCBYTE pbAtr,
2d50: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 ..//
2d60: 20 20 20 20 20 20 20 20 20 20 20 4c 50 43 42 59 LPCBY
2d70: 54 45 20 70 62 41 74 72 4d 61 73 6b 2c 0d 0a 2f TE pbAtrMask,../
2d80: 2f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 /
2d90: 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 DWORD cb
2da0: 41 74 72 4c 65 6e 2c 0d 0a 2f 2f 20 20 20 20 20 AtrLen,..//
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 LP
2dc0: 43 47 55 49 44 20 70 67 75 69 64 50 72 69 6d 61 CGUID pguidPrima
2dd0: 72 79 50 72 6f 76 69 64 65 72 2c 0d 0a 2f 2f 20 ryProvider,..//
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2df0: 20 20 4c 50 43 47 55 49 44 20 72 67 67 75 69 64 LPCGUID rgguid
2e00: 49 6e 74 65 72 66 61 63 65 73 2c 0d 0a 2f 2f 20 Interfaces,..//
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e20: 20 20 20 20 20 20 44 57 4f 52 44 20 64 77 49 6e DWORD dwIn
2e30: 74 65 72 66 61 63 65 43 6f 75 6e 74 29 3b 0d 0a terfaceCount);..
2e40: 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 //..//
2e50: 48 65 72 65 27 73 20 61 20 77 6f 72 6b 2d 61 72 Here's a work-ar
2e60: 6f 75 6e 64 20 4d 41 43 52 4f 3a 0d 0a 23 64 65 ound MACRO:..#de
2e70: 66 69 6e 65 20 50 43 53 43 61 72 64 49 6e 74 72 fine PCSCardIntr
2e80: 6f 64 75 63 65 43 61 72 64 54 79 70 65 28 68 43 oduceCardType(hC
2e90: 6f 6e 74 65 78 74 2c 20 73 7a 43 61 72 64 4e 61 ontext, szCardNa
2ea0: 6d 65 2c 20 70 62 41 74 72 2c 20 70 62 41 74 72 me, pbAtr, pbAtr
2eb0: 4d 61 73 6b 2c 20 63 62 41 74 72 4c 65 6e 2c 20 Mask, cbAtrLen,
2ec0: 70 67 75 69 64 50 72 69 6d 61 72 79 50 72 6f 76 pguidPrimaryProv
2ed0: 69 64 65 72 2c 20 72 67 67 75 69 64 49 6e 74 65 ider, rgguidInte
2ee0: 72 66 61 63 65 73 2c 20 64 77 49 6e 74 65 72 66 rfaces, dwInterf
2ef0: 61 63 65 43 6f 75 6e 74 29 20 5c 0d 0a 20 20 20 aceCount) \..
2f00: 20 20 20 20 20 20 20 53 43 61 72 64 49 6e 74 72 SCardIntr
2f10: 6f 64 75 63 65 43 61 72 64 54 79 70 65 28 68 43 oduceCardType(hC
2f20: 6f 6e 74 65 78 74 2c 20 73 7a 43 61 72 64 4e 61 ontext, szCardNa
2f30: 6d 65 2c 20 70 67 75 69 64 50 72 69 6d 61 72 79 me, pguidPrimary
2f40: 50 72 6f 76 69 64 65 72 2c 20 72 67 67 75 69 64 Provider, rgguid
2f50: 49 6e 74 65 72 66 61 63 65 73 2c 20 64 77 49 6e Interfaces, dwIn
2f60: 74 65 72 66 61 63 65 43 6f 75 6e 74 2c 20 70 62 terfaceCount, pb
2f70: 41 74 72 2c 20 70 62 41 74 72 4d 61 73 6b 2c 20 Atr, pbAtrMask,
2f80: 63 62 41 74 72 4c 65 6e 29 0d 0a 0d 0a 65 78 74 cbAtrLen)....ext
2f90: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
2fa0: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 LONG WINAPI..SCa
2fb0: 72 64 53 65 74 43 61 72 64 54 79 70 65 50 72 6f rdSetCardTypePro
2fc0: 76 69 64 65 72 4e 61 6d 65 41 28 0d 0a 20 20 20 viderNameA(..
2fd0: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 SCARDCONTEXT h
2fe0: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c Context,.. L
2ff0: 50 43 53 54 52 20 73 7a 43 61 72 64 4e 61 6d 65 PCSTR szCardName
3000: 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 64 77 ,.. DWORD dw
3010: 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 ProviderId,..
3020: 20 20 4c 50 43 53 54 52 20 73 7a 50 72 6f 76 69 LPCSTR szProvi
3030: 64 65 72 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 der);..extern WI
3040: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
3050: 49 4e 41 50 49 0d 0a 53 43 61 72 64 53 65 74 43 INAPI..SCardSetC
3060: 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e ardTypeProviderN
3070: 61 6d 65 57 28 0d 0a 20 20 20 20 20 53 43 41 52 ameW(.. SCAR
3080: 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 DCONTEXT hContex
3090: 74 2c 0d 0a 20 20 20 20 20 4c 50 43 57 53 54 52 t,.. LPCWSTR
30a0: 20 73 7a 43 61 72 64 4e 61 6d 65 2c 0d 0a 20 20 szCardName,..
30b0: 20 20 20 44 57 4f 52 44 20 64 77 50 72 6f 76 69 DWORD dwProvi
30c0: 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 4c 50 43 derId,.. LPC
30d0: 57 53 54 52 20 73 7a 50 72 6f 76 69 64 65 72 29 WSTR szProvider)
30e0: 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 ;..#ifdef UNICOD
30f0: 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 E..#define SCard
3100: 53 65 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 SetCardTypeProvi
3110: 64 65 72 4e 61 6d 65 20 20 53 43 61 72 64 53 65 derName SCardSe
3120: 74 43 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 tCardTypeProvide
3130: 72 4e 61 6d 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 rNameW..#else..#
3140: 64 65 66 69 6e 65 20 53 43 61 72 64 53 65 74 43 define SCardSetC
3150: 61 72 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e ardTypeProviderN
3160: 61 6d 65 20 20 53 43 61 72 64 53 65 74 43 61 72 ame SCardSetCar
3170: 64 54 79 70 65 50 72 6f 76 69 64 65 72 4e 61 6d dTypeProviderNam
3180: 65 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 eA..#endif // !U
3190: 4e 49 43 4f 44 45 0d 0a 2f 2f 0d 0a 2f 2f 20 4e NICODE..//..// N
31a0: 4f 54 45 3a 20 20 20 20 54 68 69 73 20 72 6f 75 OTE: This rou
31b0: 74 69 6e 65 20 69 73 20 61 6e 20 65 78 74 65 6e tine is an exten
31c0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 43 2f 53 tion to the PC/S
31d0: 43 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 73 C specifications
31e0: 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 6e 20 ...//....extern
31f0: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 WINSCARDAPI LONG
3200: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f WINAPI..SCardFo
3210: 72 67 65 74 43 61 72 64 54 79 70 65 41 28 0d 0a rgetCardTypeA(..
3220: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
3230: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
3240: 20 20 4c 50 43 53 54 52 20 73 7a 43 61 72 64 4e LPCSTR szCardN
3250: 61 6d 65 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 ame);..extern WI
3260: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
3270: 49 4e 41 50 49 0d 0a 53 43 61 72 64 46 6f 72 67 INAPI..SCardForg
3280: 65 74 43 61 72 64 54 79 70 65 57 28 0d 0a 20 20 etCardTypeW(..
3290: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 SCARDCONTEXT
32a0: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 hContext,..
32b0: 4c 50 43 57 53 54 52 20 73 7a 43 61 72 64 4e 61 LPCWSTR szCardNa
32c0: 6d 65 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 me);..#ifdef UNI
32d0: 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 CODE..#define SC
32e0: 61 72 64 46 6f 72 67 65 74 43 61 72 64 54 79 70 ardForgetCardTyp
32f0: 65 20 20 53 43 61 72 64 46 6f 72 67 65 74 43 61 e SCardForgetCa
3300: 72 64 54 79 70 65 57 0d 0a 23 65 6c 73 65 0d 0a rdTypeW..#else..
3310: 23 64 65 66 69 6e 65 20 53 43 61 72 64 46 6f 72 #define SCardFor
3320: 67 65 74 43 61 72 64 54 79 70 65 20 20 53 43 61 getCardType SCa
3330: 72 64 46 6f 72 67 65 74 43 61 72 64 54 79 70 65 rdForgetCardType
3340: 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e A..#endif // !UN
3350: 49 43 4f 44 45 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f ICODE......//../
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
33b0: 0a 2f 2f 0d 0a 2f 2f 20 20 53 65 72 76 69 63 65 .//..// Service
33c0: 20 4d 61 6e 61 67 65 72 20 53 75 70 70 6f 72 74 Manager Support
33d0: 20 52 6f 75 74 69 6e 65 73 0d 0a 2f 2f 0d 0a 2f Routines..//../
33e0: 2f 20 20 20 20 20 20 54 68 65 20 66 6f 6c 6c 6f / The follo
33f0: 77 69 6e 67 20 73 65 72 76 69 63 65 73 20 61 72 wing services ar
3400: 65 20 73 75 70 70 6c 69 65 64 20 74 6f 20 73 69 e supplied to si
3410: 6d 70 6c 69 66 79 20 74 68 65 20 75 73 65 20 6f mplify the use o
3420: 66 20 74 68 65 20 53 65 72 76 69 63 65 0d 0a 2f f the Service../
3430: 2f 20 20 20 20 20 20 4d 61 6e 61 67 65 72 20 41 / Manager A
3440: 50 49 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 65 72 PI...//....exter
3450: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
3460: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
3470: 46 72 65 65 4d 65 6d 6f 72 79 28 0d 0a 20 20 20 FreeMemory(..
3480: 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 SCARDCONTEXT h
3490: 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 4c Context,.. L
34a0: 50 43 56 4f 49 44 20 70 76 4d 65 6d 29 3b 0d 0a PCVOID pvMem);..
34b0: 0d 0a 23 69 66 20 28 4e 54 44 44 49 5f 56 45 52 ..#if (NTDDI_VER
34c0: 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49 SION >= NTDDI_WI
34d0: 4e 58 50 29 0d 0a 65 78 74 65 72 6e 20 57 49 4e NXP)..extern WIN
34e0: 53 43 41 52 44 41 50 49 20 48 41 4e 44 4c 45 20 SCARDAPI HANDLE
34f0: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 41 63 63 WINAPI..SCardAcc
3500: 65 73 73 53 74 61 72 74 65 64 45 76 65 6e 74 28 essStartedEvent(
3510: 76 6f 69 64 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e void);....extern
3520: 20 57 49 4e 53 43 41 52 44 41 50 49 20 76 6f 69 WINSCARDAPI voi
3530: 64 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 52 d WINAPI..SCardR
3540: 65 6c 65 61 73 65 53 74 61 72 74 65 64 45 76 65 eleaseStartedEve
3550: 6e 74 28 76 6f 69 64 29 3b 0d 0a 23 65 6e 64 69 nt(void);..#endi
3560: 66 20 2f 2f 20 28 4e 54 44 44 49 5f 56 45 52 53 f // (NTDDI_VERS
3570: 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49 4e ION >= NTDDI_WIN
3580: 58 50 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f XP)....//../////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d ///////////..//.
35e0: 0a 2f 2f 20 20 52 65 61 64 65 72 20 53 65 72 76 .// Reader Serv
35f0: 69 63 65 73 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 ices..//..//
3600: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 The following
3610: 73 65 72 76 69 63 65 73 20 73 75 70 70 6c 79 20 services supply
3620: 6d 65 61 6e 73 20 66 6f 72 20 74 72 61 63 6b 69 means for tracki
3630: 6e 67 20 63 61 72 64 73 20 77 69 74 68 69 6e 20 ng cards within
3640: 72 65 61 64 65 72 73 2e 0d 0a 2f 2f 0d 0a 0d 0a readers...//....
3650: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b typedef struct {
3660: 0d 0a 20 20 20 20 4c 50 43 53 54 52 20 20 20 20 .. LPCSTR
3670: 20 20 73 7a 52 65 61 64 65 72 3b 20 20 20 20 20 szReader;
3680: 20 20 2f 2f 20 72 65 61 64 65 72 20 6e 61 6d 65 // reader name
3690: 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20 20 20 20 .. LPVOID
36a0: 20 20 70 76 55 73 65 72 44 61 74 61 3b 20 20 20 pvUserData;
36b0: 20 20 2f 2f 20 75 73 65 72 20 64 65 66 69 6e 65 // user define
36c0: 64 20 64 61 74 61 0d 0a 20 20 20 20 44 57 4f 52 d data.. DWOR
36d0: 44 20 20 20 20 20 20 20 64 77 43 75 72 72 65 6e D dwCurren
36e0: 74 53 74 61 74 65 3b 20 2f 2f 20 63 75 72 72 65 tState; // curre
36f0: 6e 74 20 73 74 61 74 65 20 6f 66 20 72 65 61 64 nt state of read
3700: 65 72 20 61 74 20 74 69 6d 65 20 6f 66 20 63 61 er at time of ca
3710: 6c 6c 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 ll.. DWORD
3720: 20 20 20 20 64 77 45 76 65 6e 74 53 74 61 74 65 dwEventState
3730: 3b 20 20 20 2f 2f 20 73 74 61 74 65 20 6f 66 20 ; // state of
3740: 72 65 61 64 65 72 20 61 66 74 65 72 20 73 74 61 reader after sta
3750: 74 65 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 44 te change.. D
3760: 57 4f 52 44 20 20 20 20 20 20 20 63 62 41 74 72 WORD cbAtr
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 75 ; // Nu
3780: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e mber of bytes in
3790: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 41 54 the returned AT
37a0: 52 2e 0d 0a 20 20 20 20 42 59 54 45 20 20 20 20 R... BYTE
37b0: 20 20 20 20 72 67 62 41 74 72 5b 33 36 5d 3b 20 rgbAtr[36];
37c0: 20 20 20 20 2f 2f 20 41 74 72 20 6f 66 20 69 6e // Atr of in
37d0: 73 65 72 74 65 64 20 63 61 72 64 2c 20 28 65 78 serted card, (ex
37e0: 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62 79 tra alignment by
37f0: 74 65 73 29 0d 0a 7d 20 53 43 41 52 44 5f 52 45 tes)..} SCARD_RE
3800: 41 44 45 52 53 54 41 54 45 41 2c 20 2a 50 53 43 ADERSTATEA, *PSC
3810: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 41 ARD_READERSTATEA
3820: 2c 20 2a 4c 50 53 43 41 52 44 5f 52 45 41 44 45 , *LPSCARD_READE
3830: 52 53 54 41 54 45 41 3b 0d 0a 74 79 70 65 64 65 RSTATEA;..typede
3840: 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 f struct {..
3850: 4c 50 43 57 53 54 52 20 20 20 20 20 73 7a 52 65 LPCWSTR szRe
3860: 61 64 65 72 3b 20 20 20 20 20 20 20 2f 2f 20 72 ader; // r
3870: 65 61 64 65 72 20 6e 61 6d 65 0d 0a 20 20 20 20 eader name..
3880: 4c 50 56 4f 49 44 20 20 20 20 20 20 70 76 55 73 LPVOID pvUs
3890: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2f 20 75 erData; // u
38a0: 73 65 72 20 64 65 66 69 6e 65 64 20 64 61 74 61 ser defined data
38b0: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 .. DWORD
38c0: 20 20 64 77 43 75 72 72 65 6e 74 53 74 61 74 65 dwCurrentState
38d0: 3b 20 2f 2f 20 63 75 72 72 65 6e 74 20 73 74 61 ; // current sta
38e0: 74 65 20 6f 66 20 72 65 61 64 65 72 20 61 74 20 te of reader at
38f0: 74 69 6d 65 20 6f 66 20 63 61 6c 6c 0d 0a 20 20 time of call..
3900: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 64 77 DWORD dw
3910: 45 76 65 6e 74 53 74 61 74 65 3b 20 20 20 2f 2f EventState; //
3920: 20 73 74 61 74 65 20 6f 66 20 72 65 61 64 65 72 state of reader
3930: 20 61 66 74 65 72 20 73 74 61 74 65 20 63 68 61 after state cha
3940: 6e 67 65 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 nge.. DWORD
3950: 20 20 20 20 20 63 62 41 74 72 3b 20 20 20 20 20 cbAtr;
3960: 20 20 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f // Number o
3970: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 f bytes in the r
3980: 65 74 75 72 6e 65 64 20 41 54 52 2e 0d 0a 20 20 eturned ATR...
3990: 20 20 42 59 54 45 20 20 20 20 20 20 20 20 72 67 BYTE rg
39a0: 62 41 74 72 5b 33 36 5d 3b 20 20 20 20 20 2f 2f bAtr[36]; //
39b0: 20 41 74 72 20 6f 66 20 69 6e 73 65 72 74 65 64 Atr of inserted
39c0: 20 63 61 72 64 2c 20 28 65 78 74 72 61 20 61 6c card, (extra al
39d0: 69 67 6e 6d 65 6e 74 20 62 79 74 65 73 29 0d 0a ignment bytes)..
39e0: 7d 20 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 } SCARD_READERST
39f0: 41 54 45 57 2c 20 2a 50 53 43 41 52 44 5f 52 45 ATEW, *PSCARD_RE
3a00: 41 44 45 52 53 54 41 54 45 57 2c 20 2a 4c 50 53 ADERSTATEW, *LPS
3a10: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 CARD_READERSTATE
3a20: 57 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f W;..#ifdef UNICO
3a30: 44 45 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 DE..typedef SCAR
3a40: 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20 53 D_READERSTATEW S
3a50: 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 CARD_READERSTATE
3a60: 3b 0d 0a 74 79 70 65 64 65 66 20 50 53 43 41 52 ;..typedef PSCAR
3a70: 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 20 50 D_READERSTATEW P
3a80: 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 SCARD_READERSTAT
3a90: 45 3b 0d 0a 74 79 70 65 64 65 66 20 4c 50 53 43 E;..typedef LPSC
3aa0: 41 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 57 ARD_READERSTATEW
3ab0: 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 LPSCARD_READERS
3ac0: 54 41 54 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74 79 TATE;..#else..ty
3ad0: 70 65 64 65 66 20 53 43 41 52 44 5f 52 45 41 44 pedef SCARD_READ
3ae0: 45 52 53 54 41 54 45 41 20 53 43 41 52 44 5f 52 ERSTATEA SCARD_R
3af0: 45 41 44 45 52 53 54 41 54 45 3b 0d 0a 74 79 70 EADERSTATE;..typ
3b00: 65 64 65 66 20 50 53 43 41 52 44 5f 52 45 41 44 edef PSCARD_READ
3b10: 45 52 53 54 41 54 45 41 20 50 53 43 41 52 44 5f ERSTATEA PSCARD_
3b20: 52 45 41 44 45 52 53 54 41 54 45 3b 0d 0a 74 79 READERSTATE;..ty
3b30: 70 65 64 65 66 20 4c 50 53 43 41 52 44 5f 52 45 pedef LPSCARD_RE
3b40: 41 44 45 52 53 54 41 54 45 41 20 4c 50 53 43 41 ADERSTATEA LPSCA
3b50: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 3b 0d RD_READERSTATE;.
3b60: 0a 23 65 6e 64 69 66 20 2f 2f 20 55 4e 49 43 4f .#endif // UNICO
3b70: 44 45 0d 0a 0d 0a 2f 2f 20 42 61 63 6b 77 61 72 DE....// Backwar
3b80: 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 ds compatibility
3b90: 20 6d 61 63 72 6f 73 0d 0a 23 64 65 66 69 6e 65 macros..#define
3ba0: 20 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 SCARD_READERSTA
3bb0: 54 45 5f 41 20 53 43 41 52 44 5f 52 45 41 44 45 TE_A SCARD_READE
3bc0: 52 53 54 41 54 45 41 0d 0a 23 64 65 66 69 6e 65 RSTATEA..#define
3bd0: 20 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 SCARD_READERSTA
3be0: 54 45 5f 57 20 53 43 41 52 44 5f 52 45 41 44 45 TE_W SCARD_READE
3bf0: 52 53 54 41 54 45 57 0d 0a 23 64 65 66 69 6e 65 RSTATEW..#define
3c00: 20 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 PSCARD_READERST
3c10: 41 54 45 5f 41 20 50 53 43 41 52 44 5f 52 45 41 ATE_A PSCARD_REA
3c20: 44 45 52 53 54 41 54 45 41 0d 0a 23 64 65 66 69 DERSTATEA..#defi
3c30: 6e 65 20 50 53 43 41 52 44 5f 52 45 41 44 45 52 ne PSCARD_READER
3c40: 53 54 41 54 45 5f 57 20 50 53 43 41 52 44 5f 52 STATE_W PSCARD_R
3c50: 45 41 44 45 52 53 54 41 54 45 57 0d 0a 23 64 65 EADERSTATEW..#de
3c60: 66 69 6e 65 20 4c 50 53 43 41 52 44 5f 52 45 41 fine LPSCARD_REA
3c70: 44 45 52 53 54 41 54 45 5f 41 20 4c 50 53 43 41 DERSTATE_A LPSCA
3c80: 52 44 5f 52 45 41 44 45 52 53 54 41 54 45 41 0d RD_READERSTATEA.
3c90: 0a 23 64 65 66 69 6e 65 20 4c 50 53 43 41 52 44 .#define LPSCARD
3ca0: 5f 52 45 41 44 45 52 53 54 41 54 45 5f 57 20 4c _READERSTATE_W L
3cb0: 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 54 41 PSCARD_READERSTA
3cc0: 54 45 57 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 TEW....#define S
3cd0: 43 41 52 44 5f 53 54 41 54 45 5f 55 4e 41 57 41 CARD_STATE_UNAWA
3ce0: 52 45 20 20 20 20 20 30 78 30 30 30 30 30 30 30 RE 0x0000000
3cf0: 30 20 20 2f 2f 20 54 68 65 20 61 70 70 6c 69 63 0 // The applic
3d00: 61 74 69 6f 6e 20 69 73 20 75 6e 61 77 61 72 65 ation is unaware
3d10: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 of the..
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d40: 20 20 20 20 20 2f 2f 20 63 75 72 72 65 6e 74 20 // current
3d50: 73 74 61 74 65 2c 20 61 6e 64 20 77 6f 75 6c 64 state, and would
3d60: 20 6c 69 6b 65 20 74 6f 0d 0a 20 20 20 20 20 20 like to..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d90: 20 20 20 20 20 20 2f 2f 20 6b 6e 6f 77 2e 20 20 // know.
3da0: 54 68 65 20 75 73 65 20 6f 66 20 74 68 69 73 20 The use of this
3db0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 value..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3de0: 20 20 20 2f 2f 20 72 65 73 75 6c 74 73 20 69 6e // results in
3df0: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 72 65 an immediate re
3e00: 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 turn..
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e30: 20 20 2f 2f 20 66 72 6f 6d 20 73 74 61 74 65 20 // from state
3e40: 74 72 61 6e 73 69 74 69 6f 6e 20 6d 6f 6e 69 74 transition monit
3e50: 6f 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 oring..
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e80: 20 20 20 2f 2f 20 73 65 72 76 69 63 65 73 2e 20 // services.
3e90: 20 54 68 69 73 20 69 73 20 72 65 70 72 65 73 65 This is represe
3ea0: 6e 74 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 nted by..
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ed0: 20 20 20 20 20 2f 2f 20 61 6c 6c 20 62 69 74 73 // all bits
3ee0: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 0d 0a 23 set to zero...#
3ef0: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 define SCARD_STA
3f00: 54 45 5f 49 47 4e 4f 52 45 20 20 20 20 20 20 30 TE_IGNORE 0
3f10: 78 30 30 30 30 30 30 30 31 20 20 2f 2f 20 54 68 x00000001 // Th
3f20: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 e application re
3f30: 71 75 65 73 74 65 64 20 74 68 61 74 0d 0a 20 20 quested that..
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 69 // thi
3f70: 73 20 72 65 61 64 65 72 20 62 65 20 69 67 6e 6f s reader be igno
3f80: 72 65 64 2e 20 20 4e 6f 20 6f 74 68 65 72 0d 0a red. No other..
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 62 // b
3fc0: 69 74 73 20 77 69 6c 6c 20 62 65 20 73 65 74 2e its will be set.
3fd0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f ..#define SCARD_
3fe0: 53 54 41 54 45 5f 43 48 41 4e 47 45 44 20 20 20 STATE_CHANGED
3ff0: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2f 0x00000002 //
4000: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 This implies th
4010: 61 74 20 74 68 65 72 65 20 69 73 20 61 0d 0a 20 at there is a..
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 20 20 20 20 20 20 20 20 20
4040: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 // di
4050: 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e fference between
4060: 20 74 68 65 20 73 74 61 74 65 0d 0a 20 20 20 20 the state..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4090: 20 20 20 20 20 20 20 20 2f 2f 20 62 65 6c 69 65 // belie
40a0: 76 65 64 20 62 79 20 74 68 65 20 61 70 70 6c 69 ved by the appli
40b0: 63 61 74 69 6f 6e 2c 20 61 6e 64 0d 0a 20 20 20 cation, and..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
40e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20 // the
40f0: 73 74 61 74 65 20 6b 6e 6f 77 6e 20 62 79 20 74 state known by t
4100: 68 65 20 53 65 72 76 69 63 65 0d 0a 20 20 20 20 he Service..
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4130: 20 20 20 20 20 20 20 20 2f 2f 20 4d 61 6e 61 67 // Manag
4140: 65 72 2e 20 20 57 68 65 6e 20 74 68 69 73 20 62 er. When this b
4150: 69 74 20 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 it is set,..
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4180: 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20 61 // the a
4190: 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 61 pplication may a
41a0: 73 73 75 6d 65 20 61 0d 0a 20 20 20 20 20 20 20 ssume a..
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
41d0: 20 20 20 20 20 2f 2f 20 73 69 67 6e 69 66 69 63 // signific
41e0: 61 6e 74 20 73 74 61 74 65 20 63 68 61 6e 67 65 ant state change
41f0: 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 20 20 has..
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4220: 20 20 2f 2f 20 6f 63 63 75 72 72 65 64 20 6f 6e // occurred on
4230: 20 74 68 69 73 20 72 65 61 64 65 72 2e 0d 0a 23 this reader...#
4240: 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54 41 define SCARD_STA
4250: 54 45 5f 55 4e 4b 4e 4f 57 4e 20 20 20 20 20 30 TE_UNKNOWN 0
4260: 78 30 30 30 30 30 30 30 34 20 20 2f 2f 20 54 68 x00000004 // Th
4270: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 is implies that
4280: 74 68 65 20 67 69 76 65 6e 0d 0a 20 20 20 20 20 the given..
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 20 20 20 20 20 20 20 20
42b0: 20 20 20 20 20 20 20 2f 2f 20 72 65 61 64 65 72 // reader
42c0: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 72 65 63 name is not rec
42d0: 6f 67 6e 69 7a 65 64 20 62 79 0d 0a 20 20 20 20 ognized by..
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 20 20 20 20 20 20 20
4300: 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20 53 // the S
4310: 65 72 76 69 63 65 20 4d 61 6e 61 67 65 72 2e 20 ervice Manager.
4320: 20 49 66 20 74 68 69 73 20 62 69 74 0d 0a 20 20 If this bit..
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 20 20 20 20 20 20
4350: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 // is
4360: 73 65 74 2c 20 74 68 65 6e 20 53 43 41 52 44 5f set, then SCARD_
4370: 53 54 41 54 45 5f 43 48 41 4e 47 45 44 0d 0a 20 STATE_CHANGED..
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
43a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 6e // an
43b0: 64 20 53 43 41 52 44 5f 53 54 41 54 45 5f 49 47 d SCARD_STATE_IG
43c0: 4e 4f 52 45 20 77 69 6c 6c 20 61 6c 73 6f 0d 0a NORE will also..
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 62 // b
4400: 65 20 73 65 74 2e 0d 0a 23 64 65 66 69 6e 65 20 e set...#define
4410: 53 43 41 52 44 5f 53 54 41 54 45 5f 55 4e 41 56 SCARD_STATE_UNAV
4420: 41 49 4c 41 42 4c 45 20 30 78 30 30 30 30 30 30 AILABLE 0x000000
4430: 30 38 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 08 // This impl
4440: 69 65 73 20 74 68 61 74 20 74 68 65 20 61 63 74 ies that the act
4450: 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ual..
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4480: 20 2f 2f 20 73 74 61 74 65 20 6f 66 20 74 68 69 // state of thi
4490: 73 20 72 65 61 64 65 72 20 69 73 20 6e 6f 74 0d s reader is not.
44a0: 0a 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 20 20 20 20 20
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
44d0: 61 76 61 69 6c 61 62 6c 65 2e 20 20 49 66 20 74 available. If t
44e0: 68 69 73 20 62 69 74 20 69 73 20 73 65 74 2c 0d his bit is set,.
44f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
4520: 74 68 65 6e 20 61 6c 6c 20 74 68 65 20 66 6f 6c then all the fol
4530: 6c 6f 77 69 6e 67 20 62 69 74 73 20 61 72 65 0d lowing bits are.
4540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
4570: 63 6c 65 61 72 2e 0d 0a 23 64 65 66 69 6e 65 20 clear...#define
4580: 53 43 41 52 44 5f 53 54 41 54 45 5f 45 4d 50 54 SCARD_STATE_EMPT
4590: 59 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 Y 0x000000
45a0: 31 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 10 // This impl
45b0: 69 65 73 20 74 68 61 74 20 74 68 65 72 65 20 69 ies that there i
45c0: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 s not..
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45f0: 20 20 20 2f 2f 20 63 61 72 64 20 69 6e 20 74 68 // card in th
4600: 65 20 72 65 61 64 65 72 2e 20 20 49 66 20 74 68 e reader. If th
4610: 69 73 20 62 69 74 0d 0a 20 20 20 20 20 20 20 20 is bit..
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4640: 20 20 20 20 2f 2f 20 69 73 20 73 65 74 2c 20 61 // is set, a
4650: 6c 6c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 ll the following
4660: 20 62 69 74 73 0d 0a 20 20 20 20 20 20 20 20 20 bits..
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4690: 20 20 20 2f 2f 20 77 69 6c 6c 20 62 65 20 63 6c // will be cl
46a0: 65 61 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 ear...#define SC
46b0: 41 52 44 5f 53 54 41 54 45 5f 50 52 45 53 45 4e ARD_STATE_PRESEN
46c0: 54 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30 T 0x00000020
46d0: 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 // This implie
46e0: 73 20 74 68 61 74 20 74 68 65 72 65 20 69 73 20 s that there is
46f0: 61 20 63 61 72 64 0d 0a 20 20 20 20 20 20 20 20 a card..
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4720: 20 20 20 20 2f 2f 20 69 6e 20 74 68 65 20 72 65 // in the re
4730: 61 64 65 72 2e 0d 0a 23 64 65 66 69 6e 65 20 53 ader...#define S
4740: 43 41 52 44 5f 53 54 41 54 45 5f 41 54 52 4d 41 CARD_STATE_ATRMA
4750: 54 43 48 20 20 20 20 30 78 30 30 30 30 30 30 34 TCH 0x0000004
4760: 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 0 // This impli
4770: 65 73 20 74 68 61 74 20 74 68 65 72 65 20 69 73 es that there is
4780: 20 61 20 63 61 72 64 0d 0a 20 20 20 20 20 20 20 a card..
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47b0: 20 20 20 20 20 2f 2f 20 69 6e 20 74 68 65 20 72 // in the r
47c0: 65 61 64 65 72 20 77 69 74 68 20 61 6e 20 41 54 eader with an AT
47d0: 52 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 R..
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4800: 2f 20 6d 61 74 63 68 69 6e 67 20 6f 6e 65 20 6f / matching one o
4810: 66 20 74 68 65 20 74 61 72 67 65 74 20 63 61 72 f the target car
4820: 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ds...
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4850: 20 2f 2f 20 49 66 20 74 68 69 73 20 62 69 74 20 // If this bit
4860: 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 is set,..
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4890: 20 20 20 20 20 2f 2f 20 53 43 41 52 44 5f 53 54 // SCARD_ST
48a0: 41 54 45 5f 50 52 45 53 45 4e 54 20 77 69 6c 6c ATE_PRESENT will
48b0: 20 61 6c 73 6f 20 62 65 0d 0a 20 20 20 20 20 20 also be..
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48e0: 20 20 20 20 20 20 2f 2f 20 73 65 74 2e 20 20 54 // set. T
48f0: 68 69 73 20 62 69 74 20 69 73 20 6f 6e 6c 79 20 his bit is only
4900: 72 65 74 75 72 6e 65 64 0d 0a 20 20 20 20 20 20 returned..
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 20 20 20 20 20 20 20 20
4930: 20 20 20 20 20 20 2f 2f 20 6f 6e 20 74 68 65 20 // on the
4940: 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 28 SCardLocateCard(
4950: 29 20 73 65 72 76 69 63 65 2e 0d 0a 23 64 65 66 ) service...#def
4960: 69 6e 65 20 53 43 41 52 44 5f 53 54 41 54 45 5f ine SCARD_STATE_
4970: 45 58 43 4c 55 53 49 56 45 20 20 20 30 78 30 30 EXCLUSIVE 0x00
4980: 30 30 30 30 38 30 20 20 2f 2f 20 54 68 69 73 20 000080 // This
4990: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 implies that the
49a0: 20 63 61 72 64 20 69 6e 20 74 68 65 0d 0a 20 20 card in the..
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 20 20 20 20 20 20
49d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 61 // rea
49e0: 64 65 72 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 der is allocated
49f0: 20 66 6f 72 20 65 78 63 6c 75 73 69 76 65 0d 0a for exclusive..
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 75 // u
4a30: 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 61 70 se by another ap
4a40: 70 6c 69 63 61 74 69 6f 6e 2e 20 20 49 66 0d 0a plication. If..
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 // t
4a80: 68 69 73 20 62 69 74 20 69 73 20 73 65 74 2c 0d his bit is set,.
4a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
4ac0: 53 43 41 52 44 5f 53 54 41 54 45 5f 50 52 45 53 SCARD_STATE_PRES
4ad0: 45 4e 54 20 77 69 6c 6c 20 61 6c 73 6f 20 62 65 ENT will also be
4ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
4b10: 20 73 65 74 2e 0d 0a 23 64 65 66 69 6e 65 20 53 set...#define S
4b20: 43 41 52 44 5f 53 54 41 54 45 5f 49 4e 55 53 45 CARD_STATE_INUSE
4b30: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 31 30 0x0000010
4b40: 30 20 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 0 // This impli
4b50: 65 73 20 74 68 61 74 20 74 68 65 20 63 61 72 64 es that the card
4b60: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 in the..
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b90: 20 20 20 20 20 2f 2f 20 72 65 61 64 65 72 20 69 // reader i
4ba0: 73 20 69 6e 20 75 73 65 20 62 79 20 6f 6e 65 20 s in use by one
4bb0: 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20 20 or more..
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4be0: 20 20 20 20 20 2f 2f 20 6f 74 68 65 72 20 61 70 // other ap
4bf0: 70 6c 69 63 61 74 69 6f 6e 73 2c 20 62 75 74 20 plications, but
4c00: 6d 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 may be..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c30: 20 20 20 20 2f 2f 20 63 6f 6e 6e 65 63 74 65 64 // connected
4c40: 20 74 6f 20 69 6e 20 73 68 61 72 65 64 20 6d 6f to in shared mo
4c50: 64 65 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 de. If..
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c80: 20 20 20 20 20 2f 2f 20 74 68 69 73 20 62 69 74 // this bit
4c90: 20 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 is set,..
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4cc0: 20 20 20 20 20 20 2f 2f 20 53 43 41 52 44 5f 53 // SCARD_S
4cd0: 54 41 54 45 5f 50 52 45 53 45 4e 54 20 77 69 6c TATE_PRESENT wil
4ce0: 6c 20 61 6c 73 6f 20 62 65 0d 0a 20 20 20 20 20 l also be..
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d10: 20 20 20 20 20 20 20 2f 2f 20 73 65 74 2e 0d 0a // set...
4d20: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 53 54 #define SCARD_ST
4d30: 41 54 45 5f 4d 55 54 45 20 20 20 20 20 20 20 20 ATE_MUTE
4d40: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2f 20 54 0x00000200 // T
4d50: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 his implies that
4d60: 20 74 68 65 20 63 61 72 64 20 69 6e 20 74 68 65 the card in the
4d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
4da0: 20 72 65 61 64 65 72 20 69 73 20 75 6e 72 65 73 reader is unres
4db0: 70 6f 6e 73 69 76 65 20 6f 72 20 6e 6f 74 0d 0a ponsive or not..
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 // s
4df0: 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 upported by the
4e00: 72 65 61 64 65 72 20 6f 72 0d 0a 20 20 20 20 20 reader or..
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4e30: 20 20 20 20 20 20 20 2f 2f 20 73 6f 66 74 77 61 // softwa
4e40: 72 65 2e 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 re...#define SCA
4e50: 52 44 5f 53 54 41 54 45 5f 55 4e 50 4f 57 45 52 RD_STATE_UNPOWER
4e60: 45 44 20 20 20 30 78 30 30 30 30 30 34 30 30 20 ED 0x00000400
4e70: 20 2f 2f 20 54 68 69 73 20 69 6d 70 6c 69 65 73 // This implies
4e80: 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 69 that the card i
4e90: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 n the..
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ec0: 20 20 20 2f 2f 20 72 65 61 64 65 72 20 68 61 73 // reader has
4ed0: 20 6e 6f 74 20 62 65 65 6e 20 70 6f 77 65 72 65 not been powere
4ee0: 64 20 75 70 2e 0d 0a 0d 0a 65 78 74 65 72 6e 20 d up.....extern
4ef0: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 WINSCARDAPI LONG
4f00: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c 6f WINAPI..SCardLo
4f10: 63 61 74 65 43 61 72 64 73 41 28 0d 0a 20 20 20 cateCardsA(..
4f20: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
4f30: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
4f40: 20 20 20 20 20 4c 50 43 53 54 52 20 6d 73 7a 43 LPCSTR mszC
4f50: 61 72 64 73 2c 0d 0a 20 4c 50 53 43 41 52 44 5f ards,.. LPSCARD_
4f60: 52 45 41 44 45 52 53 54 41 54 45 41 20 72 67 52 READERSTATEA rgR
4f70: 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 20 eaderStates,..
4f80: 20 20 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 DWORD cRea
4f90: 64 65 72 73 29 3b 0d 0a 65 78 74 65 72 6e 20 57 ders);..extern W
4fa0: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 INSCARDAPI LONG
4fb0: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 4c 6f 63 WINAPI..SCardLoc
4fc0: 61 74 65 43 61 72 64 73 57 28 0d 0a 20 20 20 20 ateCardsW(..
4fd0: 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 SCARDCONTEXT
4fe0: 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 hContext,..
4ff0: 20 20 20 20 4c 50 43 57 53 54 52 20 6d 73 7a 43 LPCWSTR mszC
5000: 61 72 64 73 2c 0d 0a 20 4c 50 53 43 41 52 44 5f ards,.. LPSCARD_
5010: 52 45 41 44 45 52 53 54 41 54 45 57 20 72 67 52 READERSTATEW rgR
5020: 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 20 eaderStates,..
5030: 20 20 20 20 20 20 44 57 4f 52 44 20 63 52 65 61 DWORD cRea
5040: 64 65 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 55 ders);..#ifdef U
5050: 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 20 NICODE..#define
5060: 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 SCardLocateCards
5070: 20 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 SCardLocateCar
5080: 64 73 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 dsW..#else..#def
5090: 69 6e 65 20 53 43 61 72 64 4c 6f 63 61 74 65 43 ine SCardLocateC
50a0: 61 72 64 73 20 20 53 43 61 72 64 4c 6f 63 61 74 ards SCardLocat
50b0: 65 43 61 72 64 73 41 0d 0a 23 65 6e 64 69 66 20 eCardsA..#endif
50c0: 2f 2f 20 21 55 4e 49 43 4f 44 45 0d 0a 0d 0a 23 // !UNICODE....#
50d0: 69 66 20 28 4e 54 44 44 49 5f 56 45 52 53 49 4f if (NTDDI_VERSIO
50e0: 4e 20 3e 3d 20 4e 54 44 44 49 5f 57 49 4e 58 50 N >= NTDDI_WINXP
50f0: 29 0d 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 )..typedef struc
5100: 74 20 5f 53 43 41 52 44 5f 41 54 52 4d 41 53 4b t _SCARD_ATRMASK
5110: 20 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 {.. DWORD
5120: 20 20 20 20 63 62 41 74 72 3b 20 20 20 20 20 20 cbAtr;
5130: 20 20 20 20 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 // Number of
5140: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 41 54 bytes in the AT
5150: 52 20 61 6e 64 20 74 68 65 20 6d 61 73 6b 2e 0d R and the mask..
5160: 0a 20 20 20 20 42 59 54 45 20 20 20 20 20 20 20 . BYTE
5170: 20 72 67 62 41 74 72 5b 33 36 5d 3b 20 20 20 20 rgbAtr[36];
5180: 20 2f 2f 20 41 74 72 20 6f 66 20 63 61 72 64 20 // Atr of card
5190: 28 65 78 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 (extra alignment
51a0: 20 62 79 74 65 73 29 0d 0a 20 20 20 20 42 59 54 bytes).. BYT
51b0: 45 20 20 20 20 20 20 20 20 72 67 62 4d 61 73 6b E rgbMask
51c0: 5b 33 36 5d 3b 20 20 20 20 2f 2f 20 4d 61 73 6b [36]; // Mask
51d0: 20 66 6f 72 20 74 68 65 20 41 74 72 20 28 65 78 for the Atr (ex
51e0: 74 72 61 20 61 6c 69 67 6e 6d 65 6e 74 20 62 79 tra alignment by
51f0: 74 65 73 29 0d 0a 7d 20 53 43 41 52 44 5f 41 54 tes)..} SCARD_AT
5200: 52 4d 41 53 4b 2c 20 2a 50 53 43 41 52 44 5f 41 RMASK, *PSCARD_A
5210: 54 52 4d 41 53 4b 2c 20 2a 4c 50 53 43 41 52 44 TRMASK, *LPSCARD
5220: 5f 41 54 52 4d 41 53 4b 3b 0d 0a 0d 0a 0d 0a 65 _ATRMASK;......e
5230: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
5240: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
5250: 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 CardLocateCardsB
5260: 79 41 54 52 41 28 0d 0a 20 20 20 20 20 20 20 20 yATRA(..
5270: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f SCARDCONTEXT hCo
5280: 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 ntext,..
5290: 4c 50 53 43 41 52 44 5f 41 54 52 4d 41 53 4b 20 LPSCARD_ATRMASK
52a0: 72 67 41 74 72 4d 61 73 6b 73 2c 0d 0a 20 20 20 rgAtrMasks,..
52b0: 20 20 20 20 20 44 57 4f 52 44 20 63 41 74 72 73 DWORD cAtrs
52c0: 2c 0d 0a 20 4c 50 53 43 41 52 44 5f 52 45 41 44 ,.. LPSCARD_READ
52d0: 45 52 53 54 41 54 45 41 20 72 67 52 65 61 64 65 ERSTATEA rgReade
52e0: 72 53 74 61 74 65 73 2c 0d 0a 20 20 20 20 20 20 rStates,..
52f0: 20 20 44 57 4f 52 44 20 63 52 65 61 64 65 72 73 DWORD cReaders
5300: 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 );..extern WINSC
5310: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
5320: 50 49 0d 0a 53 43 61 72 64 4c 6f 63 61 74 65 43 PI..SCardLocateC
5330: 61 72 64 73 42 79 41 54 52 57 28 0d 0a 20 20 20 ardsByATRW(..
5340: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
5350: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
5360: 20 20 20 20 20 4c 50 53 43 41 52 44 5f 41 54 52 LPSCARD_ATR
5370: 4d 41 53 4b 20 72 67 41 74 72 4d 61 73 6b 73 2c MASK rgAtrMasks,
5380: 0d 0a 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 .. DWORD
5390: 63 41 74 72 73 2c 0d 0a 20 4c 50 53 43 41 52 44 cAtrs,.. LPSCARD
53a0: 5f 52 45 41 44 45 52 53 54 41 54 45 57 20 72 67 _READERSTATEW rg
53b0: 52 65 61 64 65 72 53 74 61 74 65 73 2c 0d 0a 20 ReaderStates,..
53c0: 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 52 65 DWORD cRe
53d0: 61 64 65 72 73 29 3b 0d 0a 23 69 66 64 65 66 20 aders);..#ifdef
53e0: 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 6e 65 UNICODE..#define
53f0: 20 53 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 SCardLocateCard
5400: 73 42 79 41 54 52 20 20 53 43 61 72 64 4c 6f 63 sByATR SCardLoc
5410: 61 74 65 43 61 72 64 73 42 79 41 54 52 57 0d 0a ateCardsByATRW..
5420: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 #else..#define S
5430: 43 61 72 64 4c 6f 63 61 74 65 43 61 72 64 73 42 CardLocateCardsB
5440: 79 41 54 52 20 20 53 43 61 72 64 4c 6f 63 61 74 yATR SCardLocat
5450: 65 43 61 72 64 73 42 79 41 54 52 41 0d 0a 23 65 eCardsByATRA..#e
5460: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 ndif // !UNICODE
5470: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 28 4e 54 44 ..#endif // (NTD
5480: 44 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 DI_VERSION >= NT
5490: 44 44 49 5f 57 49 4e 58 50 29 0d 0a 0d 0a 65 78 DDI_WINXP)....ex
54a0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
54b0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
54c0: 61 72 64 47 65 74 53 74 61 74 75 73 43 68 61 6e ardGetStatusChan
54d0: 67 65 41 28 0d 0a 20 20 20 20 20 20 20 20 53 43 geA(.. SC
54e0: 41 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 ARDCONTEXT hCont
54f0: 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 ext,.. DW
5500: 4f 52 44 20 64 77 54 69 6d 65 6f 75 74 2c 0d 0a ORD dwTimeout,..
5510: 20 4c 50 53 43 41 52 44 5f 52 45 41 44 45 52 53 LPSCARD_READERS
5520: 54 41 54 45 41 20 72 67 52 65 61 64 65 72 53 74 TATEA rgReaderSt
5530: 61 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 44 ates,.. D
5540: 57 4f 52 44 20 63 52 65 61 64 65 72 73 29 3b 0d WORD cReaders);.
5550: 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 .extern WINSCARD
5560: 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d API LONG WINAPI.
5570: 0a 53 43 61 72 64 47 65 74 53 74 61 74 75 73 43 .SCardGetStatusC
5580: 68 61 6e 67 65 57 28 0d 0a 20 20 20 20 20 20 20 hangeW(..
5590: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 SCARDCONTEXT hC
55a0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 ontext,..
55b0: 20 44 57 4f 52 44 20 64 77 54 69 6d 65 6f 75 74 DWORD dwTimeout
55c0: 2c 0d 0a 20 4c 50 53 43 41 52 44 5f 52 45 41 44 ,.. LPSCARD_READ
55d0: 45 52 53 54 41 54 45 57 20 72 67 52 65 61 64 65 ERSTATEW rgReade
55e0: 72 53 74 61 74 65 73 2c 0d 0a 20 20 20 20 20 20 rStates,..
55f0: 20 20 44 57 4f 52 44 20 63 52 65 61 64 65 72 73 DWORD cReaders
5600: 29 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f );..#ifdef UNICO
5610: 44 45 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 DE..#define SCar
5620: 64 47 65 74 53 74 61 74 75 73 43 68 61 6e 67 65 dGetStatusChange
5630: 20 20 53 43 61 72 64 47 65 74 53 74 61 74 75 73 SCardGetStatus
5640: 43 68 61 6e 67 65 57 0d 0a 23 65 6c 73 65 0d 0a ChangeW..#else..
5650: 23 64 65 66 69 6e 65 20 53 43 61 72 64 47 65 74 #define SCardGet
5660: 53 74 61 74 75 73 43 68 61 6e 67 65 20 20 53 43 StatusChange SC
5670: 61 72 64 47 65 74 53 74 61 74 75 73 43 68 61 6e ardGetStatusChan
5680: 67 65 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 geA..#endif // !
5690: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 UNICODE....exter
56a0: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
56b0: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
56c0: 43 61 6e 63 65 6c 28 0d 0a 20 20 20 20 20 20 20 Cancel(..
56d0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 68 43 SCARDCONTEXT hC
56e0: 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a 0d 0a 2f 2f ontext);......//
56f0: 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ..//////////////
5700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5740: 2f 2f 0d 0a 2f 2f 0d 0a 2f 2f 20 20 43 61 72 64 //..//..// Card
5750: 2f 52 65 61 64 65 72 20 43 6f 6d 6d 75 6e 69 63 /Reader Communic
5760: 61 74 69 6f 6e 20 53 65 72 76 69 63 65 73 0d 0a ation Services..
5770: 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 20 //..// The
5780: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69 63 following servic
5790: 65 73 20 70 72 6f 76 69 64 65 20 6d 65 61 6e 73 es provide means
57a0: 20 66 6f 72 20 63 6f 6d 6d 75 6e 69 63 61 74 69 for communicati
57b0: 6f 6e 20 77 69 74 68 20 74 68 65 20 63 61 72 64 on with the card
57c0: 2e 0d 0a 2f 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 ...//....#define
57d0: 20 53 43 41 52 44 5f 53 48 41 52 45 5f 45 58 43 SCARD_SHARE_EXC
57e0: 4c 55 53 49 56 45 20 31 20 2f 2f 20 54 68 69 73 LUSIVE 1 // This
57f0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 application is
5800: 6e 6f 74 20 77 69 6c 6c 69 6e 67 20 74 6f 20 73 not willing to s
5810: 68 61 72 65 20 74 68 69 73 0d 0a 20 20 20 20 20 hare this..
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5830: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61 // ca
5840: 72 64 20 77 69 74 68 20 6f 74 68 65 72 20 61 70 rd with other ap
5850: 70 6c 69 63 61 74 69 6f 6e 73 2e 0d 0a 23 64 65 plications...#de
5860: 66 69 6e 65 20 53 43 41 52 44 5f 53 48 41 52 45 fine SCARD_SHARE
5870: 5f 53 48 41 52 45 44 20 20 20 20 32 20 2f 2f 20 _SHARED 2 //
5880: 54 68 69 73 20 61 70 70 6c 69 63 61 74 69 6f 6e This application
5890: 20 69 73 20 77 69 6c 6c 69 6e 67 20 74 6f 20 73 is willing to s
58a0: 68 61 72 65 20 74 68 69 73 0d 0a 20 20 20 20 20 hare this..
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
58c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61 // ca
58d0: 72 64 20 77 69 74 68 20 6f 74 68 65 72 20 61 70 rd with other ap
58e0: 70 6c 69 63 61 74 69 6f 6e 73 2e 0d 0a 23 64 65 plications...#de
58f0: 66 69 6e 65 20 53 43 41 52 44 5f 53 48 41 52 45 fine SCARD_SHARE
5900: 5f 44 49 52 45 43 54 20 20 20 20 33 20 2f 2f 20 _DIRECT 3 //
5910: 54 68 69 73 20 61 70 70 6c 69 63 61 74 69 6f 6e This application
5920: 20 64 65 6d 61 6e 64 73 20 64 69 72 65 63 74 20 demands direct
5930: 63 6f 6e 74 72 6f 6c 20 6f 66 0d 0a 20 20 20 20 control of..
5940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 // t
5960: 68 65 20 72 65 61 64 65 72 2c 20 73 6f 20 69 74 he reader, so it
5970: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c is not availabl
5980: 65 20 74 6f 20 6f 74 68 65 72 0d 0a 20 20 20 20 e to other..
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 61 // a
59b0: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0d 0a 0d 0a pplications.....
59c0: 23 64 65 66 69 6e 65 20 53 43 41 52 44 5f 4c 45 #define SCARD_LE
59d0: 41 56 45 5f 43 41 52 44 20 20 20 20 20 20 30 20 AVE_CARD 0
59e0: 2f 2f 20 44 6f 6e 27 74 20 64 6f 20 61 6e 79 74 // Don't do anyt
59f0: 68 69 6e 67 20 73 70 65 63 69 61 6c 20 6f 6e 20 hing special on
5a00: 63 6c 6f 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 close..#define S
5a10: 43 41 52 44 5f 52 45 53 45 54 5f 43 41 52 44 20 CARD_RESET_CARD
5a20: 20 20 20 20 20 31 20 2f 2f 20 52 65 73 65 74 20 1 // Reset
5a30: 74 68 65 20 63 61 72 64 20 6f 6e 20 63 6c 6f 73 the card on clos
5a40: 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 44 e..#define SCARD
5a50: 5f 55 4e 50 4f 57 45 52 5f 43 41 52 44 20 20 20 _UNPOWER_CARD
5a60: 20 32 20 2f 2f 20 50 6f 77 65 72 20 64 6f 77 6e 2 // Power down
5a70: 20 74 68 65 20 63 61 72 64 20 6f 6e 20 63 6c 6f the card on clo
5a80: 73 65 0d 0a 23 64 65 66 69 6e 65 20 53 43 41 52 se..#define SCAR
5a90: 44 5f 45 4a 45 43 54 5f 43 41 52 44 20 20 20 20 D_EJECT_CARD
5aa0: 20 20 33 20 2f 2f 20 45 6a 65 63 74 20 74 68 65 3 // Eject the
5ab0: 20 63 61 72 64 20 6f 6e 20 63 6c 6f 73 65 0d 0a card on close..
5ac0: 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 52 ..extern WINSCAR
5ad0: 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 DAPI LONG WINAPI
5ae0: 0d 0a 53 43 61 72 64 43 6f 6e 6e 65 63 74 41 28 ..SCardConnectA(
5af0: 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52 44 43 .. SCARDC
5b00: 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 78 74 2c ONTEXT hContext,
5b10: 0d 0a 20 20 20 20 20 20 20 20 4c 50 43 53 54 52 .. LPCSTR
5b20: 20 73 7a 52 65 61 64 65 72 2c 0d 0a 20 20 20 20 szReader,..
5b30: 20 20 20 20 44 57 4f 52 44 20 64 77 53 68 61 72 DWORD dwShar
5b40: 65 4d 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20 20 eMode,..
5b50: 44 57 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 DWORD dwPreferre
5b60: 64 50 72 6f 74 6f 63 6f 6c 73 2c 0d 0a 20 20 20 dProtocols,..
5b70: 20 20 20 20 4c 50 53 43 41 52 44 48 41 4e 44 4c LPSCARDHANDL
5b80: 45 20 70 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 E phCard,..
5b90: 20 20 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 LPDWORD pdwAct
5ba0: 69 76 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 65 iveProtocol);..e
5bb0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
5bc0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
5bd0: 43 61 72 64 43 6f 6e 6e 65 63 74 57 28 0d 0a 20 CardConnectW(..
5be0: 20 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 SCARDCONT
5bf0: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 EXT hContext,..
5c00: 20 20 20 20 20 20 20 4c 50 43 57 53 54 52 20 73 LPCWSTR s
5c10: 7a 52 65 61 64 65 72 2c 0d 0a 20 20 20 20 20 20 zReader,..
5c20: 20 20 44 57 4f 52 44 20 64 77 53 68 61 72 65 4d DWORD dwShareM
5c30: 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 57 ode,.. DW
5c40: 4f 52 44 20 64 77 50 72 65 66 65 72 72 65 64 50 ORD dwPreferredP
5c50: 72 6f 74 6f 63 6f 6c 73 2c 0d 0a 20 20 20 20 20 rotocols,..
5c60: 20 20 4c 50 53 43 41 52 44 48 41 4e 44 4c 45 20 LPSCARDHANDLE
5c70: 70 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 phCard,..
5c80: 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 69 76 LPDWORD pdwActiv
5c90: 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 23 69 66 eProtocol);..#if
5ca0: 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 def UNICODE..#de
5cb0: 66 69 6e 65 20 53 43 61 72 64 43 6f 6e 6e 65 63 fine SCardConnec
5cc0: 74 20 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 57 t SCardConnectW
5cd0: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 ..#else..#define
5ce0: 20 53 43 61 72 64 43 6f 6e 6e 65 63 74 20 20 53 SCardConnect S
5cf0: 43 61 72 64 43 6f 6e 6e 65 63 74 41 0d 0a 23 65 CardConnectA..#e
5d00: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 ndif // !UNICODE
5d10: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 ....extern WINSC
5d20: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
5d30: 50 49 0d 0a 53 43 61 72 64 52 65 63 6f 6e 6e 65 PI..SCardReconne
5d40: 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 ct(.. S
5d50: 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 CARDHANDLE hCard
5d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 57 4f ,.. DWO
5d70: 52 44 20 64 77 53 68 61 72 65 4d 6f 64 65 2c 0d RD dwShareMode,.
5d80: 0a 20 20 20 20 20 20 20 20 20 20 44 57 4f 52 44 . DWORD
5d90: 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 dwPreferredProt
5da0: 6f 63 6f 6c 73 2c 0d 0a 20 20 20 20 20 20 20 20 ocols,..
5db0: 20 20 44 57 4f 52 44 20 64 77 49 6e 69 74 69 61 DWORD dwInitia
5dc0: 6c 69 7a 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 lization,..
5dd0: 4c 50 44 57 4f 52 44 20 70 64 77 41 63 74 69 76 LPDWORD pdwActiv
5de0: 65 50 72 6f 74 6f 63 6f 6c 29 3b 0d 0a 0d 0a 65 eProtocol);....e
5df0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
5e00: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
5e10: 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28 0d CardDisconnect(.
5e20: 0a 20 20 20 20 20 20 20 20 53 43 41 52 44 48 41 . SCARDHA
5e30: 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 NDLE hCard,..
5e40: 20 20 20 20 20 44 57 4f 52 44 20 64 77 44 69 73 DWORD dwDis
5e50: 70 6f 73 69 74 69 6f 6e 29 3b 0d 0a 0d 0a 65 78 position);....ex
5e60: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
5e70: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
5e80: 61 72 64 42 65 67 69 6e 54 72 61 6e 73 61 63 74 ardBeginTransact
5e90: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 43 ion(.. SC
5ea0: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 29 ARDHANDLE hCard)
5eb0: 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 ;....extern WINS
5ec0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e CARDAPI LONG WIN
5ed0: 41 50 49 0d 0a 53 43 61 72 64 45 6e 64 54 72 61 API..SCardEndTra
5ee0: 6e 73 61 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 nsaction(..
5ef0: 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 SCARDHANDLE h
5f00: 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 20 44 Card,.. D
5f10: 57 4f 52 44 20 64 77 44 69 73 70 6f 73 69 74 69 WORD dwDispositi
5f20: 6f 6e 29 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 on);....extern W
5f30: 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 INSCARDAPI LONG
5f40: 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 43 61 6e WINAPI..SCardCan
5f50: 63 65 6c 54 72 61 6e 73 61 63 74 69 6f 6e 28 0d celTransaction(.
5f60: 0a 20 20 20 20 20 20 20 20 53 43 41 52 44 48 41 . SCARDHA
5f70: 4e 44 4c 45 20 68 43 61 72 64 29 3b 0d 0a 2f 2f NDLE hCard);..//
5f80: 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20 20 54 68 ..// NOTE: Th
5f90: 69 73 20 63 61 6c 6c 20 63 6f 72 72 65 73 70 6f is call correspo
5fa0: 6e 64 73 20 74 6f 20 74 68 65 20 50 43 2f 53 43 nds to the PC/SC
5fb0: 20 53 43 41 52 44 43 4f 4d 4d 3a 3a 43 61 6e 63 SCARDCOMM::Canc
5fc0: 65 6c 20 72 6f 75 74 69 6e 65 2c 0d 0a 2f 2f 20 el routine,..//
5fd0: 20 20 20 20 20 20 20 20 20 74 65 72 6d 69 6e 61 termina
5fe0: 74 69 6e 67 20 61 20 62 6c 6f 63 6b 65 64 20 53 ting a blocked S
5ff0: 43 61 72 64 42 65 67 69 6e 54 72 61 6e 73 61 63 CardBeginTransac
6000: 74 69 6f 6e 20 73 65 72 76 69 63 65 2e 0d 0a 2f tion service.../
6010: 2f 0d 0a 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 /......extern WI
6020: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
6030: 49 4e 41 50 49 0d 0a 53 43 61 72 64 53 74 61 74 INAPI..SCardStat
6040: 65 28 0d 0a 20 20 20 20 20 20 20 20 53 43 41 52 e(.. SCAR
6050: 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a DHANDLE hCard,..
6060: 20 20 20 20 20 20 20 4c 50 44 57 4f 52 44 20 70 LPDWORD p
6070: 64 77 53 74 61 74 65 2c 0d 0a 20 20 20 20 20 20 dwState,..
6080: 20 4c 50 44 57 4f 52 44 20 70 64 77 50 72 6f 74 LPDWORD pdwProt
6090: 6f 63 6f 6c 2c 0d 0a 20 20 20 20 20 20 20 4c 50 ocol,.. LP
60a0: 42 59 54 45 20 70 62 41 74 72 2c 0d 0a 20 4c 50 BYTE pbAtr,.. LP
60b0: 44 57 4f 52 44 20 70 63 62 41 74 72 4c 65 6e 29 DWORD pcbAtrLen)
60c0: 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 ;..//..// NOTE:
60d0: 20 20 20 53 43 61 72 64 53 74 61 74 65 20 69 73 SCardState is
60e0: 20 61 6e 20 6f 62 73 6f 6c 65 74 65 20 72 6f 75 an obsolete rou
60f0: 74 69 6e 65 2e 20 20 50 43 2f 53 43 20 68 61 73 tine. PC/SC has
6100: 20 72 65 70 6c 61 63 65 64 20 69 74 20 77 69 74 replaced it wit
6110: 68 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 53 h..// S
6120: 43 61 72 64 53 74 61 74 75 73 2e 0d 0a 2f 2f 0d CardStatus...//.
6130: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 ...extern WINSCA
6140: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 RDAPI LONG WINAP
6150: 49 0d 0a 53 43 61 72 64 53 74 61 74 75 73 41 28 I..SCardStatusA(
6160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 .. SC
6170: 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 2c ARDHANDLE hCard,
6180: 0d 0a 20 20 20 20 20 20 4c 50 53 54 52 20 6d 73 .. LPSTR ms
6190: 7a 52 65 61 64 65 72 4e 61 6d 65 73 2c 0d 0a 20 zReaderNames,..
61a0: 4c 50 44 57 4f 52 44 20 70 63 63 68 52 65 61 64 LPDWORD pcchRead
61b0: 65 72 4c 65 6e 2c 0d 0a 20 20 20 20 20 20 20 4c erLen,.. L
61c0: 50 44 57 4f 52 44 20 70 64 77 53 74 61 74 65 2c PDWORD pdwState,
61d0: 0d 0a 20 20 20 20 20 20 20 4c 50 44 57 4f 52 44 .. LPDWORD
61e0: 20 70 64 77 50 72 6f 74 6f 63 6f 6c 2c 0d 0a 20 pdwProtocol,..
61f0: 20 20 20 20 4c 50 42 59 54 45 20 70 62 41 74 72 LPBYTE pbAtr
6200: 2c 0d 0a 20 4c 50 44 57 4f 52 44 20 70 63 62 41 ,.. LPDWORD pcbA
6210: 74 72 4c 65 6e 29 3b 0d 0a 65 78 74 65 72 6e 20 trLen);..extern
6220: 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 WINSCARDAPI LONG
6230: 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 53 74 WINAPI..SCardSt
6240: 61 74 75 73 57 28 0d 0a 20 20 20 20 20 20 20 20 atusW(..
6250: 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 SCARDHANDLE
6260: 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 4c 50 hCard,.. LP
6270: 57 53 54 52 20 6d 73 7a 52 65 61 64 65 72 4e 61 WSTR mszReaderNa
6280: 6d 65 73 2c 0d 0a 20 4c 50 44 57 4f 52 44 20 70 mes,.. LPDWORD p
6290: 63 63 68 52 65 61 64 65 72 4c 65 6e 2c 0d 0a 20 cchReaderLen,..
62a0: 20 20 20 20 20 20 4c 50 44 57 4f 52 44 20 70 64 LPDWORD pd
62b0: 77 53 74 61 74 65 2c 0d 0a 20 20 20 20 20 20 20 wState,..
62c0: 4c 50 44 57 4f 52 44 20 70 64 77 50 72 6f 74 6f LPDWORD pdwProto
62d0: 63 6f 6c 2c 0d 0a 20 20 20 20 20 4c 50 42 59 54 col,.. LPBYT
62e0: 45 20 70 62 41 74 72 2c 0d 0a 20 4c 50 44 57 4f E pbAtr,.. LPDWO
62f0: 52 44 20 70 63 62 41 74 72 4c 65 6e 29 3b 0d 0a RD pcbAtrLen);..
6300: 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a #ifdef UNICODE..
6310: 23 64 65 66 69 6e 65 20 53 43 61 72 64 53 74 61 #define SCardSta
6320: 74 75 73 20 20 53 43 61 72 64 53 74 61 74 75 73 tus SCardStatus
6330: 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e W..#else..#defin
6340: 65 20 53 43 61 72 64 53 74 61 74 75 73 20 20 53 e SCardStatus S
6350: 43 61 72 64 53 74 61 74 75 73 41 0d 0a 23 65 6e CardStatusA..#en
6360: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d dif // !UNICODE.
6370: 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 41 ...extern WINSCA
6380: 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 50 RDAPI LONG WINAP
6390: 49 0d 0a 53 43 61 72 64 54 72 61 6e 73 6d 69 74 I..SCardTransmit
63a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 (.. S
63b0: 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 72 64 CARDHANDLE hCard
63c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c ,.. L
63d0: 50 43 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 PCSCARD_IO_REQUE
63e0: 53 54 20 70 69 6f 53 65 6e 64 50 63 69 2c 0d 0a ST pioSendPci,..
63f0: 20 20 20 20 20 4c 50 43 42 59 54 45 20 70 62 53 LPCBYTE pbS
6400: 65 6e 64 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 endBuffer,..
6410: 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 62 DWORD cb
6420: 53 65 6e 64 4c 65 6e 67 74 68 2c 0d 0a 20 4c 50 SendLength,.. LP
6430: 53 43 41 52 44 5f 49 4f 5f 52 45 51 55 45 53 54 SCARD_IO_REQUEST
6440: 20 70 69 6f 52 65 63 76 50 63 69 2c 0d 0a 20 20 pioRecvPci,..
6450: 20 20 20 4c 50 42 59 54 45 20 70 62 52 65 63 76 LPBYTE pbRecv
6460: 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 4c 50 Buffer,.. LP
6470: 44 57 4f 52 44 20 70 63 62 52 65 63 76 4c 65 6e DWORD pcbRecvLen
6480: 67 74 68 29 3b 0d 0a 0d 0a 23 69 66 20 28 4e 54 gth);....#if (NT
6490: 44 44 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e DDI_VERSION >= N
64a0: 54 44 44 49 5f 56 49 53 54 41 29 0d 0a 65 78 74 TDDI_VISTA)..ext
64b0: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
64c0: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 LONG WINAPI..SCa
64d0: 72 64 47 65 74 54 72 61 6e 73 6d 69 74 43 6f 75 rdGetTransmitCou
64e0: 6e 74 28 0d 0a 20 20 20 20 20 53 43 41 52 44 48 nt(.. SCARDH
64f0: 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 ANDLE hCard,..
6500: 20 20 20 4c 50 44 57 4f 52 44 20 70 63 54 72 61 LPDWORD pcTra
6510: 6e 73 6d 69 74 43 6f 75 6e 74 29 3b 0d 0a 23 65 nsmitCount);..#e
6520: 6e 64 69 66 20 2f 2f 20 28 4e 54 44 44 49 5f 56 ndif // (NTDDI_V
6530: 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 5f ERSION >= NTDDI_
6540: 56 49 53 54 41 29 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f VISTA)....//..//
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
65a0: 2f 2f 0d 0a 2f 2f 20 20 52 65 61 64 65 72 20 43 //..// Reader C
65b0: 6f 6e 74 72 6f 6c 20 52 6f 75 74 69 6e 65 73 0d ontrol Routines.
65c0: 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 65 .//..// The
65d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 72 76 69 following servi
65e0: 63 65 73 20 70 72 6f 76 69 64 65 20 66 6f 72 20 ces provide for
65f0: 64 69 72 65 63 74 2c 20 6c 6f 77 2d 6c 65 76 65 direct, low-leve
6600: 6c 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 20 6f l manipulation o
6610: 66 20 74 68 65 0d 0a 2f 2f 20 20 20 20 20 20 72 f the..// r
6620: 65 61 64 65 72 20 62 79 20 74 68 65 20 63 61 6c eader by the cal
6630: 6c 69 6e 67 20 61 70 70 6c 69 63 61 74 69 6f 6e ling application
6640: 20 61 6c 6c 6f 77 69 6e 67 20 69 74 20 63 6f 6e allowing it con
6650: 74 72 6f 6c 20 6f 76 65 72 20 74 68 65 0d 0a 2f trol over the../
6660: 2f 20 20 20 20 20 20 61 74 74 72 69 62 75 74 65 / attribute
6670: 73 20 6f 66 20 74 68 65 20 63 6f 6d 6d 75 6e 69 s of the communi
6680: 63 61 74 69 6f 6e 73 20 77 69 74 68 20 74 68 65 cations with the
6690: 20 63 61 72 64 2e 0d 0a 2f 2f 0d 0a 0d 0a 65 78 card...//....ex
66a0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
66b0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
66c0: 61 72 64 43 6f 6e 74 72 6f 6c 28 0d 0a 20 20 20 ardControl(..
66d0: 20 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 SCARDHANDLE
66e0: 20 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 20 20 hCard,..
66f0: 20 44 57 4f 52 44 20 64 77 43 6f 6e 74 72 6f 6c DWORD dwControl
6700: 43 6f 64 65 2c 0d 0a 20 20 20 20 20 4c 50 43 56 Code,.. LPCV
6710: 4f 49 44 20 6c 70 49 6e 42 75 66 66 65 72 2c 0d OID lpInBuffer,.
6720: 0a 20 20 20 20 20 20 20 20 44 57 4f 52 44 20 63 . DWORD c
6730: 62 49 6e 42 75 66 66 65 72 53 69 7a 65 2c 0d 0a bInBufferSize,..
6740: 20 20 20 20 20 4c 50 56 4f 49 44 20 6c 70 4f 75 LPVOID lpOu
6750: 74 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 tBuffer,..
6760: 20 20 44 57 4f 52 44 20 63 62 4f 75 74 42 75 66 DWORD cbOutBuf
6770: 66 65 72 53 69 7a 65 2c 0d 0a 20 20 20 20 20 20 ferSize,..
6780: 20 4c 50 44 57 4f 52 44 20 6c 70 42 79 74 65 73 LPDWORD lpBytes
6790: 52 65 74 75 72 6e 65 64 29 3b 0d 0a 0d 0a 65 78 Returned);....ex
67a0: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
67b0: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 LONG WINAPI..SC
67c0: 61 72 64 47 65 74 41 74 74 72 69 62 28 0d 0a 20 ardGetAttrib(..
67d0: 20 20 20 20 20 20 20 53 43 41 52 44 48 41 4e 44 SCARDHAND
67e0: 4c 45 20 68 43 61 72 64 2c 0d 0a 20 20 20 20 20 LE hCard,..
67f0: 20 20 20 44 57 4f 52 44 20 64 77 41 74 74 72 49 DWORD dwAttrI
6800: 64 2c 0d 0a 20 20 20 20 20 4c 50 42 59 54 45 20 d,.. LPBYTE
6810: 70 62 41 74 74 72 2c 0d 0a 20 4c 50 44 57 4f 52 pbAttr,.. LPDWOR
6820: 44 20 70 63 62 41 74 74 72 4c 65 6e 29 3b 0d 0a D pcbAttrLen);..
6830: 2f 2f 0d 0a 2f 2f 20 4e 4f 54 45 3a 20 20 20 20 //..// NOTE:
6840: 54 68 65 20 72 6f 75 74 69 6e 65 20 53 43 61 72 The routine SCar
6850: 64 47 65 74 41 74 74 72 69 62 27 73 20 6e 61 6d dGetAttrib's nam
6860: 65 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 e differs from t
6870: 68 65 20 50 43 2f 53 43 20 64 65 66 69 6e 69 74 he PC/SC definit
6880: 69 6f 6e 2e 0d 0a 2f 2f 20 20 20 20 20 20 20 20 ion...//
6890: 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65 3a 0d It should be:.
68a0: 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 .//..//
68b0: 20 20 20 20 20 65 78 74 65 72 6e 20 57 49 4e 53 extern WINS
68c0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e CARDAPI LONG WIN
68d0: 41 50 49 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 API..//
68e0: 20 20 20 20 20 53 43 61 72 64 47 65 74 52 65 61 SCardGetRea
68f0: 64 65 72 43 61 70 61 62 69 6c 69 74 69 65 73 28 derCapabilities(
6900: 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 20 20 ..//
6910: 20 20 20 20 20 20 20 20 20 20 53 43 41 52 44 48 SCARDH
6920: 41 4e 44 4c 45 20 68 43 61 72 64 2c 0d 0a 2f 2f ANDLE hCard,..//
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6940: 20 20 20 20 20 20 44 57 4f 52 44 20 64 77 54 61 DWORD dwTa
6950: 67 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 20 g,..//
6960: 20 20 20 20 20 20 20 20 20 20 20 4c 50 42 59 54 LPBYT
6970: 45 20 70 62 41 74 74 72 2c 0d 0a 2f 2f 20 20 20 E pbAttr,..//
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o
6990: 75 74 20 4c 50 44 57 4f 52 44 20 70 63 62 41 74 ut LPDWORD pcbAt
69a0: 74 72 4c 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 trLen);..//..//
69b0: 20 20 20 20 20 20 20 20 20 48 65 72 65 27 73 20 Here's
69c0: 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64 20 4d 41 a work-around MA
69d0: 43 52 4f 3a 0d 0a 23 64 65 66 69 6e 65 20 53 43 CRO:..#define SC
69e0: 61 72 64 47 65 74 52 65 61 64 65 72 43 61 70 61 ardGetReaderCapa
69f0: 62 69 6c 69 74 69 65 73 20 53 43 61 72 64 47 65 bilities SCardGe
6a00: 74 41 74 74 72 69 62 0d 0a 0d 0a 65 78 74 65 72 tAttrib....exter
6a10: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
6a20: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
6a30: 53 65 74 41 74 74 72 69 62 28 0d 0a 20 20 20 20 SetAttrib(..
6a40: 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 43 61 SCARDHANDLE hCa
6a50: 72 64 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 rd,.. DWORD
6a60: 64 77 41 74 74 72 49 64 2c 0d 0a 20 20 20 20 20 dwAttrId,..
6a70: 4c 50 43 42 59 54 45 20 70 62 41 74 74 72 2c 0d LPCBYTE pbAttr,.
6a80: 0a 20 20 20 20 20 44 57 4f 52 44 20 63 62 41 74 . DWORD cbAt
6a90: 74 72 4c 65 6e 29 3b 0d 0a 2f 2f 0d 0a 2f 2f 20 trLen);..//..//
6aa0: 4e 4f 54 45 3a 20 20 20 20 54 68 65 20 72 6f 75 NOTE: The rou
6ab0: 74 69 6e 65 20 53 43 61 72 64 53 65 74 41 74 74 tine SCardSetAtt
6ac0: 72 69 62 27 73 20 6e 61 6d 65 20 64 69 66 66 65 rib's name diffe
6ad0: 72 73 20 66 72 6f 6d 20 74 68 65 20 50 43 2f 53 rs from the PC/S
6ae0: 43 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0d 0a 2f C definition.../
6af0: 2f 20 20 20 20 20 20 20 20 20 20 49 74 20 73 68 / It sh
6b00: 6f 75 6c 64 20 62 65 3a 0d 0a 2f 2f 0d 0a 2f 2f ould be:..//..//
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 ex
6b20: 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 tern WINSCARDAPI
6b30: 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 2f 2f LONG WINAPI..//
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 43 SC
6b50: 61 72 64 53 65 74 52 65 61 64 65 72 43 61 70 61 ardSetReaderCapa
6b60: 62 69 6c 69 74 69 65 73 28 0d 0a 2f 2f 20 20 20 bilities(..//
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b80: 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 68 SCARDHANDLE h
6b90: 43 61 72 64 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 Card,..//
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 D
6bb0: 57 4f 52 44 20 64 77 54 61 67 2c 0d 0a 2f 2f 20 WORD dwTag,..//
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6bd0: 20 20 20 20 20 4c 50 43 42 59 54 45 20 70 62 41 LPCBYTE pbA
6be0: 74 74 72 2c 0d 0a 2f 2f 20 20 20 20 20 20 20 20 ttr,..//
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 57 DW
6c00: 4f 52 44 20 63 62 41 74 74 72 4c 65 6e 29 3b 0d ORD cbAttrLen);.
6c10: 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 20 20 20 .//..//
6c20: 20 48 65 72 65 27 73 20 61 20 77 6f 72 6b 2d 61 Here's a work-a
6c30: 72 6f 75 6e 64 20 4d 41 43 52 4f 3a 0d 0a 23 64 round MACRO:..#d
6c40: 65 66 69 6e 65 20 53 43 61 72 64 53 65 74 52 65 efine SCardSetRe
6c50: 61 64 65 72 43 61 70 61 62 69 6c 69 74 69 65 73 aderCapabilities
6c60: 20 53 43 61 72 64 53 65 74 41 74 74 72 69 62 0d SCardSetAttrib.
6c70: 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f .....//..///////
6c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 0d 0a 2f /////////..//../
6cd0: 2f 20 20 53 6d 61 72 74 20 43 61 72 64 20 44 69 / Smart Card Di
6ce0: 61 6c 6f 67 20 64 65 66 69 6e 69 74 69 6f 6e 73 alog definitions
6cf0: 0d 0a 2f 2f 0d 0a 2f 2f 20 20 20 20 20 20 54 68 ..//..// Th
6d00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 63 74 e following sect
6d10: 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 73 74 72 ion contains str
6d20: 75 63 74 75 72 65 73 20 61 6e 64 20 20 65 78 70 uctures and exp
6d30: 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 0d 0a orted function..
6d40: 2f 2f 20 20 20 20 20 20 64 65 63 6c 61 72 61 74 // declarat
6d50: 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 53 6d 61 ions for the Sma
6d60: 72 74 20 43 61 72 64 20 43 6f 6d 6d 6f 6e 20 44 rt Card Common D
6d70: 69 61 6c 6f 67 20 64 69 61 6c 6f 67 2e 0d 0a 2f ialog dialog.../
6d80: 2f 0d 0a 0d 0a 2f 2f 20 44 65 66 69 6e 65 64 20 /....// Defined
6d90: 63 6f 6e 73 74 61 6e 74 73 0d 0a 2f 2f 20 46 6c constants..// Fl
6da0: 61 67 73 0d 0a 23 64 65 66 69 6e 65 20 53 43 5f ags..#define SC_
6db0: 44 4c 47 5f 4d 49 4e 49 4d 41 4c 5f 55 49 20 20 DLG_MINIMAL_UI
6dc0: 20 20 20 20 20 30 78 30 31 0d 0a 23 64 65 66 69 0x01..#defi
6dd0: 6e 65 20 53 43 5f 44 4c 47 5f 4e 4f 5f 55 49 20 ne SC_DLG_NO_UI
6de0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 32 0d 0x02.
6df0: 0a 23 64 65 66 69 6e 65 20 53 43 5f 44 4c 47 5f .#define SC_DLG_
6e00: 46 4f 52 43 45 5f 55 49 20 20 20 20 20 20 20 20 FORCE_UI
6e10: 20 30 78 30 34 0d 0a 0d 0a 23 64 65 66 69 6e 65 0x04....#define
6e20: 20 53 43 45 52 52 5f 4e 4f 43 41 52 44 4e 41 4d SCERR_NOCARDNAM
6e30: 45 20 20 20 20 20 20 20 20 30 78 34 30 30 30 0d E 0x4000.
6e40: 0a 23 64 65 66 69 6e 65 20 53 43 45 52 52 5f 4e .#define SCERR_N
6e50: 4f 47 55 49 44 53 20 20 20 20 20 20 20 20 20 20 OGUIDS
6e60: 20 30 78 38 30 30 30 0d 0a 0d 0a 74 79 70 65 64 0x8000....typed
6e70: 65 66 20 53 43 41 52 44 48 41 4e 44 4c 45 20 28 ef SCARDHANDLE (
6e80: 57 49 4e 41 50 49 20 2a 4c 50 4f 43 4e 43 4f 4e WINAPI *LPOCNCON
6e90: 4e 50 52 4f 43 41 29 20 28 20 53 43 41 52 44 43 NPROCA) ( SCARDC
6ea0: 4f 4e 54 45 58 54 2c 20 20 4c 50 53 54 52 2c 20 ONTEXT, LPSTR,
6eb0: 20 4c 50 53 54 52 2c 20 20 50 56 4f 49 44 29 3b LPSTR, PVOID);
6ec0: 0d 0a 74 79 70 65 64 65 66 20 53 43 41 52 44 48 ..typedef SCARDH
6ed0: 41 4e 44 4c 45 20 28 57 49 4e 41 50 49 20 2a 4c ANDLE (WINAPI *L
6ee0: 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 57 29 20 28 POCNCONNPROCW) (
6ef0: 20 53 43 41 52 44 43 4f 4e 54 45 58 54 2c 20 20 SCARDCONTEXT,
6f00: 4c 50 57 53 54 52 2c 20 20 4c 50 57 53 54 52 2c LPWSTR, LPWSTR,
6f10: 20 20 50 56 4f 49 44 29 3b 0d 0a 23 69 66 64 65 PVOID);..#ifde
6f20: 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 69 f UNICODE..#defi
6f30: 6e 65 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 ne LPOCNCONNPROC
6f40: 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 57 LPOCNCONNPROCW
6f50: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 ..#else..#define
6f60: 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 20 20 LPOCNCONNPROC
6f70: 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 0d 0a LPOCNCONNPROCA..
6f80: 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f #endif // !UNICO
6f90: 44 45 0d 0a 74 79 70 65 64 65 66 20 42 4f 4f 4c DE..typedef BOOL
6fa0: 20 28 57 49 4e 41 50 49 20 2a 4c 50 4f 43 4e 43 (WINAPI *LPOCNC
6fb0: 48 4b 50 52 4f 43 29 20 28 20 53 43 41 52 44 43 HKPROC) ( SCARDC
6fc0: 4f 4e 54 45 58 54 2c 20 20 53 43 41 52 44 48 41 ONTEXT, SCARDHA
6fd0: 4e 44 4c 45 2c 20 20 50 56 4f 49 44 29 3b 0d 0a NDLE, PVOID);..
6fe0: 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 57 49 typedef void (WI
6ff0: 4e 41 50 49 20 2a 4c 50 4f 43 4e 44 53 43 50 52 NAPI *LPOCNDSCPR
7000: 4f 43 29 20 28 20 53 43 41 52 44 43 4f 4e 54 45 OC) ( SCARDCONTE
7010: 58 54 2c 20 20 53 43 41 52 44 48 41 4e 44 4c 45 XT, SCARDHANDLE
7020: 2c 20 20 50 56 4f 49 44 29 3b 0d 0a 0d 0a 0d 0a , PVOID);......
7030: 2f 2f 0d 0a 2f 2f 20 4f 50 45 4e 43 41 52 44 5f //..// OPENCARD_
7040: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 3a SEARCH_CRITERIA:
7050: 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 73 70 65 In order to spe
7060: 63 69 66 79 20 61 20 75 73 65 72 2d 65 78 74 65 cify a user-exte
7070: 6e 64 65 64 20 73 65 61 72 63 68 2c 0d 0a 2f 2f nded search,..//
7080: 20 6c 70 66 6e 43 68 65 63 6b 20 6d 75 73 74 20 lpfnCheck must
7090: 6e 6f 74 20 62 65 20 4e 55 4c 4c 2e 20 20 4d 6f not be NULL. Mo
70a0: 72 65 6f 76 65 72 2c 20 74 68 65 20 63 6f 6e 6e reover, the conn
70b0: 65 63 74 69 6f 6e 20 74 6f 20 62 65 20 6d 61 64 ection to be mad
70c0: 65 20 74 6f 20 74 68 65 0d 0a 2f 2f 20 63 61 72 e to the..// car
70d0: 64 20 62 65 66 6f 72 65 20 70 65 72 66 6f 72 6d d before perform
70e0: 69 6e 67 20 74 68 65 20 63 61 6c 6c 62 61 63 6b ing the callback
70f0: 20 6d 75 73 74 20 62 65 20 69 6e 64 69 63 61 74 must be indicat
7100: 65 64 20 62 79 20 65 69 74 68 65 72 20 70 72 6f ed by either pro
7110: 76 69 64 69 6e 67 0d 0a 2f 2f 20 6c 70 66 6e 43 viding..// lpfnC
7120: 6f 6e 6e 65 63 74 20 61 6e 64 20 6c 70 66 6e 44 onnect and lpfnD
7130: 69 73 63 6f 6e 6e 65 63 74 20 4f 52 20 62 79 20 isconnect OR by
7140: 73 65 74 74 69 6e 67 20 64 77 53 68 61 72 65 4d setting dwShareM
7150: 6f 64 65 2e 0d 0a 2f 2f 20 49 66 20 62 6f 74 68 ode...// If both
7160: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection
7170: 63 61 6c 6c 62 61 63 6b 73 20 61 6e 64 20 64 77 callbacks and dw
7180: 53 68 61 72 65 4d 6f 64 65 20 61 72 65 20 6e 6f ShareMode are no
7190: 6e 2d 4e 55 4c 4c 2c 20 74 68 65 20 63 61 6c 6c n-NULL, the call
71a0: 62 61 63 6b 73 0d 0a 2f 2f 20 77 69 6c 6c 20 62 backs..// will b
71b0: 65 20 75 73 65 64 2e 0d 0a 2f 2f 0d 0a 0d 0a 74 e used...//....t
71c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d ypedef struct {.
71d0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 . DWORD
71e0: 20 20 20 20 20 64 77 53 74 72 75 63 74 53 69 7a dwStructSiz
71f0: 65 3b 0d 0a 20 20 20 20 4c 50 53 54 52 20 20 20 e;.. LPSTR
7200: 20 20 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f lpstrGro
7210: 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 upNames;
7220: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 72 65 61 64 // OPTIONAL read
7230: 65 72 20 67 72 6f 75 70 73 20 74 6f 20 69 6e 63 er groups to inc
7240: 6c 75 64 65 20 69 6e 0d 0a 20 20 20 20 44 57 4f lude in.. DWO
7250: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 RD nMa
7260: 78 47 72 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20 xGroupNames;
7270: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 //
7280: 20 73 65 61 72 63 68 2e 20 20 4e 55 4c 4c 20 64 search. NULL d
7290: 65 66 61 75 6c 74 73 20 74 6f 0d 0a 20 20 20 20 efaults to..
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72c0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
72d0: 20 20 20 20 53 43 61 72 64 24 44 65 66 61 75 6c SCard$Defaul
72e0: 74 52 65 61 64 65 72 73 0d 0a 20 20 20 20 4c 50 tReaders.. LP
72f0: 43 47 55 49 44 20 20 20 20 20 20 20 20 20 72 67 CGUID rg
7300: 67 75 69 64 49 6e 74 65 72 66 61 63 65 73 3b 20 guidInterfaces;
7310: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 // OPTIONA
7320: 4c 20 72 65 71 75 65 73 74 65 64 20 69 6e 74 65 L requested inte
7330: 72 66 61 63 65 73 0d 0a 20 20 20 20 44 57 4f 52 rfaces.. DWOR
7340: 44 20 20 20 20 20 20 20 20 20 20 20 63 67 75 69 D cgui
7350: 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20 20 dInterfaces;
7360: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 //
7370: 73 75 70 70 6f 72 74 65 64 20 62 79 20 63 61 72 supported by car
7380: 64 27 73 20 53 53 50 0d 0a 20 20 20 20 4c 50 53 d's SSP.. LPS
7390: 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70 73 TR lps
73a0: 74 72 43 61 72 64 4e 61 6d 65 73 3b 20 20 20 20 trCardNames;
73b0: 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c // OPTIONAL
73c0: 20 72 65 71 75 65 73 74 65 64 20 63 61 72 64 20 requested card
73d0: 6e 61 6d 65 73 3b 20 61 6c 6c 20 63 61 72 64 73 names; all cards
73e0: 20 77 2f 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 w/.. DWORD
73f0: 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72 nMaxCar
7400: 64 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 20 dNames;
7410: 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6d 61 74 // mat
7420: 63 68 69 6e 67 20 41 54 52 73 20 77 69 6c 6c 20 ching ATRs will
7430: 62 65 20 61 63 63 65 70 74 65 64 0d 0a 20 20 20 be accepted..
7440: 20 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20 LPOCNCHKPROC
7450: 20 6c 70 66 6e 43 68 65 63 6b 3b 20 20 20 20 20 lpfnCheck;
7460: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 // OPTI
7470: 4f 4e 41 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f 20 ONAL if NULL no
7480: 75 73 65 72 20 63 68 65 63 6b 20 77 69 6c 6c 20 user check will
7490: 62 65 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20 be performed...
74a0: 20 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 LPOCNCONNPROC
74b0: 41 20 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 A lpfnConnect;
74c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 // OP
74d0: 54 49 4f 4e 41 4c 20 69 66 20 6c 70 66 6e 43 6f TIONAL if lpfnCo
74e0: 6e 6e 65 63 74 20 69 73 20 70 72 6f 76 69 64 65 nnect is provide
74f0: 64 2c 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43 d,.. LPOCNDSC
7500: 50 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 73 63 PROC lpfnDisc
7510: 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 onnect;
7520: 2f 2f 20 20 20 20 20 20 20 20 20 20 6c 70 66 6e // lpfn
7530: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 75 73 74 20 Disconnect must
7540: 61 6c 73 6f 20 62 65 20 73 65 74 2e 0d 0a 20 20 also be set...
7550: 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20 20 LPVOID
7560: 20 20 70 76 55 73 65 72 44 61 74 61 3b 20 20 20 pvUserData;
7570: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 // OPT
7580: 49 4f 4e 41 4c 20 70 61 72 61 6d 65 74 65 72 20 IONAL parameter
7590: 74 6f 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 to callbacks..
75a0: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 DWORD
75b0: 20 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 dwShareMode;
75c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 // OPT
75d0: 49 4f 4e 41 4c 20 6d 75 73 74 20 62 65 20 73 65 IONAL must be se
75e0: 74 20 69 66 20 6c 70 66 6e 43 68 65 63 6b 20 69 t if lpfnCheck i
75f0: 73 20 6e 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20 20 s not null..
7600: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 DWORD
7610: 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f dwPreferredProto
7620: 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f cols; // OPTIO
7630: 4e 41 4c 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 5f NAL..} OPENCARD_
7640: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 SEARCH_CRITERIAA
7650: 2c 20 2a 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 , *POPENCARD_SEA
7660: 52 43 48 5f 43 52 49 54 45 52 49 41 41 2c 20 2a RCH_CRITERIAA, *
7670: 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 LPOPENCARD_SEARC
7680: 48 5f 43 52 49 54 45 52 49 41 41 3b 0d 0a 74 79 H_CRITERIAA;..ty
7690: 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0d 0a pedef struct {..
76a0: 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 DWORD
76b0: 20 20 20 20 64 77 53 74 72 75 63 74 53 69 7a 65 dwStructSize
76c0: 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 ;.. LPWSTR
76d0: 20 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f 75 lpstrGrou
76e0: 70 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 2f pNames; /
76f0: 2f 20 4f 50 54 49 4f 4e 41 4c 20 72 65 61 64 65 / OPTIONAL reade
7700: 72 20 67 72 6f 75 70 73 20 74 6f 20 69 6e 63 6c r groups to incl
7710: 75 64 65 20 69 6e 0d 0a 20 20 20 20 44 57 4f 52 ude in.. DWOR
7720: 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 D nMax
7730: 47 72 6f 75 70 4e 61 6d 65 73 3b 20 20 20 20 20 GroupNames;
7740: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 //
7750: 73 65 61 72 63 68 2e 20 20 4e 55 4c 4c 20 64 65 search. NULL de
7760: 66 61 75 6c 74 73 20 74 6f 0d 0a 20 20 20 20 20 faults to..
7770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7790: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
77a0: 20 20 20 53 43 61 72 64 24 44 65 66 61 75 6c 74 SCard$Default
77b0: 52 65 61 64 65 72 73 0d 0a 20 20 20 20 4c 50 43 Readers.. LPC
77c0: 47 55 49 44 20 20 20 20 20 20 20 20 20 72 67 67 GUID rgg
77d0: 75 69 64 49 6e 74 65 72 66 61 63 65 73 3b 20 20 uidInterfaces;
77e0: 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c // OPTIONAL
77f0: 20 72 65 71 75 65 73 74 65 64 20 69 6e 74 65 72 requested inter
7800: 66 61 63 65 73 0d 0a 20 20 20 20 44 57 4f 52 44 faces.. DWORD
7810: 20 20 20 20 20 20 20 20 20 20 20 63 67 75 69 64 cguid
7820: 49 6e 74 65 72 66 61 63 65 73 3b 20 20 20 20 20 Interfaces;
7830: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 73 // s
7840: 75 70 70 6f 72 74 65 64 20 62 79 20 63 61 72 64 upported by card
7850: 27 73 20 53 53 50 0d 0a 20 20 20 20 4c 50 57 53 's SSP.. LPWS
7860: 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 TR lpst
7870: 72 43 61 72 64 4e 61 6d 65 73 3b 20 20 20 20 20 rCardNames;
7880: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 // OPTIONAL
7890: 72 65 71 75 65 73 74 65 64 20 63 61 72 64 20 6e requested card n
78a0: 61 6d 65 73 3b 20 61 6c 6c 20 63 61 72 64 73 20 ames; all cards
78b0: 77 2f 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 w/.. DWORD
78c0: 20 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 nMaxCard
78d0: 4e 61 6d 65 73 3b 20 20 20 20 20 20 20 20 20 20 Names;
78e0: 2f 2f 20 20 20 20 20 20 20 20 20 20 6d 61 74 63 // matc
78f0: 68 69 6e 67 20 41 54 52 73 20 77 69 6c 6c 20 62 hing ATRs will b
7900: 65 20 61 63 63 65 70 74 65 64 0d 0a 20 20 20 20 e accepted..
7910: 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 20 20 LPOCNCHKPROC
7920: 6c 70 66 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 lpfnCheck;
7930: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f // OPTIO
7940: 4e 41 4c 20 69 66 20 4e 55 4c 4c 20 6e 6f 20 75 NAL if NULL no u
7950: 73 65 72 20 63 68 65 63 6b 20 77 69 6c 6c 20 62 ser check will b
7960: 65 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20 20 e performed...
7970: 20 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 57 LPOCNCONNPROCW
7980: 20 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20 lpfnConnect;
7990: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 // OPT
79a0: 49 4f 4e 41 4c 20 69 66 20 6c 70 66 6e 43 6f 6e IONAL if lpfnCon
79b0: 6e 65 63 74 20 69 73 20 70 72 6f 76 69 64 65 64 nect is provided
79c0: 2c 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 53 43 50 ,.. LPOCNDSCP
79d0: 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 73 63 6f ROC lpfnDisco
79e0: 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f nnect; /
79f0: 2f 20 20 20 20 20 20 20 20 20 20 6c 70 66 6e 44 / lpfnD
7a00: 69 73 63 6f 6e 6e 65 63 74 20 6d 75 73 74 20 61 isconnect must a
7a10: 6c 73 6f 20 62 65 20 73 65 74 2e 0d 0a 20 20 20 lso be set...
7a20: 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20 20 20 LPVOID
7a30: 20 70 76 55 73 65 72 44 61 74 61 3b 20 20 20 20 pvUserData;
7a40: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 // OPTI
7a50: 4f 4e 41 4c 20 70 61 72 61 6d 65 74 65 72 20 74 ONAL parameter t
7a60: 6f 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 20 o callbacks..
7a70: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 DWORD
7a80: 20 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 20 dwShareMode;
7a90: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 // OPTI
7aa0: 4f 4e 41 4c 20 6d 75 73 74 20 62 65 20 73 65 74 ONAL must be set
7ab0: 20 69 66 20 6c 70 66 6e 43 68 65 63 6b 20 69 73 if lpfnCheck is
7ac0: 20 6e 6f 74 20 6e 75 6c 6c 0d 0a 20 20 20 20 44 not null.. D
7ad0: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 WORD d
7ae0: 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 wPreferredProtoc
7af0: 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f 4e ols; // OPTION
7b00: 41 4c 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 5f 53 AL..} OPENCARD_S
7b10: 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 57 2c EARCH_CRITERIAW,
7b20: 20 2a 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 *POPENCARD_SEAR
7b30: 43 48 5f 43 52 49 54 45 52 49 41 57 2c 20 2a 4c CH_CRITERIAW, *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 3b 0d 0a 23 69 66 _CRITERIAW;..#if
7b60: 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a 74 79 70 def UNICODE..typ
7b70: 65 64 65 66 20 4f 50 45 4e 43 41 52 44 5f 53 45 edef OPENCARD_SE
7b80: 41 52 43 48 5f 43 52 49 54 45 52 49 41 57 20 4f ARCH_CRITERIAW O
7b90: 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 PENCARD_SEARCH_C
7ba0: 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 65 64 65 RITERIA;..typede
7bb0: 66 20 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 f POPENCARD_SEAR
7bc0: 43 48 5f 43 52 49 54 45 52 49 41 57 20 50 4f 50 CH_CRITERIAW POP
7bd0: 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52 ENCARD_SEARCH_CR
7be0: 49 54 45 52 49 41 3b 0d 0a 74 79 70 65 64 65 66 ITERIA;..typedef
7bf0: 20 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 LPOPENCARD_SEAR
7c00: 43 48 5f 43 52 49 54 45 52 49 41 57 20 4c 50 4f CH_CRITERIAW LPO
7c10: 50 45 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 PENCARD_SEARCH_C
7c20: 52 49 54 45 52 49 41 3b 0d 0a 23 65 6c 73 65 0d RITERIA;..#else.
7c30: 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43 41 52 .typedef OPENCAR
7c40: 44 5f 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 D_SEARCH_CRITERI
7c50: 41 41 20 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 AA OPENCARD_SEAR
7c60: 43 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 74 79 CH_CRITERIA;..ty
7c70: 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 44 5f pedef POPENCARD_
7c80: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 SEARCH_CRITERIAA
7c90: 20 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 43 POPENCARD_SEARC
7ca0: 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 74 79 70 H_CRITERIA;..typ
7cb0: 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 5f edef LPOPENCARD_
7cc0: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 41 SEARCH_CRITERIAA
7cd0: 20 4c 50 4f 50 45 4e 43 41 52 44 5f 53 45 41 52 LPOPENCARD_SEAR
7ce0: 43 48 5f 43 52 49 54 45 52 49 41 3b 0d 0a 23 65 CH_CRITERIA;..#e
7cf0: 6e 64 69 66 20 2f 2f 20 55 4e 49 43 4f 44 45 0d ndif // UNICODE.
7d00: 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 4f 50 45 4e .....//..// OPEN
7d10: 43 41 52 44 4e 41 4d 45 5f 45 58 3a 20 75 73 65 CARDNAME_EX: use
7d20: 64 20 62 79 20 53 43 61 72 64 55 49 44 6c 67 53 d by SCardUIDlgS
7d30: 65 6c 65 63 74 43 61 72 64 3b 20 72 65 70 6c 61 electCard; repla
7d40: 63 65 73 20 6f 62 73 6f 6c 65 74 65 20 4f 50 45 ces obsolete OPE
7d50: 4e 43 41 52 44 4e 41 4d 45 0d 0a 2f 2f 0d 0a 0d NCARDNAME..//...
7d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 .typedef struct
7d70: 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 {.. DWORD
7d80: 20 20 20 20 20 20 20 64 77 53 74 72 75 63 74 53 dwStructS
7d90: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f ize; /
7da0: 2f 20 52 45 51 55 49 52 45 44 0d 0a 20 20 20 20 / REQUIRED..
7db0: 53 43 41 52 44 43 4f 4e 54 45 58 54 20 20 20 20 SCARDCONTEXT
7dc0: 68 53 43 61 72 64 43 6f 6e 74 65 78 74 3b 20 20 hSCardContext;
7dd0: 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 49 // REQUI
7de0: 52 45 44 0d 0a 20 20 20 20 48 57 4e 44 20 20 20 RED.. HWND
7df0: 20 20 20 20 20 20 20 20 20 68 77 6e 64 4f 77 6e hwndOwn
7e00: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 er;
7e10: 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 // OPTIONAL..
7e20: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 DWORD
7e30: 20 20 64 77 46 6c 61 67 73 3b 20 20 20 20 20 20 dwFlags;
7e40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 // OPT
7e50: 49 4f 4e 41 4c 20 2d 2d 20 64 65 66 61 75 6c 74 IONAL -- default
7e60: 20 69 73 20 53 43 5f 44 4c 47 5f 4d 49 4e 49 4d is SC_DLG_MINIM
7e70: 41 4c 5f 55 49 0d 0a 20 20 20 20 4c 50 43 53 54 AL_UI.. LPCST
7e80: 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 R lpstr
7e90: 54 69 74 6c 65 3b 20 20 20 20 20 20 20 20 20 20 Title;
7ea0: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a // OPTIONAL..
7eb0: 20 20 20 20 4c 50 43 53 54 52 20 20 20 20 20 20 LPCSTR
7ec0: 20 20 20 20 6c 70 73 74 72 53 65 61 72 63 68 44 lpstrSearchD
7ed0: 65 73 63 3b 20 20 20 20 20 20 20 20 2f 2f 20 4f esc; // O
7ee0: 50 54 49 4f 4e 41 4c 20 28 65 67 2e 20 22 50 6c PTIONAL (eg. "Pl
7ef0: 65 61 73 65 20 69 6e 73 65 72 74 20 79 6f 75 72 ease insert your
7f00: 20 3c 62 72 61 6e 64 6e 61 6d 65 3e 20 73 6d 61 <brandname> sma
7f10: 72 74 20 63 61 72 64 2e 22 29 0d 0a 20 20 20 20 rt card.")..
7f20: 48 49 43 4f 4e 20 20 20 20 20 20 20 20 20 20 20 HICON
7f30: 68 49 63 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 hIcon;
7f40: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f // OPTIO
7f50: 4e 41 4c 20 33 32 78 33 32 20 69 63 6f 6e 20 66 NAL 32x32 icon f
7f60: 6f 72 20 79 6f 75 72 20 62 72 61 6e 64 20 69 6e or your brand in
7f70: 73 69 67 6e 69 61 0d 0a 20 20 20 20 50 4f 50 45 signia.. POPE
7f80: 4e 43 41 52 44 5f 53 45 41 52 43 48 5f 43 52 49 NCARD_SEARCH_CRI
7f90: 54 45 52 49 41 41 20 70 4f 70 65 6e 43 61 72 64 TERIAA pOpenCard
7fa0: 53 65 61 72 63 68 43 72 69 74 65 72 69 61 3b 20 SearchCriteria;
7fb0: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 // OPTIONAL..
7fc0: 20 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20 LPOCNCONNPROCA
7fd0: 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 20 20 20 lpfnConnect;
7fe0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 // OPTI
7ff0: 4f 4e 41 4c 20 2d 20 70 65 72 66 6f 72 6d 65 64 ONAL - performed
8000: 20 6f 6e 20 73 75 63 63 65 73 73 66 75 6c 20 73 on successful s
8010: 65 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 4c 50 election.. LP
8020: 56 4f 49 44 20 20 20 20 20 20 20 20 20 20 70 76 VOID pv
8030: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 20 20 UserData;
8040: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 // OPTIONA
8050: 4c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 6c L parameter to l
8060: 70 66 6e 43 6f 6e 6e 65 63 74 0d 0a 20 20 20 20 pfnConnect..
8070: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 DWORD
8080: 64 77 53 68 61 72 65 4d 6f 64 65 3b 20 20 20 20 dwShareMode;
8090: 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f // OPTIO
80a0: 4e 41 4c 20 2d 20 69 66 20 6c 70 66 6e 43 6f 6e NAL - if lpfnCon
80b0: 6e 65 63 74 20 69 73 20 4e 55 4c 4c 2c 20 64 77 nect is NULL, dw
80c0: 53 68 61 72 65 4d 6f 64 65 20 61 6e 64 0d 0a 20 ShareMode and..
80d0: 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 DWORD
80e0: 20 20 20 64 77 50 72 65 66 65 72 72 65 64 50 72 dwPreferredPr
80f0: 6f 74 6f 63 6f 6c 73 3b 20 20 20 2f 2f 20 4f 50 otocols; // OP
8100: 54 49 4f 4e 41 4c 20 64 77 50 72 65 66 65 72 72 TIONAL dwPreferr
8110: 65 64 50 72 6f 74 6f 63 6f 6c 73 20 77 69 6c 6c edProtocols will
8120: 20 62 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 be used to..
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8150: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
8160: 20 20 20 20 20 63 6f 6e 6e 65 63 74 20 74 6f 20 connect to
8170: 74 68 65 20 73 65 6c 65 63 74 65 64 20 63 61 72 the selected car
8180: 64 0d 0a 20 20 20 20 4c 50 53 54 52 20 20 20 20 d.. LPSTR
8190: 20 20 20 20 20 20 20 6c 70 73 74 72 52 64 72 3b lpstrRdr;
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
81b0: 2f 20 52 45 51 55 49 52 45 44 20 5b 49 4e 7c 4f / REQUIRED [IN|O
81c0: 55 54 5d 20 4e 61 6d 65 20 6f 66 20 73 65 6c 65 UT] Name of sele
81d0: 63 74 65 64 20 72 65 61 64 65 72 0d 0a 20 20 20 cted reader..
81e0: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 DWORD
81f0: 20 6e 4d 61 78 52 64 72 3b 20 20 20 20 20 20 20 nMaxRdr;
8200: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 // REQU
8210: 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 0d 0a 20 IRED [IN|OUT]..
8220: 20 20 20 4c 50 53 54 52 20 20 20 20 20 20 20 20 LPSTR
8230: 20 20 20 6c 70 73 74 72 43 61 72 64 3b 20 20 20 lpstrCard;
8240: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 // RE
8250: 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 20 QUIRED [IN|OUT]
8260: 4e 61 6d 65 20 6f 66 20 73 65 6c 65 63 74 65 64 Name of selected
8270: 20 63 61 72 64 0d 0a 20 20 20 20 44 57 4f 52 44 card.. DWORD
8280: 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 43 nMaxC
8290: 61 72 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 ard;
82a0: 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 20 5b // REQUIRED [
82b0: 49 4e 7c 4f 55 54 5d 0d 0a 20 20 20 20 44 57 4f IN|OUT].. DWO
82c0: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 41 RD dwA
82d0: 63 74 69 76 65 50 72 6f 74 6f 63 6f 6c 3b 20 20 ctiveProtocol;
82e0: 20 20 20 20 20 2f 2f 20 5b 4f 55 54 5d 20 73 65 // [OUT] se
82f0: 74 20 6f 6e 6c 79 20 69 66 20 64 77 53 68 61 72 t only if dwShar
8300: 65 4d 6f 64 65 20 6e 6f 74 20 4e 55 4c 4c 0d 0a eMode not NULL..
8310: 20 20 20 20 53 43 41 52 44 48 41 4e 44 4c 45 20 SCARDHANDLE
8320: 20 20 20 20 68 43 61 72 64 48 61 6e 64 6c 65 3b hCardHandle;
8330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 5b // [
8340: 4f 55 54 5d 20 73 65 74 20 69 66 20 61 20 63 61 OUT] set if a ca
8350: 72 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 rd connection wa
8360: 73 20 69 6e 64 69 63 61 74 65 64 0d 0a 7d 20 4f s indicated..} O
8370: 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41 2c PENCARDNAME_EXA,
8380: 20 2a 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f *POPENCARDNAME_
8390: 45 58 41 2c 20 2a 4c 50 4f 50 45 4e 43 41 52 44 EXA, *LPOPENCARD
83a0: 4e 41 4d 45 5f 45 58 41 3b 0d 0a 74 79 70 65 64 NAME_EXA;..typed
83b0: 65 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 ef struct {..
83c0: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 DWORD
83d0: 20 64 77 53 74 72 75 63 74 53 69 7a 65 3b 20 20 dwStructSize;
83e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 // REQU
83f0: 49 52 45 44 0d 0a 20 20 20 20 53 43 41 52 44 43 IRED.. SCARDC
8400: 4f 4e 54 45 58 54 20 20 20 20 68 53 43 61 72 64 ONTEXT hSCard
8410: 43 6f 6e 74 65 78 74 3b 20 20 20 20 20 20 20 20 Context;
8420: 20 20 2f 2f 20 52 45 51 55 49 52 45 44 0d 0a 20 // REQUIRED..
8430: 20 20 20 48 57 4e 44 20 20 20 20 20 20 20 20 20 HWND
8440: 20 20 20 68 77 6e 64 4f 77 6e 65 72 3b 20 20 20 hwndOwner;
8450: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 50 // OP
8460: 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 44 57 4f 52 TIONAL.. DWOR
8470: 44 20 20 20 20 20 20 20 20 20 20 20 64 77 46 6c D dwFl
8480: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 ags;
8490: 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 // OPTIONAL
84a0: 2d 2d 20 64 65 66 61 75 6c 74 20 69 73 20 53 43 -- default is SC
84b0: 5f 44 4c 47 5f 4d 49 4e 49 4d 41 4c 5f 55 49 0d _DLG_MINIMAL_UI.
84c0: 0a 20 20 20 20 4c 50 43 57 53 54 52 20 20 20 20 . LPCWSTR
84d0: 20 20 20 20 20 6c 70 73 74 72 54 69 74 6c 65 3b lpstrTitle;
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
84f0: 4f 50 54 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c 50 OPTIONAL.. LP
8500: 43 57 53 54 52 20 20 20 20 20 20 20 20 20 6c 70 CWSTR lp
8510: 73 74 72 53 65 61 72 63 68 44 65 73 63 3b 20 20 strSearchDesc;
8520: 20 20 20 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 // OPTIONA
8530: 4c 20 28 65 67 2e 20 22 50 6c 65 61 73 65 20 69 L (eg. "Please i
8540: 6e 73 65 72 74 20 79 6f 75 72 20 3c 62 72 61 6e nsert your <bran
8550: 64 6e 61 6d 65 3e 20 73 6d 61 72 74 20 63 61 72 dname> smart car
8560: 64 2e 22 29 0d 0a 20 20 20 20 48 49 43 4f 4e 20 d.").. HICON
8570: 20 20 20 20 20 20 20 20 20 20 68 49 63 6f 6e 3b hIcon;
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8590: 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 33 32 // OPTIONAL 32
85a0: 78 33 32 20 69 63 6f 6e 20 66 6f 72 20 79 6f 75 x32 icon for you
85b0: 72 20 62 72 61 6e 64 20 69 6e 73 69 67 6e 69 61 r brand insignia
85c0: 0d 0a 20 20 20 20 50 4f 50 45 4e 43 41 52 44 5f .. POPENCARD_
85d0: 53 45 41 52 43 48 5f 43 52 49 54 45 52 49 41 57 SEARCH_CRITERIAW
85e0: 20 70 4f 70 65 6e 43 61 72 64 53 65 61 72 63 68 pOpenCardSearch
85f0: 43 72 69 74 65 72 69 61 3b 20 2f 2f 20 4f 50 54 Criteria; // OPT
8600: 49 4f 4e 41 4c 0d 0a 20 20 20 20 4c 50 4f 43 4e IONAL.. LPOCN
8610: 43 4f 4e 4e 50 52 4f 43 57 20 20 6c 70 66 6e 43 CONNPROCW lpfnC
8620: 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20 20 20 onnect;
8630: 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d // OPTIONAL -
8640: 20 70 65 72 66 6f 72 6d 65 64 20 6f 6e 20 73 75 performed on su
8650: 63 63 65 73 73 66 75 6c 20 73 65 6c 65 63 74 69 ccessful selecti
8660: 6f 6e 0d 0a 20 20 20 20 4c 50 56 4f 49 44 20 20 on.. LPVOID
8670: 20 20 20 20 20 20 20 20 70 76 55 73 65 72 44 61 pvUserDa
8680: 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 ta;
8690: 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 70 61 72 61 // OPTIONAL para
86a0: 6d 65 74 65 72 20 74 6f 20 6c 70 66 6e 43 6f 6e meter to lpfnCon
86b0: 6e 65 63 74 0d 0a 20 20 20 20 44 57 4f 52 44 20 nect.. DWORD
86c0: 20 20 20 20 20 20 20 20 20 20 64 77 53 68 61 72 dwShar
86d0: 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 eMode;
86e0: 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c 20 2d 20 // OPTIONAL -
86f0: 69 66 20 6c 70 66 6e 43 6f 6e 6e 65 63 74 20 69 if lpfnConnect i
8700: 73 20 4e 55 4c 4c 2c 20 64 77 53 68 61 72 65 4d s NULL, dwShareM
8710: 6f 64 65 20 61 6e 64 0d 0a 20 20 20 20 44 57 4f ode and.. DWO
8720: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 50 RD dwP
8730: 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f 6c referredProtocol
8740: 73 3b 20 20 20 2f 2f 20 4f 50 54 49 4f 4e 41 4c s; // OPTIONAL
8750: 20 64 77 50 72 65 66 65 72 72 65 64 50 72 6f 74 dwPreferredProt
8760: 6f 63 6f 6c 73 20 77 69 6c 6c 20 62 65 20 75 73 ocols will be us
8770: 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 ed to..
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87a0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 63 // c
87b0: 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 73 65 onnect to the se
87c0: 6c 65 63 74 65 64 20 63 61 72 64 0d 0a 20 20 20 lected card..
87d0: 20 4c 50 57 53 54 52 20 20 20 20 20 20 20 20 20 LPWSTR
87e0: 20 6c 70 73 74 72 52 64 72 3b 20 20 20 20 20 20 lpstrRdr;
87f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 45 51 55 // REQU
8800: 49 52 45 44 20 5b 49 4e 7c 4f 55 54 5d 20 4e 61 IRED [IN|OUT] Na
8810: 6d 65 20 6f 66 20 73 65 6c 65 63 74 65 64 20 72 me of selected r
8820: 65 61 64 65 72 0d 0a 20 20 20 20 44 57 4f 52 44 eader.. DWORD
8830: 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 78 52 nMaxR
8840: 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 dr;
8850: 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 20 5b // REQUIRED [
8860: 49 4e 7c 4f 55 54 5d 0d 0a 20 20 20 20 4c 50 57 IN|OUT].. LPW
8870: 53 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 STR lps
8880: 74 72 43 61 72 64 3b 20 20 20 20 20 20 20 20 20 trCard;
8890: 20 20 20 20 20 2f 2f 20 52 45 51 55 49 52 45 44 // REQUIRED
88a0: 20 5b 49 4e 7c 4f 55 54 5d 20 4e 61 6d 65 20 6f [IN|OUT] Name o
88b0: 66 20 73 65 6c 65 63 74 65 64 20 63 61 72 64 0d f selected card.
88c0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 . DWORD
88d0: 20 20 20 20 20 6e 4d 61 78 43 61 72 64 3b 20 20 nMaxCard;
88e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
88f0: 52 45 51 55 49 52 45 44 20 5b 49 4e 7c 4f 55 54 REQUIRED [IN|OUT
8900: 5d 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 ].. DWORD
8910: 20 20 20 20 20 20 20 64 77 41 63 74 69 76 65 50 dwActiveP
8920: 72 6f 74 6f 63 6f 6c 3b 20 20 20 20 20 20 20 2f rotocol; /
8930: 2f 20 5b 4f 55 54 5d 20 73 65 74 20 6f 6e 6c 79 / [OUT] set only
8940: 20 69 66 20 64 77 53 68 61 72 65 4d 6f 64 65 20 if dwShareMode
8950: 6e 6f 74 20 4e 55 4c 4c 0d 0a 20 20 20 20 53 43 not NULL.. SC
8960: 41 52 44 48 41 4e 44 4c 45 20 20 20 20 20 68 43 ARDHANDLE hC
8970: 61 72 64 48 61 6e 64 6c 65 3b 20 20 20 20 20 20 ardHandle;
8980: 20 20 20 20 20 20 2f 2f 20 5b 4f 55 54 5d 20 73 // [OUT] s
8990: 65 74 20 69 66 20 61 20 63 61 72 64 20 63 6f 6e et if a card con
89a0: 6e 65 63 74 69 6f 6e 20 77 61 73 20 69 6e 64 69 nection was indi
89b0: 63 61 74 65 64 0d 0a 7d 20 4f 50 45 4e 43 41 52 cated..} OPENCAR
89c0: 44 4e 41 4d 45 5f 45 58 57 2c 20 2a 50 4f 50 45 DNAME_EXW, *POPE
89d0: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 2c 20 2a NCARDNAME_EXW, *
89e0: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 LPOPENCARDNAME_E
89f0: 58 57 3b 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 XW;..#ifdef UNIC
8a00: 4f 44 45 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 ODE..typedef OPE
8a10: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 20 4f 50 NCARDNAME_EXW OP
8a20: 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a ENCARDNAME_EX;..
8a30: 74 79 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 typedef POPENCAR
8a40: 44 4e 41 4d 45 5f 45 58 57 20 50 4f 50 45 4e 43 DNAME_EXW POPENC
8a50: 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 ARDNAME_EX;..typ
8a60: 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e edef LPOPENCARDN
8a70: 41 4d 45 5f 45 58 57 20 4c 50 4f 50 45 4e 43 41 AME_EXW LPOPENCA
8a80: 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 23 65 6c 73 RDNAME_EX;..#els
8a90: 65 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43 e..typedef OPENC
8aa0: 41 52 44 4e 41 4d 45 5f 45 58 41 20 4f 50 45 4e ARDNAME_EXA OPEN
8ab0: 43 41 52 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 CARDNAME_EX;..ty
8ac0: 70 65 64 65 66 20 50 4f 50 45 4e 43 41 52 44 4e pedef POPENCARDN
8ad0: 41 4d 45 5f 45 58 41 20 50 4f 50 45 4e 43 41 52 AME_EXA POPENCAR
8ae0: 44 4e 41 4d 45 5f 45 58 3b 0d 0a 74 79 70 65 64 DNAME_EX;..typed
8af0: 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d ef LPOPENCARDNAM
8b00: 45 5f 45 58 41 20 4c 50 4f 50 45 4e 43 41 52 44 E_EXA LPOPENCARD
8b10: 4e 41 4d 45 5f 45 58 3b 0d 0a 23 65 6e 64 69 66 NAME_EX;..#endif
8b20: 20 2f 2f 20 55 4e 49 43 4f 44 45 0d 0a 0d 0a 23 // UNICODE....#
8b30: 64 65 66 69 6e 65 20 4f 50 45 4e 43 41 52 44 4e define OPENCARDN
8b40: 41 4d 45 41 5f 45 58 20 4f 50 45 4e 43 41 52 44 AMEA_EX OPENCARD
8b50: 4e 41 4d 45 5f 45 58 41 0d 0a 23 64 65 66 69 6e NAME_EXA..#defin
8b60: 65 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 5f e OPENCARDNAMEW_
8b70: 45 58 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f EX OPENCARDNAME_
8b80: 45 58 57 0d 0a 23 64 65 66 69 6e 65 20 50 4f 50 EXW..#define POP
8b90: 45 4e 43 41 52 44 4e 41 4d 45 41 5f 45 58 20 50 ENCARDNAMEA_EX P
8ba0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 45 58 41 OPENCARDNAME_EXA
8bb0: 0d 0a 23 64 65 66 69 6e 65 20 50 4f 50 45 4e 43 ..#define POPENC
8bc0: 41 52 44 4e 41 4d 45 57 5f 45 58 20 50 4f 50 45 ARDNAMEW_EX POPE
8bd0: 4e 43 41 52 44 4e 41 4d 45 5f 45 58 57 0d 0a 23 NCARDNAME_EXW..#
8be0: 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52 define LPOPENCAR
8bf0: 44 4e 41 4d 45 41 5f 45 58 20 4c 50 4f 50 45 4e DNAMEA_EX LPOPEN
8c00: 43 41 52 44 4e 41 4d 45 5f 45 58 41 0d 0a 23 64 CARDNAME_EXA..#d
8c10: 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 41 52 44 efine LPOPENCARD
8c20: 4e 41 4d 45 57 5f 45 58 20 4c 50 4f 50 45 4e 43 NAMEW_EX LPOPENC
8c30: 41 52 44 4e 41 4d 45 5f 45 58 57 0d 0a 0d 0a 0d ARDNAME_EXW.....
8c40: 0a 2f 2f 0d 0a 2f 2f 20 53 43 61 72 64 55 49 44 .//..// SCardUID
8c50: 6c 67 53 65 6c 65 63 74 43 61 72 64 20 72 65 70 lgSelectCard rep
8c60: 6c 61 63 65 73 20 47 65 74 4f 70 65 6e 43 61 72 laces GetOpenCar
8c70: 64 4e 61 6d 65 0d 0a 2f 2f 0d 0a 0d 0a 65 78 74 dName..//....ext
8c80: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
8c90: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 LONG WINAPI..SCa
8ca0: 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72 rdUIDlgSelectCar
8cb0: 64 41 28 0d 0a 20 20 20 20 4c 50 4f 50 45 4e 43 dA(.. LPOPENC
8cc0: 41 52 44 4e 41 4d 45 41 5f 45 58 29 3b 0d 0a 65 ARDNAMEA_EX);..e
8cd0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
8ce0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
8cf0: 43 61 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 CardUIDlgSelectC
8d00: 61 72 64 57 28 0d 0a 20 20 20 20 4c 50 4f 50 45 ardW(.. LPOPE
8d10: 4e 43 41 52 44 4e 41 4d 45 57 5f 45 58 29 3b 0d NCARDNAMEW_EX);.
8d20: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d .#ifdef UNICODE.
8d30: 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 55 49 .#define SCardUI
8d40: 44 6c 67 53 65 6c 65 63 74 43 61 72 64 20 20 53 DlgSelectCard S
8d50: 43 61 72 64 55 49 44 6c 67 53 65 6c 65 63 74 43 CardUIDlgSelectC
8d60: 61 72 64 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 ardW..#else..#de
8d70: 66 69 6e 65 20 53 43 61 72 64 55 49 44 6c 67 53 fine SCardUIDlgS
8d80: 65 6c 65 63 74 43 61 72 64 20 20 53 43 61 72 64 electCard SCard
8d90: 55 49 44 6c 67 53 65 6c 65 63 74 43 61 72 64 41 UIDlgSelectCardA
8da0: 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 55 4e 49 ..#endif // !UNI
8db0: 43 4f 44 45 0d 0a 0d 0a 0d 0a 2f 2f 0d 0a 2f 2f CODE......//..//
8dc0: 20 22 53 6d 61 72 74 20 43 61 72 64 20 43 6f 6d "Smart Card Com
8dd0: 6d 6f 6e 20 44 69 61 6c 6f 67 22 20 64 65 66 69 mon Dialog" defi
8de0: 6e 69 74 69 6f 6e 73 20 66 6f 72 20 62 61 63 6b nitions for back
8df0: 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c wards compatibil
8e00: 69 74 79 0d 0a 2f 2f 20 20 77 69 74 68 20 74 68 ity..// with th
8e10: 65 20 53 6d 61 72 74 20 43 61 72 64 20 42 61 73 e Smart Card Bas
8e20: 65 20 53 65 72 76 69 63 65 73 20 53 44 4b 20 76 e Services SDK v
8e30: 65 72 73 69 6f 6e 20 31 2e 30 0d 0a 2f 2f 0d 0a ersion 1.0..//..
8e40: 0d 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 ..typedef struct
8e50: 20 7b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 {.. DWORD
8e60: 20 20 20 20 20 20 20 20 64 77 53 74 72 75 63 74 dwStruct
8e70: 53 69 7a 65 3b 0d 0a 20 20 20 20 48 57 4e 44 20 Size;.. HWND
8e80: 20 20 20 20 20 20 20 20 20 20 20 68 77 6e 64 4f hwndO
8e90: 77 6e 65 72 3b 0d 0a 20 20 20 20 53 43 41 52 44 wner;.. SCARD
8ea0: 43 4f 4e 54 45 58 54 20 20 20 20 68 53 43 61 72 CONTEXT hSCar
8eb0: 64 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 4c dContext;.. L
8ec0: 50 53 54 52 20 20 20 20 20 20 20 20 20 20 20 6c PSTR l
8ed0: 70 73 74 72 47 72 6f 75 70 4e 61 6d 65 73 3b 0d pstrGroupNames;.
8ee0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 . DWORD
8ef0: 20 20 20 20 20 6e 4d 61 78 47 72 6f 75 70 4e 61 nMaxGroupNa
8f00: 6d 65 73 3b 0d 0a 20 20 20 20 4c 50 53 54 52 20 mes;.. LPSTR
8f10: 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 72 43 lpstrC
8f20: 61 72 64 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 44 ardNames;.. D
8f30: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e WORD n
8f40: 4d 61 78 43 61 72 64 4e 61 6d 65 73 3b 0d 0a 20 MaxCardNames;..
8f50: 20 20 20 4c 50 43 47 55 49 44 20 20 20 20 20 20 LPCGUID
8f60: 20 20 20 72 67 67 75 69 64 49 6e 74 65 72 66 61 rgguidInterfa
8f70: 63 65 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 ces;.. DWORD
8f80: 20 20 20 20 20 20 20 20 20 20 63 67 75 69 64 49 cguidI
8f90: 6e 74 65 72 66 61 63 65 73 3b 0d 0a 20 20 20 20 nterfaces;..
8fa0: 4c 50 53 54 52 20 20 20 20 20 20 20 20 20 20 20 LPSTR
8fb0: 6c 70 73 74 72 52 64 72 3b 0d 0a 20 20 20 20 44 lpstrRdr;.. D
8fc0: 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 6e WORD n
8fd0: 4d 61 78 52 64 72 3b 0d 0a 20 20 20 20 4c 50 53 MaxRdr;.. LPS
8fe0: 54 52 20 20 20 20 20 20 20 20 20 20 20 6c 70 73 TR lps
8ff0: 74 72 43 61 72 64 3b 0d 0a 20 20 20 20 44 57 4f trCard;.. DWO
9000: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 RD nMa
9010: 78 43 61 72 64 3b 0d 0a 20 20 20 20 4c 50 43 53 xCard;.. LPCS
9020: 54 52 20 20 20 20 20 20 20 20 20 20 6c 70 73 74 TR lpst
9030: 72 54 69 74 6c 65 3b 0d 0a 20 20 20 20 44 57 4f rTitle;.. DWO
9040: 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 46 RD dwF
9050: 6c 61 67 73 3b 0d 0a 20 20 20 20 4c 50 56 4f 49 lags;.. LPVOI
9060: 44 20 20 20 20 20 20 20 20 20 20 70 76 55 73 65 D pvUse
9070: 72 44 61 74 61 3b 0d 0a 20 20 20 20 44 57 4f 52 rData;.. DWOR
9080: 44 20 20 20 20 20 20 20 20 20 20 20 64 77 53 68 D dwSh
9090: 61 72 65 4d 6f 64 65 3b 0d 0a 20 20 20 20 44 57 areMode;.. DW
90a0: 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 64 77 ORD dw
90b0: 50 72 65 66 65 72 72 65 64 50 72 6f 74 6f 63 6f PreferredProtoco
90c0: 6c 73 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 ls;.. DWORD
90d0: 20 20 20 20 20 20 20 20 20 64 77 41 63 74 69 76 dwActiv
90e0: 65 50 72 6f 74 6f 63 6f 6c 3b 0d 0a 20 20 20 20 eProtocol;..
90f0: 4c 50 4f 43 4e 43 4f 4e 4e 50 52 4f 43 41 20 20 LPOCNCONNPROCA
9100: 6c 70 66 6e 43 6f 6e 6e 65 63 74 3b 0d 0a 20 20 lpfnConnect;..
9110: 20 20 4c 50 4f 43 4e 43 48 4b 50 52 4f 43 20 20 LPOCNCHKPROC
9120: 20 20 6c 70 66 6e 43 68 65 63 6b 3b 0d 0a 20 20 lpfnCheck;..
9130: 20 20 4c 50 4f 43 4e 44 53 43 50 52 4f 43 20 20 LPOCNDSCPROC
9140: 20 20 6c 70 66 6e 44 69 73 63 6f 6e 6e 65 63 74 lpfnDisconnect
9150: 3b 0d 0a 20 20 20 20 53 43 41 52 44 48 41 4e 44 ;.. SCARDHAND
9160: 4c 45 20 20 20 20 20 68 43 61 72 64 48 61 6e 64 LE hCardHand
9170: 6c 65 3b 0d 0a 7d 20 4f 50 45 4e 43 41 52 44 4e le;..} OPENCARDN
9180: 41 4d 45 41 2c 20 2a 50 4f 50 45 4e 43 41 52 44 AMEA, *POPENCARD
9190: 4e 41 4d 45 41 2c 20 2a 4c 50 4f 50 45 4e 43 41 NAMEA, *LPOPENCA
91a0: 52 44 4e 41 4d 45 41 3b 0d 0a 74 79 70 65 64 65 RDNAMEA;..typede
91b0: 66 20 73 74 72 75 63 74 20 7b 0d 0a 20 20 20 20 f struct {..
91c0: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 DWORD
91d0: 64 77 53 74 72 75 63 74 53 69 7a 65 3b 0d 0a 20 dwStructSize;..
91e0: 20 20 20 48 57 4e 44 20 20 20 20 20 20 20 20 20 HWND
91f0: 20 20 20 68 77 6e 64 4f 77 6e 65 72 3b 0d 0a 20 hwndOwner;..
9200: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 SCARDCONTEXT
9210: 20 20 20 68 53 43 61 72 64 43 6f 6e 74 65 78 74 hSCardContext
9220: 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 ;.. LPWSTR
9230: 20 20 20 20 20 20 20 6c 70 73 74 72 47 72 6f 75 lpstrGrou
9240: 70 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 44 57 4f pNames;.. DWO
9250: 52 44 20 20 20 20 20 20 20 20 20 20 20 6e 4d 61 RD nMa
9260: 78 47 72 6f 75 70 4e 61 6d 65 73 3b 0d 0a 20 20 xGroupNames;..
9270: 20 20 4c 50 57 53 54 52 20 20 20 20 20 20 20 20 LPWSTR
9280: 20 20 6c 70 73 74 72 43 61 72 64 4e 61 6d 65 73 lpstrCardNames
9290: 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 ;.. DWORD
92a0: 20 20 20 20 20 20 20 6e 4d 61 78 43 61 72 64 4e nMaxCardN
92b0: 61 6d 65 73 3b 0d 0a 20 20 20 20 4c 50 43 47 55 ames;.. LPCGU
92c0: 49 44 20 20 20 20 20 20 20 20 20 72 67 67 75 69 ID rggui
92d0: 64 49 6e 74 65 72 66 61 63 65 73 3b 0d 0a 20 20 dInterfaces;..
92e0: 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 DWORD
92f0: 20 20 63 67 75 69 64 49 6e 74 65 72 66 61 63 65 cguidInterface
9300: 73 3b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 20 s;.. LPWSTR
9310: 20 20 20 20 20 20 20 20 6c 70 73 74 72 52 64 72 lpstrRdr
9320: 3b 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 ;.. DWORD
9330: 20 20 20 20 20 20 20 6e 4d 61 78 52 64 72 3b 0d nMaxRdr;.
9340: 0a 20 20 20 20 4c 50 57 53 54 52 20 20 20 20 20 . LPWSTR
9350: 20 20 20 20 20 6c 70 73 74 72 43 61 72 64 3b 0d lpstrCard;.
9360: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 . DWORD
9370: 20 20 20 20 20 6e 4d 61 78 43 61 72 64 3b 0d 0a nMaxCard;..
9380: 20 20 20 20 4c 50 43 57 53 54 52 20 20 20 20 20 LPCWSTR
9390: 20 20 20 20 6c 70 73 74 72 54 69 74 6c 65 3b 0d lpstrTitle;.
93a0: 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 . DWORD
93b0: 20 20 20 20 20 64 77 46 6c 61 67 73 3b 0d 0a 20 dwFlags;..
93c0: 20 20 20 4c 50 56 4f 49 44 20 20 20 20 20 20 20 LPVOID
93d0: 20 20 20 70 76 55 73 65 72 44 61 74 61 3b 0d 0a pvUserData;..
93e0: 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 20 20 DWORD
93f0: 20 20 20 20 64 77 53 68 61 72 65 4d 6f 64 65 3b dwShareMode;
9400: 0d 0a 20 20 20 20 44 57 4f 52 44 20 20 20 20 20 .. DWORD
9410: 20 20 20 20 20 20 64 77 50 72 65 66 65 72 72 65 dwPreferre
9420: 64 50 72 6f 74 6f 63 6f 6c 73 3b 0d 0a 20 20 20 dProtocols;..
9430: 20 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 DWORD
9440: 20 64 77 41 63 74 69 76 65 50 72 6f 74 6f 63 6f dwActiveProtoco
9450: 6c 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 4f 4e l;.. LPOCNCON
9460: 4e 50 52 4f 43 57 20 20 6c 70 66 6e 43 6f 6e 6e NPROCW lpfnConn
9470: 65 63 74 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 43 ect;.. LPOCNC
9480: 48 4b 50 52 4f 43 20 20 20 20 6c 70 66 6e 43 68 HKPROC lpfnCh
9490: 65 63 6b 3b 0d 0a 20 20 20 20 4c 50 4f 43 4e 44 eck;.. LPOCND
94a0: 53 43 50 52 4f 43 20 20 20 20 6c 70 66 6e 44 69 SCPROC lpfnDi
94b0: 73 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 20 20 53 sconnect;.. S
94c0: 43 41 52 44 48 41 4e 44 4c 45 20 20 20 20 20 68 CARDHANDLE h
94d0: 43 61 72 64 48 61 6e 64 6c 65 3b 0d 0a 7d 20 4f CardHandle;..} O
94e0: 50 45 4e 43 41 52 44 4e 41 4d 45 57 2c 20 2a 50 PENCARDNAMEW, *P
94f0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 2c 20 2a OPENCARDNAMEW, *
9500: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 3b LPOPENCARDNAMEW;
9510: 0d 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 ..#ifdef UNICODE
9520: 0d 0a 74 79 70 65 64 65 66 20 4f 50 45 4e 43 41 ..typedef OPENCA
9530: 52 44 4e 41 4d 45 57 20 4f 50 45 4e 43 41 52 44 RDNAMEW OPENCARD
9540: 4e 41 4d 45 3b 0d 0a 74 79 70 65 64 65 66 20 50 NAME;..typedef P
9550: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 20 50 4f OPENCARDNAMEW PO
9560: 50 45 4e 43 41 52 44 4e 41 4d 45 3b 0d 0a 74 79 PENCARDNAME;..ty
9570: 70 65 64 65 66 20 4c 50 4f 50 45 4e 43 41 52 44 pedef LPOPENCARD
9580: 4e 41 4d 45 57 20 4c 50 4f 50 45 4e 43 41 52 44 NAMEW LPOPENCARD
9590: 4e 41 4d 45 3b 0d 0a 23 65 6c 73 65 0d 0a 74 79 NAME;..#else..ty
95a0: 70 65 64 65 66 20 4f 50 45 4e 43 41 52 44 4e 41 pedef OPENCARDNA
95b0: 4d 45 41 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 MEA OPENCARDNAME
95c0: 3b 0d 0a 74 79 70 65 64 65 66 20 50 4f 50 45 4e ;..typedef POPEN
95d0: 43 41 52 44 4e 41 4d 45 41 20 50 4f 50 45 4e 43 CARDNAMEA POPENC
95e0: 41 52 44 4e 41 4d 45 3b 0d 0a 74 79 70 65 64 65 ARDNAME;..typede
95f0: 66 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 f LPOPENCARDNAME
9600: 41 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 A LPOPENCARDNAME
9610: 3b 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 55 4e 49 ;..#endif // UNI
9620: 43 4f 44 45 0d 0a 0d 0a 2f 2f 20 42 61 63 6b 77 CODE....// Backw
9630: 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 ards compatibili
9640: 74 79 20 6d 61 63 72 6f 73 0d 0a 23 64 65 66 69 ty macros..#defi
9650: 6e 65 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f ne OPENCARDNAME_
9660: 41 20 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d A OPENCARDNAMEA.
9670: 0a 23 64 65 66 69 6e 65 20 4f 50 45 4e 43 41 52 .#define OPENCAR
9680: 44 4e 41 4d 45 5f 57 20 4f 50 45 4e 43 41 52 44 DNAME_W OPENCARD
9690: 4e 41 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20 50 NAMEW..#define P
96a0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20 50 OPENCARDNAME_A P
96b0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d 0a 23 OPENCARDNAMEA..#
96c0: 64 65 66 69 6e 65 20 50 4f 50 45 4e 43 41 52 44 define POPENCARD
96d0: 4e 41 4d 45 5f 57 20 50 4f 50 45 4e 43 41 52 44 NAME_W POPENCARD
96e0: 4e 41 4d 45 57 0d 0a 23 64 65 66 69 6e 65 20 4c NAMEW..#define L
96f0: 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 5f 41 20 POPENCARDNAME_A
9700: 4c 50 4f 50 45 4e 43 41 52 44 4e 41 4d 45 41 0d LPOPENCARDNAMEA.
9710: 0a 23 64 65 66 69 6e 65 20 4c 50 4f 50 45 4e 43 .#define LPOPENC
9720: 41 52 44 4e 41 4d 45 5f 57 20 4c 50 4f 50 45 4e ARDNAME_W LPOPEN
9730: 43 41 52 44 4e 41 4d 45 57 0d 0a 0d 0a 65 78 74 CARDNAMEW....ext
9740: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
9750: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 47 65 74 LONG WINAPI..Get
9760: 4f 70 65 6e 43 61 72 64 4e 61 6d 65 41 28 0d 0a OpenCardNameA(..
9770: 20 20 20 20 4c 50 4f 50 45 4e 43 41 52 44 4e 41 LPOPENCARDNA
9780: 4d 45 41 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 MEA);..extern WI
9790: 4e 53 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 NSCARDAPI LONG W
97a0: 49 4e 41 50 49 0d 0a 47 65 74 4f 70 65 6e 43 61 INAPI..GetOpenCa
97b0: 72 64 4e 61 6d 65 57 28 0d 0a 20 20 20 20 4c 50 rdNameW(.. LP
97c0: 4f 50 45 4e 43 41 52 44 4e 41 4d 45 57 29 3b 0d OPENCARDNAMEW);.
97d0: 0a 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d .#ifdef UNICODE.
97e0: 0a 23 64 65 66 69 6e 65 20 47 65 74 4f 70 65 6e .#define GetOpen
97f0: 43 61 72 64 4e 61 6d 65 20 20 47 65 74 4f 70 65 CardName GetOpe
9800: 6e 43 61 72 64 4e 61 6d 65 57 0d 0a 23 65 6c 73 nCardNameW..#els
9810: 65 0d 0a 23 64 65 66 69 6e 65 20 47 65 74 4f 70 e..#define GetOp
9820: 65 6e 43 61 72 64 4e 61 6d 65 20 20 47 65 74 4f enCardName GetO
9830: 70 65 6e 43 61 72 64 4e 61 6d 65 41 0d 0a 23 65 penCardNameA..#e
9840: 6e 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 ndif // !UNICODE
9850: 0d 0a 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 43 ....extern WINSC
9860: 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e 41 ARDAPI LONG WINA
9870: 50 49 0d 0a 53 43 61 72 64 44 6c 67 45 78 74 65 PI..SCardDlgExte
9880: 6e 64 65 64 45 72 72 6f 72 20 28 76 6f 69 64 29 ndedError (void)
9890: 3b 0d 0a 0d 0a 23 69 66 20 28 4e 54 44 44 49 5f ;....#if (NTDDI_
98a0: 56 45 52 53 49 4f 4e 20 3e 3d 20 4e 54 44 44 49 VERSION >= NTDDI
98b0: 5f 56 49 53 54 41 29 0d 0a 0d 0a 2f 2f 0d 0a 2f _VISTA)....//../
98c0: 2f 20 53 6d 61 72 74 63 61 72 64 20 43 61 63 68 / Smartcard Cach
98d0: 69 6e 67 20 41 50 49 0d 0a 2f 2f 0d 0a 0d 0a 65 ing API..//....e
98e0: 78 74 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 xtern WINSCARDAP
98f0: 49 20 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 I LONG WINAPI..S
9900: 43 61 72 64 52 65 61 64 43 61 63 68 65 41 28 0d CardReadCacheA(.
9910: 0a 20 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 . SCARDCONT
9920: 45 58 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 EXT hContext,..
9930: 20 20 20 20 20 55 55 49 44 20 2a 43 61 72 64 49 UUID *CardI
9940: 64 65 6e 74 69 66 69 65 72 2c 0d 0a 20 20 20 20 dentifier,..
9950: 20 20 44 57 4f 52 44 20 46 72 65 73 68 6e 65 73 DWORD Freshnes
9960: 73 43 6f 75 6e 74 65 72 2c 0d 0a 20 20 20 20 20 sCounter,..
9970: 20 4c 50 53 54 52 20 4c 6f 6f 6b 75 70 4e 61 6d LPSTR LookupNam
9980: 65 2c 0d 0a 20 20 20 20 20 50 42 59 54 45 20 44 e,.. PBYTE D
9990: 61 74 61 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 ata,.. DWORD
99a0: 20 2a 44 61 74 61 4c 65 6e 29 3b 0d 0a 65 78 74 *DataLen);..ext
99b0: 65 72 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 ern WINSCARDAPI
99c0: 4c 4f 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 LONG WINAPI..SCa
99d0: 72 64 52 65 61 64 43 61 63 68 65 57 28 0d 0a 20 rdReadCacheW(..
99e0: 20 20 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 SCARDCONTEX
99f0: 54 20 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 T hContext,..
9a00: 20 20 20 55 55 49 44 20 2a 43 61 72 64 49 64 65 UUID *CardIde
9a10: 6e 74 69 66 69 65 72 2c 0d 0a 20 20 20 20 20 20 ntifier,..
9a20: 44 57 4f 52 44 20 46 72 65 73 68 6e 65 73 73 43 DWORD FreshnessC
9a30: 6f 75 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 4c ounter,.. L
9a40: 50 57 53 54 52 20 4c 6f 6f 6b 75 70 4e 61 6d 65 PWSTR LookupName
9a50: 2c 0d 0a 20 20 20 20 20 50 42 59 54 45 20 44 61 ,.. PBYTE Da
9a60: 74 61 2c 0d 0a 20 20 20 20 20 44 57 4f 52 44 20 ta,.. DWORD
9a70: 2a 44 61 74 61 4c 65 6e 29 3b 0d 0a 23 69 66 64 *DataLen);..#ifd
9a80: 65 66 20 55 4e 49 43 4f 44 45 0d 0a 23 64 65 66 ef UNICODE..#def
9a90: 69 6e 65 20 53 43 61 72 64 52 65 61 64 43 61 63 ine SCardReadCac
9aa0: 68 65 20 20 53 43 61 72 64 52 65 61 64 43 61 63 he SCardReadCac
9ab0: 68 65 57 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 heW..#else..#def
9ac0: 69 6e 65 20 53 43 61 72 64 52 65 61 64 43 61 63 ine SCardReadCac
9ad0: 68 65 20 20 53 43 61 72 64 52 65 61 64 43 61 63 he SCardReadCac
9ae0: 68 65 41 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 21 heA..#endif // !
9af0: 55 4e 49 43 4f 44 45 0d 0a 0d 0a 65 78 74 65 72 UNICODE....exter
9b00: 6e 20 57 49 4e 53 43 41 52 44 41 50 49 20 4c 4f n WINSCARDAPI LO
9b10: 4e 47 20 57 49 4e 41 50 49 0d 0a 53 43 61 72 64 NG WINAPI..SCard
9b20: 57 72 69 74 65 43 61 63 68 65 41 28 0d 0a 20 20 WriteCacheA(..
9b30: 20 20 20 53 43 41 52 44 43 4f 4e 54 45 58 54 20 SCARDCONTEXT
9b40: 68 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 hContext,..
9b50: 55 55 49 44 20 2a 43 61 72 64 49 64 65 6e 74 69 UUID *CardIdenti
9b60: 66 69 65 72 2c 0d 0a 20 20 20 20 20 44 57 4f 52 fier,.. DWOR
9b70: 44 20 46 72 65 73 68 6e 65 73 73 43 6f 75 6e 74 D FreshnessCount
9b80: 65 72 2c 0d 0a 20 20 20 20 20 4c 50 53 54 52 20 er,.. LPSTR
9b90: 4c 6f 6f 6b 75 70 4e 61 6d 65 2c 0d 0a 20 20 20 LookupName,..
9ba0: 20 20 50 42 59 54 45 20 44 61 74 61 2c 0d 0a 20 PBYTE Data,..
9bb0: 20 20 20 20 44 57 4f 52 44 20 44 61 74 61 4c 65 DWORD DataLe
9bc0: 6e 29 3b 0d 0a 65 78 74 65 72 6e 20 57 49 4e 53 n);..extern WINS
9bd0: 43 41 52 44 41 50 49 20 4c 4f 4e 47 20 57 49 4e CARDAPI LONG WIN
9be0: 41 50 49 0d 0a 53 43 61 72 64 57 72 69 74 65 43 API..SCardWriteC
9bf0: 61 63 68 65 57 28 0d 0a 20 20 20 20 20 53 43 41 acheW(.. SCA
9c00: 52 44 43 4f 4e 54 45 58 54 20 68 43 6f 6e 74 65 RDCONTEXT hConte
9c10: 78 74 2c 0d 0a 20 20 20 20 20 55 55 49 44 20 2a xt,.. UUID *
9c20: 43 61 72 64 49 64 65 6e 74 69 66 69 65 72 2c 0d CardIdentifier,.
9c30: 0a 20 20 20 20 20 44 57 4f 52 44 20 46 72 65 73 . DWORD Fres
9c40: 68 6e 65 73 73 43 6f 75 6e 74 65 72 2c 0d 0a 20 hnessCounter,..
9c50: 20 20 20 20 4c 50 57 53 54 52 20 4c 6f 6f 6b 75 LPWSTR Looku
9c60: 70 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 50 42 59 pName,.. PBY
9c70: 54 45 20 44 61 74 61 2c 0d 0a 20 20 20 20 20 44 TE Data,.. D
9c80: 57 4f 52 44 20 44 61 74 61 4c 65 6e 29 3b 0d 0a WORD DataLen);..
9c90: 23 69 66 64 65 66 20 55 4e 49 43 4f 44 45 0d 0a #ifdef UNICODE..
9ca0: 23 64 65 66 69 6e 65 20 53 43 61 72 64 57 72 69 #define SCardWri
9cb0: 74 65 43 61 63 68 65 20 20 53 43 61 72 64 57 72 teCache SCardWr
9cc0: 69 74 65 43 61 63 68 65 57 0d 0a 23 65 6c 73 65 iteCacheW..#else
9cd0: 0d 0a 23 64 65 66 69 6e 65 20 53 43 61 72 64 57 ..#define SCardW
9ce0: 72 69 74 65 43 61 63 68 65 20 20 53 43 61 72 64 riteCache SCard
9cf0: 57 72 69 74 65 43 61 63 68 65 41 0d 0a 23 65 6e WriteCacheA..#en
9d00: 64 69 66 20 2f 2f 20 21 55 4e 49 43 4f 44 45 0d dif // !UNICODE.
9d10: 0a 0d 0a 23 65 6e 64 69 66 20 2f 2f 20 28 4e 54 ...#endif // (NT
9d20: 44 44 49 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 4e DDI_VERSION >= N
9d30: 54 44 44 49 5f 56 49 53 54 41 29 0d 0a 0d 0a 23 TDDI_VISTA)....#
9d40: 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 ifdef __cplusplu
9d50: 73 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 s..}..#endif..#e
9d60: 6e 64 69 66 20 2f 2f 20 5f 57 49 4e 53 43 41 52 ndif // _WINSCAR
9d70: 44 5f 48 5f 0d 0a 0d 0a 0d 0a D_H_......