22#ifndef WINPR_SMARTCARD_H
23#define WINPR_SMARTCARD_H
25#include <winpr/platform.h>
26#include <winpr/winpr.h>
27#include <winpr/wtypes.h>
30#include <winpr/error.h>
33WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
42#ifndef SCARD_S_SUCCESS
44#define SCARD_S_SUCCESS NO_ERROR
46#define SCARD_F_INTERNAL_ERROR -2146435071l
47#define SCARD_E_CANCELLED -2146435070l
48#define SCARD_E_INVALID_HANDLE -2146435069l
49#define SCARD_E_INVALID_PARAMETER -2146435068l
50#define SCARD_E_INVALID_TARGET -2146435067l
51#define SCARD_E_NO_MEMORY -2146435066l
52#define SCARD_F_WAITED_TOO_LONG -2146435065l
53#define SCARD_E_INSUFFICIENT_BUFFER -2146435064l
54#define SCARD_E_UNKNOWN_READER -2146435063l
55#define SCARD_E_TIMEOUT -2146435062l
56#define SCARD_E_SHARING_VIOLATION -2146435061l
57#define SCARD_E_NO_SMARTCARD -2146435060l
58#define SCARD_E_UNKNOWN_CARD -2146435059l
59#define SCARD_E_CANT_DISPOSE -2146435058l
60#define SCARD_E_PROTO_MISMATCH -2146435057l
61#define SCARD_E_NOT_READY -2146435056l
62#define SCARD_E_INVALID_VALUE -2146435055l
63#define SCARD_E_SYSTEM_CANCELLED -2146435054l
64#define SCARD_F_COMM_ERROR -2146435053l
65#define SCARD_F_UNKNOWN_ERROR -2146435052l
66#define SCARD_E_INVALID_ATR -2146435051l
67#define SCARD_E_NOT_TRANSACTED -2146435050l
68#define SCARD_E_READER_UNAVAILABLE -2146435049l
69#define SCARD_P_SHUTDOWN -2146435048l
70#define SCARD_E_PCI_TOO_SMALL -2146435047l
71#define SCARD_E_READER_UNSUPPORTED -2146435046l
72#define SCARD_E_DUPLICATE_READER -2146435045l
73#define SCARD_E_CARD_UNSUPPORTED -2146435044l
74#define SCARD_E_NO_SERVICE -2146435043l
75#define SCARD_E_SERVICE_STOPPED -2146435042l
76#define SCARD_E_UNEXPECTED -2146435041l
77#define SCARD_E_ICC_INSTALLATION -2146435040l
78#define SCARD_E_ICC_CREATEORDER -2146435039l
79#define SCARD_E_UNSUPPORTED_FEATURE -2146435038l
80#define SCARD_E_DIR_NOT_FOUND -2146435037l
81#define SCARD_E_FILE_NOT_FOUND -2146435036l
82#define SCARD_E_NO_DIR -2146435035l
83#define SCARD_E_NO_FILE -2146435034l
84#define SCARD_E_NO_ACCESS -2146435033l
85#define SCARD_E_WRITE_TOO_MANY -2146435032l
86#define SCARD_E_BAD_SEEK -2146435031l
87#define SCARD_E_INVALID_CHV -2146435030l
88#define SCARD_E_UNKNOWN_RES_MNG -2146435029l
89#define SCARD_E_NO_SUCH_CERTIFICATE -2146435028l
90#define SCARD_E_CERTIFICATE_UNAVAILABLE -2146435027l
91#define SCARD_E_NO_READERS_AVAILABLE -2146435026l
92#define SCARD_E_COMM_DATA_LOST -2146435025l
93#define SCARD_E_NO_KEY_CONTAINER -2146435024l
94#define SCARD_E_SERVER_TOO_BUSY -2146435023l
95#define SCARD_E_PIN_CACHE_EXPIRED -2146435022l
96#define SCARD_E_NO_PIN_CACHE -2146435021l
97#define SCARD_E_READ_ONLY_CARD -2146435020l
99#define SCARD_W_UNSUPPORTED_CARD -2146434971l
100#define SCARD_W_UNRESPONSIVE_CARD -2146434970l
101#define SCARD_W_UNPOWERED_CARD -2146434969l
102#define SCARD_W_RESET_CARD -2146434968l
103#define SCARD_W_REMOVED_CARD -2146434967l
104#define SCARD_W_SECURITY_VIOLATION -2146434966l
105#define SCARD_W_WRONG_CHV -2146434965l
106#define SCARD_W_CHV_BLOCKED -2146434964l
107#define SCARD_W_EOF -2146434963l
108#define SCARD_W_CANCELLED_BY_USER -2146434962l
109#define SCARD_W_CARD_NOT_AUTHENTICATED -2146434961l
110#define SCARD_W_CACHE_ITEM_NOT_FOUND -2146434960l
111#define SCARD_W_CACHE_ITEM_STALE -2146434959l
112#define SCARD_W_CACHE_ITEM_TOO_BIG -2146434958l
117#ifndef SCARD_E_PIN_CACHE_EXPIRED
118#define SCARD_E_PIN_CACHE_EXPIRED -2146435022l
121#ifndef SCARD_E_NO_PIN_CACHE
122#define SCARD_E_NO_PIN_CACHE -2146435021l
125#ifndef SCARD_E_READ_ONLY_CARD
126#define SCARD_E_READ_ONLY_CARD -2146435020l
129#ifndef SCARD_W_CACHE_ITEM_TOO_BIG
130#define SCARD_W_CACHE_ITEM_TOO_BIG -2146434958l
134#define SCARD_ATR_LENGTH 33
136#define SCARD_PROTOCOL_UNDEFINED 0x00000000u
137#define SCARD_PROTOCOL_T0 0x00000001u
138#define SCARD_PROTOCOL_T1 0x00000002u
139#define SCARD_PROTOCOL_RAW 0x00010000u
141#define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
142#define SCARD_PROTOCOL_DEFAULT 0x80000000u
143#define SCARD_PROTOCOL_OPTIMAL 0x00000000u
145#define SCARD_POWER_DOWN 0
146#define SCARD_COLD_RESET 1
147#define SCARD_WARM_RESET 2
149#define SCARD_CTL_CODE(code) \
150 CTL_CODE(FILE_DEVICE_SMARTCARD, (code), METHOD_BUFFERED, FILE_ANY_ACCESS)
152#define IOCTL_SMARTCARD_POWER SCARD_CTL_CODE(1)
153#define IOCTL_SMARTCARD_GET_ATTRIBUTE SCARD_CTL_CODE(2)
154#define IOCTL_SMARTCARD_SET_ATTRIBUTE SCARD_CTL_CODE(3)
155#define IOCTL_SMARTCARD_CONFISCATE SCARD_CTL_CODE(4)
156#define IOCTL_SMARTCARD_TRANSMIT SCARD_CTL_CODE(5)
157#define IOCTL_SMARTCARD_EJECT SCARD_CTL_CODE(6)
158#define IOCTL_SMARTCARD_SWALLOW SCARD_CTL_CODE(7)
159#define IOCTL_SMARTCARD_IS_PRESENT SCARD_CTL_CODE(10)
160#define IOCTL_SMARTCARD_IS_ABSENT SCARD_CTL_CODE(11)
161#define IOCTL_SMARTCARD_SET_PROTOCOL SCARD_CTL_CODE(12)
162#define IOCTL_SMARTCARD_GET_STATE SCARD_CTL_CODE(14)
163#define IOCTL_SMARTCARD_GET_LAST_ERROR SCARD_CTL_CODE(15)
164#define IOCTL_SMARTCARD_GET_PERF_CNTR SCARD_CTL_CODE(16)
166#define IOCTL_SMARTCARD_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400)
168#define MAXIMUM_ATTR_STRING_LENGTH 32
169#define MAXIMUM_SMARTCARD_READERS 10
171#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
173#define SCARD_CLASS_VENDOR_INFO 1
174#define SCARD_CLASS_COMMUNICATIONS 2
175#define SCARD_CLASS_PROTOCOL 3
176#define SCARD_CLASS_POWER_MGMT 4
177#define SCARD_CLASS_SECURITY 5
178#define SCARD_CLASS_MECHANICAL 6
179#define SCARD_CLASS_VENDOR_DEFINED 7
180#define SCARD_CLASS_IFD_PROTOCOL 8
181#define SCARD_CLASS_ICC_STATE 9
182#define SCARD_CLASS_PERF 0x7FFE
183#define SCARD_CLASS_SYSTEM 0x7FFF
185#define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100)
186#define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101)
187#define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102)
188#define SCARD_ATTR_VENDOR_IFD_SERIAL_NO SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0103)
189#define SCARD_ATTR_CHANNEL_ID SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, 0x0110)
190#define SCARD_ATTR_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0120)
191#define SCARD_ATTR_DEFAULT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0121)
192#define SCARD_ATTR_MAX_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0122)
193#define SCARD_ATTR_DEFAULT_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0123)
194#define SCARD_ATTR_MAX_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0124)
195#define SCARD_ATTR_MAX_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0125)
196#define SCARD_ATTR_POWER_MGMT_SUPPORT SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, 0x0131)
197#define SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0140)
198#define SCARD_ATTR_USER_AUTH_INPUT_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0142)
199#define SCARD_ATTR_CHARACTERISTICS SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, 0x0150)
201#define SCARD_ATTR_CURRENT_PROTOCOL_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0201)
202#define SCARD_ATTR_CURRENT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0202)
203#define SCARD_ATTR_CURRENT_F SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0203)
204#define SCARD_ATTR_CURRENT_D SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0204)
205#define SCARD_ATTR_CURRENT_N SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0205)
206#define SCARD_ATTR_CURRENT_W SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0206)
207#define SCARD_ATTR_CURRENT_IFSC SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0207)
208#define SCARD_ATTR_CURRENT_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0208)
209#define SCARD_ATTR_CURRENT_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0209)
210#define SCARD_ATTR_CURRENT_CWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020a)
211#define SCARD_ATTR_CURRENT_EBC_ENCODING SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020b)
212#define SCARD_ATTR_EXTENDED_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020c)
214#define SCARD_ATTR_ICC_PRESENCE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0300)
215#define SCARD_ATTR_ICC_INTERFACE_STATUS SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0301)
216#define SCARD_ATTR_CURRENT_IO_STATE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0302)
217#define SCARD_ATTR_ATR_STRING SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0303)
218#define SCARD_ATTR_ICC_TYPE_PER_ATR SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0304)
220#define SCARD_ATTR_ESC_RESET SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA000)
221#define SCARD_ATTR_ESC_CANCEL SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA003)
222#define SCARD_ATTR_ESC_AUTHREQUEST SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA005)
223#define SCARD_ATTR_MAXINPUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA007)
225#define SCARD_ATTR_DEVICE_UNIT SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0001)
226#define SCARD_ATTR_DEVICE_IN_USE SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0002)
227#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
228#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004)
229#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0005)
230#define SCARD_ATTR_DEVICE_SYSTEM_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0006)
231#define SCARD_ATTR_SUPRESS_T1_IFS_REQUEST SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0007)
233#define SCARD_PERF_NUM_TRANSMISSIONS SCARD_ATTR_VALUE(SCARD_CLASS_PERF, 0x0001)
234#define SCARD_PERF_BYTES_TRANSMITTED SCARD_ATTR_VALUE(SCARD_CLASS_PERF, 0x0002)
235#define SCARD_PERF_TRANSMISSION_TIME SCARD_ATTR_VALUE(SCARD_CLASS_PERF, 0x0003)
238#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
239#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_W
241#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
242#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_A
245#define SCARD_T0_HEADER_LENGTH 7
246#define SCARD_T0_CMD_LENGTH 5
248#define SCARD_T1_PROLOGUE_LENGTH 3
249#define SCARD_T1_EPILOGUE_LENGTH 2
250#define SCARD_T1_MAX_IFS 254
252#define SCARD_UNKNOWN 0
253#define SCARD_ABSENT 1
254#define SCARD_PRESENT 2
255#define SCARD_SWALLOWED 3
256#define SCARD_POWERED 4
257#define SCARD_NEGOTIABLE 5
258#define SCARD_SPECIFIC 6
271 BYTE bCla, bIns, bP1, bP2, bP3;
293#define SCARD_READER_SWALLOWS 0x00000001
294#define SCARD_READER_EJECTS 0x00000002
295#define SCARD_READER_CONFISCATES 0x00000004
297#define SCARD_READER_TYPE_SERIAL 0x01
298#define SCARD_READER_TYPE_PARALELL 0x02
299#define SCARD_READER_TYPE_KEYBOARD 0x04
300#define SCARD_READER_TYPE_SCSI 0x08
301#define SCARD_READER_TYPE_IDE 0x10
302#define SCARD_READER_TYPE_USB 0x20
303#define SCARD_READER_TYPE_PCMCIA 0x40
304#define SCARD_READER_TYPE_TPM 0x80
305#define SCARD_READER_TYPE_NFC 0x100
306#define SCARD_READER_TYPE_UICC 0x200
307#define SCARD_READER_TYPE_VENDOR 0xF0
310#define WINSCARDAPI WINPR_API
313typedef ULONG_PTR SCARDCONTEXT;
314typedef SCARDCONTEXT *PSCARDCONTEXT, *LPSCARDCONTEXT;
316typedef ULONG_PTR SCARDHANDLE;
317typedef SCARDHANDLE *PSCARDHANDLE, *LPSCARDHANDLE;
319#define SCARD_AUTOALLOCATE UINT32_MAX
321#define SCARD_SCOPE_USER 0
322#define SCARD_SCOPE_TERMINAL 1
323#define SCARD_SCOPE_SYSTEM 2
325#define SCARD_STATE_UNAWARE 0x00000000
326#define SCARD_STATE_IGNORE 0x00000001
327#define SCARD_STATE_CHANGED 0x00000002
328#define SCARD_STATE_UNKNOWN 0x00000004
329#define SCARD_STATE_UNAVAILABLE 0x00000008
330#define SCARD_STATE_EMPTY 0x00000010
331#define SCARD_STATE_PRESENT 0x00000020
332#define SCARD_STATE_ATRMATCH 0x00000040
333#define SCARD_STATE_EXCLUSIVE 0x00000080
334#define SCARD_STATE_INUSE 0x00000100
335#define SCARD_STATE_MUTE 0x00000200
336#define SCARD_STATE_UNPOWERED 0x00000400
338#define SCARD_SHARE_EXCLUSIVE 1
339#define SCARD_SHARE_SHARED 2
340#define SCARD_SHARE_DIRECT 3
342#define SCARD_LEAVE_CARD 0
343#define SCARD_RESET_CARD 1
344#define SCARD_UNPOWER_CARD 2
345#define SCARD_EJECT_CARD 3
347#define SC_DLG_MINIMAL_UI 0x01
348#define SC_DLG_NO_UI 0x02
349#define SC_DLG_FORCE_UI 0x04
351#define SCERR_NOCARDNAME 0x4000
352#define SCERR_NOGUIDS 0x8000
354typedef SCARDHANDLE(WINAPI* LPOCNCONNPROCA)(SCARDCONTEXT hSCardContext, LPSTR szReader,
355 LPSTR mszCards, PVOID pvUserData);
356typedef SCARDHANDLE(WINAPI* LPOCNCONNPROCW)(SCARDCONTEXT hSCardContext, LPWSTR szReader,
357 LPWSTR mszCards, PVOID pvUserData);
359typedef BOOL(WINAPI* LPOCNCHKPROC)(SCARDCONTEXT hSCardContext, SCARDHANDLE hCard, PVOID pvUserData);
360typedef void(WINAPI* LPOCNDSCPROC)(SCARDCONTEXT hSCardContext, SCARDHANDLE hCard, PVOID pvUserData);
362#define SCARD_READER_SEL_AUTH_PACKAGE ((DWORD)-629)
364#define SCARD_AUDIT_CHV_FAILURE 0x0
365#define SCARD_AUDIT_CHV_SUCCESS 0x1
367#define SCardListCardTypes SCardListCards
369#define PCSCardIntroduceCardType(hContext, szCardName, pbAtr, pbAtrMask, cbAtrLen, \
370 pguidPrimaryProvider, rgguidInterfaces, dwInterfaceCount) \
371 SCardIntroduceCardType(hContext, szCardName, pguidPrimaryProvider, rgguidInterfaces, \
372 dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen)
374#define SCardGetReaderCapabilities SCardGetAttrib
375#define SCardSetReaderCapabilities SCardSetAttrib
381 DWORD dwCurrentState;
391 DWORD dwCurrentState;
407 LPSTR lpstrGroupNames;
408 DWORD nMaxGroupNames;
409 LPCGUID rgguidInterfaces;
410 DWORD cguidInterfaces;
411 LPSTR lpstrCardNames;
413 LPOCNCHKPROC lpfnCheck;
414 LPOCNCONNPROCA lpfnConnect;
415 LPOCNDSCPROC lpfnDisconnect;
418 DWORD dwPreferredProtocols;
424 LPWSTR lpstrGroupNames;
425 DWORD nMaxGroupNames;
426 LPCGUID rgguidInterfaces;
427 DWORD cguidInterfaces;
428 LPWSTR lpstrCardNames;
430 LPOCNCHKPROC lpfnCheck;
431 LPOCNCONNPROCW lpfnConnect;
432 LPOCNDSCPROC lpfnDisconnect;
435 DWORD dwPreferredProtocols;
441 SCARDCONTEXT hSCardContext;
445 LPCSTR lpstrSearchDesc;
448 LPOCNCONNPROCA lpfnConnect;
451 DWORD dwPreferredProtocols;
456 DWORD dwActiveProtocol;
457 SCARDHANDLE hCardHandle;
463 SCARDCONTEXT hSCardContext;
467 LPCWSTR lpstrSearchDesc;
470 LPOCNCONNPROCW lpfnConnect;
473 DWORD dwPreferredProtocols;
478 DWORD dwActiveProtocol;
479 SCARDHANDLE hCardHandle;
482#define OPENCARDNAMEA_EX OPENCARDNAME_EXA
483#define OPENCARDNAMEW_EX OPENCARDNAME_EXW
484#define POPENCARDNAMEA_EX POPENCARDNAME_EXA
485#define POPENCARDNAMEW_EX POPENCARDNAME_EXW
486#define LPOPENCARDNAMEA_EX LPOPENCARDNAME_EXA
487#define LPOPENCARDNAMEW_EX LPOPENCARDNAME_EXW
491 RSR_MATCH_TYPE_READER_AND_CONTAINER = 1,
492 RSR_MATCH_TYPE_SERIAL_NUMBER,
493 RSR_MATCH_TYPE_ALL_CARDS
494} READER_SEL_REQUEST_MATCH_TYPE;
499 DWORD dwPreferredProtocols;
500 READER_SEL_REQUEST_MATCH_TYPE MatchType;
505 DWORD cbReaderNameOffset;
506 DWORD cchReaderNameLength;
507 DWORD cbContainerNameOffset;
508 DWORD cchContainerNameLength;
509 DWORD dwDesiredCardModuleVersion;
511 } ReaderAndContainerParameter;
514 DWORD cbSerialNumberOffset;
515 DWORD cbSerialNumberLength;
516 DWORD dwDesiredCardModuleVersion;
517 } SerialNumberParameter;
523 DWORD cbReaderNameOffset;
524 DWORD cchReaderNameLength;
525 DWORD cbCardNameOffset;
526 DWORD cchCardNameLength;
533 SCARDCONTEXT hSCardContext;
534 LPSTR lpstrGroupNames;
535 DWORD nMaxGroupNames;
536 LPSTR lpstrCardNames;
538 LPCGUID rgguidInterfaces;
539 DWORD cguidInterfaces;
548 DWORD dwPreferredProtocols;
549 DWORD dwActiveProtocol;
550 LPOCNCONNPROCA lpfnConnect;
551 LPOCNCHKPROC lpfnCheck;
552 LPOCNDSCPROC lpfnDisconnect;
553 SCARDHANDLE hCardHandle;
560 SCARDCONTEXT hSCardContext;
561 LPWSTR lpstrGroupNames;
562 DWORD nMaxGroupNames;
563 LPWSTR lpstrCardNames;
565 LPCGUID rgguidInterfaces;
566 DWORD cguidInterfaces;
575 DWORD dwPreferredProtocols;
576 DWORD dwActiveProtocol;
577 LPOCNCONNPROCW lpfnConnect;
578 LPOCNCHKPROC lpfnCheck;
579 LPOCNDSCPROC lpfnDisconnect;
580 SCARDHANDLE hCardHandle;
586#define LPOCNCONNPROC LPOCNCONNPROCW
587#define SCARD_READERSTATE SCARD_READERSTATEW
588#define PSCARD_READERSTATE PSCARD_READERSTATEW
589#define LPSCARD_READERSTATE LPSCARD_READERSTATEW
590#define OPENCARD_SEARCH_CRITERIA OPENCARD_SEARCH_CRITERIAW
591#define LOPENCARD_SEARCH_CRITERIA LOPENCARD_SEARCH_CRITERIAW
592#define LPOPENCARD_SEARCH_CRITERIA LPOPENCARD_SEARCH_CRITERIAW
593#define OPENCARDNAME_EX OPENCARDNAME_EXW
594#define LOPENCARDNAME_EX LOPENCARDNAME_EXW
595#define LPOPENCARDNAME_EX LPOPENCARDNAME_EXW
596#define OPENCARDNAME OPENCARDNAMEW
597#define LOPENCARDNAME LOPENCARDNAMEW
598#define LPOPENCARDNAME LPOPENCARDNAMEW
600#define LPOCNCONNPROC LPOCNCONNPROCA
601#define SCARD_READERSTATE SCARD_READERSTATEA
602#define PSCARD_READERSTATE PSCARD_READERSTATEA
603#define LPSCARD_READERSTATE LPSCARD_READERSTATEA
604#define OPENCARD_SEARCH_CRITERIA OPENCARD_SEARCH_CRITERIAA
605#define LOPENCARD_SEARCH_CRITERIA LOPENCARD_SEARCH_CRITERIAA
606#define LPOPENCARD_SEARCH_CRITERIA LPOPENCARD_SEARCH_CRITERIAA
607#define OPENCARDNAME_EX OPENCARDNAME_EXA
608#define LOPENCARDNAME_EX LOPENCARDNAME_EXA
609#define LPOPENCARDNAME_EX LPOPENCARDNAME_EXA
610#define OPENCARDNAME OPENCARDNAMEA
611#define LOPENCARDNAME LOPENCARDNAMEA
612#define LPOPENCARDNAME LPOPENCARDNAMEA
624#define SCARD_PCI_T0 (&g_rgSCardT0Pci)
625#define SCARD_PCI_T1 (&g_rgSCardT1Pci)
626#define SCARD_PCI_RAW (&g_rgSCardRawPci)
628 WINSCARDAPI LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
629 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
631 WINSCARDAPI LONG WINAPI SCardReleaseContext(SCARDCONTEXT hContext);
633 WINSCARDAPI LONG WINAPI SCardIsValidContext(SCARDCONTEXT hContext);
635 WINSCARDAPI LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups,
637 WINSCARDAPI LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups,
640 WINSCARDAPI LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups,
641 LPSTR mszReaders, LPDWORD pcchReaders);
642 WINSCARDAPI LONG WINAPI SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups,
643 LPWSTR mszReaders, LPDWORD pcchReaders);
645 WINSCARDAPI LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr,
646 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
647 CHAR* mszCards, LPDWORD pcchCards);
649 WINSCARDAPI LONG WINAPI SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr,
650 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
651 WCHAR* mszCards, LPDWORD pcchCards);
653 WINSCARDAPI LONG WINAPI SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard,
654 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
655 WINSCARDAPI LONG WINAPI SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard,
656 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
658 WINSCARDAPI LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard,
659 LPGUID pguidProviderId);
660 WINSCARDAPI LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard,
661 LPGUID pguidProviderId);
663 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
664 DWORD dwProviderId, CHAR* szProvider,
665 LPDWORD pcchProvider);
666 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
667 DWORD dwProviderId, WCHAR* szProvider,
668 LPDWORD pcchProvider);
670 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
671 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
673 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
674 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
676 WINSCARDAPI LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName,
677 LPCSTR szDeviceName);
678 WINSCARDAPI LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
679 LPCWSTR szDeviceName);
681 WINSCARDAPI LONG WINAPI SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName);
682 WINSCARDAPI LONG WINAPI SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName);
684 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
686 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
687 LPCWSTR szGroupName);
689 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
691 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
692 LPCWSTR szGroupName);
694 WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName,
695 LPCGUID pguidPrimaryProvider,
696 LPCGUID rgguidInterfaces,
697 DWORD dwInterfaceCount, LPCBYTE pbAtr,
698 LPCBYTE pbAtrMask, DWORD cbAtrLen);
699 WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName,
700 LPCGUID pguidPrimaryProvider,
701 LPCGUID rgguidInterfaces,
702 DWORD dwInterfaceCount, LPCBYTE pbAtr,
703 LPCBYTE pbAtrMask, DWORD cbAtrLen);
705 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
706 DWORD dwProviderId, LPCSTR szProvider);
707 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
708 DWORD dwProviderId, LPCWSTR szProvider);
710 WINSCARDAPI LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName);
711 WINSCARDAPI LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName);
713 WINSCARDAPI LONG WINAPI SCardFreeMemory(SCARDCONTEXT hContext, LPVOID pvMem);
715 WINSCARDAPI HANDLE WINAPI SCardAccessStartedEvent(
void);
717 WINSCARDAPI
void WINAPI SCardReleaseStartedEvent(
void);
719 WINSCARDAPI LONG WINAPI SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards,
721 WINSCARDAPI LONG WINAPI SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards,
724 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT hContext,
728 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT hContext,
733 WINSCARDAPI LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout,
736 WINSCARDAPI LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout,
740 WINSCARDAPI LONG WINAPI SCardCancel(SCARDCONTEXT hContext);
742 WINSCARDAPI LONG WINAPI SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
743 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
744 LPDWORD pdwActiveProtocol);
745 WINSCARDAPI LONG WINAPI SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader,
746 DWORD dwShareMode, DWORD dwPreferredProtocols,
747 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
749 WINSCARDAPI LONG WINAPI SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode,
750 DWORD dwPreferredProtocols, DWORD dwInitialization,
751 LPDWORD pdwActiveProtocol);
753 WINSCARDAPI LONG WINAPI SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition);
755 WINSCARDAPI LONG WINAPI SCardBeginTransaction(SCARDHANDLE hCard);
757 WINSCARDAPI LONG WINAPI SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition);
759 WINSCARDAPI LONG WINAPI SCardCancelTransaction(SCARDHANDLE hCard);
761 WINSCARDAPI LONG WINAPI SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
762 LPBYTE pbAtr, LPDWORD pcbAtrLen);
764 WINSCARDAPI LONG WINAPI SCardStatusA(SCARDHANDLE hCard, LPSTR mszReaderNames,
765 LPDWORD pcchReaderLen, LPDWORD pdwState,
766 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
767 WINSCARDAPI LONG WINAPI SCardStatusW(SCARDHANDLE hCard, LPWSTR mszReaderNames,
768 LPDWORD pcchReaderLen, LPDWORD pdwState,
769 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
772 LPCBYTE pbSendBuffer, DWORD cbSendLength,
774 LPDWORD pcbRecvLength);
776 WINSCARDAPI LONG WINAPI SCardGetTransmitCount(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
778 WINSCARDAPI LONG WINAPI SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
779 DWORD cbInBufferSize, LPVOID lpOutBuffer,
780 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
782 WINSCARDAPI LONG WINAPI SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
785 WINSCARDAPI LONG WINAPI SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
788 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardA(LPOPENCARDNAMEA_EX pDlgStruc);
789 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardW(LPOPENCARDNAMEW_EX pDlgStruc);
794 WINSCARDAPI LONG WINAPI SCardDlgExtendedError(
void);
796 WINSCARDAPI LONG WINAPI SCardReadCacheA(SCARDCONTEXT hContext,
UUID* CardIdentifier,
797 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
799 WINSCARDAPI LONG WINAPI SCardReadCacheW(SCARDCONTEXT hContext,
UUID* CardIdentifier,
800 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
803 WINSCARDAPI LONG WINAPI SCardWriteCacheA(SCARDCONTEXT hContext,
UUID* CardIdentifier,
804 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
806 WINSCARDAPI LONG WINAPI SCardWriteCacheW(SCARDCONTEXT hContext,
UUID* CardIdentifier,
807 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
810 WINSCARDAPI LONG WINAPI SCardGetReaderIconA(SCARDCONTEXT hContext, LPCSTR szReaderName,
811 LPBYTE pbIcon, LPDWORD pcbIcon);
812 WINSCARDAPI LONG WINAPI SCardGetReaderIconW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
813 LPBYTE pbIcon, LPDWORD pcbIcon);
815 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdA(SCARDCONTEXT hContext, LPCSTR szReaderName,
816 LPDWORD pdwDeviceTypeId);
817 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
818 LPDWORD pdwDeviceTypeId);
820 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext,
822 LPSTR szDeviceInstanceId,
823 LPDWORD pcchDeviceInstanceId);
824 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdW(SCARDCONTEXT hContext,
825 LPCWSTR szReaderName,
826 LPWSTR szDeviceInstanceId,
827 LPDWORD pcchDeviceInstanceId);
829 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdA(SCARDCONTEXT hContext,
830 LPCSTR szDeviceInstanceId,
832 LPDWORD pcchReaders);
833 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdW(SCARDCONTEXT hContext,
834 LPCWSTR szDeviceInstanceId,
836 LPDWORD pcchReaders);
838 WINSCARDAPI LONG WINAPI SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent);
841#define SCardListReaderGroups SCardListReaderGroupsW
842#define SCardListReaders SCardListReadersW
843#define SCardListCards SCardListCardsW
844#define SCardListInterfaces SCardListInterfacesW
845#define SCardGetProviderId SCardGetProviderIdW
846#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameW
847#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupW
848#define SCardForgetReaderGroup SCardForgetReaderGroupW
849#define SCardIntroduceReader SCardIntroduceReaderW
850#define SCardForgetReader SCardForgetReaderW
851#define SCardAddReaderToGroup SCardAddReaderToGroupW
852#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupW
853#define SCardIntroduceCardType SCardIntroduceCardTypeW
854#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameW
855#define SCardForgetCardType SCardForgetCardTypeW
856#define SCardLocateCards SCardLocateCardsW
857#define SCardLocateCardsByATR SCardLocateCardsByATRW
858#define SCardGetStatusChange SCardGetStatusChangeW
859#define SCardConnect SCardConnectW
860#define SCardStatus SCardStatusW
861#define SCardUIDlgSelectCard SCardUIDlgSelectCardW
862#define GetOpenCardName GetOpenCardNameW
863#define SCardReadCache SCardReadCacheW
864#define SCardWriteCache SCardWriteCacheW
865#define SCardGetReaderIcon SCardGetReaderIconW
866#define SCardGetDeviceTypeId SCardGetDeviceTypeIdW
867#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdW
868#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstanceIdW
870#define SCardListReaderGroups SCardListReaderGroupsA
871#define SCardListReaders SCardListReadersA
872#define SCardListCards SCardListCardsA
873#define SCardListInterfaces SCardListInterfacesA
874#define SCardGetProviderId SCardGetProviderIdA
875#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameA
876#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupA
877#define SCardForgetReaderGroup SCardForgetReaderGroupA
878#define SCardIntroduceReader SCardIntroduceReaderA
879#define SCardForgetReader SCardForgetReaderA
880#define SCardAddReaderToGroup SCardAddReaderToGroupA
881#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupA
882#define SCardIntroduceCardType SCardIntroduceCardTypeA
883#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameA
884#define SCardForgetCardType SCardForgetCardTypeA
885#define SCardLocateCards SCardLocateCardsA
886#define SCardLocateCardsByATR SCardLocateCardsByATRA
887#define SCardGetStatusChange SCardGetStatusChangeA
888#define SCardConnect SCardConnectA
889#define SCardStatus SCardStatusA
890#define SCardUIDlgSelectCard SCardUIDlgSelectCardA
891#define GetOpenCardName GetOpenCardNameA
892#define SCardReadCache SCardReadCacheA
893#define SCardWriteCache SCardWriteCacheA
894#define SCardGetReaderIcon SCardGetReaderIconA
895#define SCardGetDeviceTypeId SCardGetDeviceTypeIdA
896#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdA
897#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstanceIdA
908typedef LONG(WINAPI* fnSCardEstablishContext)(DWORD dwScope, LPCVOID pvReserved1,
909 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
911typedef LONG(WINAPI* fnSCardReleaseContext)(SCARDCONTEXT hContext);
913typedef LONG(WINAPI* fnSCardIsValidContext)(SCARDCONTEXT hContext);
915typedef LONG(WINAPI* fnSCardListReaderGroupsA)(SCARDCONTEXT hContext, LPSTR mszGroups,
917typedef LONG(WINAPI* fnSCardListReaderGroupsW)(SCARDCONTEXT hContext, LPWSTR mszGroups,
920typedef LONG(WINAPI* fnSCardListReadersA)(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders,
921 LPDWORD pcchReaders);
922typedef LONG(WINAPI* fnSCardListReadersW)(SCARDCONTEXT hContext, LPCWSTR mszGroups,
923 LPWSTR mszReaders, LPDWORD pcchReaders);
925typedef LONG(WINAPI* fnSCardListCardsA)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
926 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
927 CHAR* mszCards, LPDWORD pcchCards);
929typedef LONG(WINAPI* fnSCardListCardsW)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
930 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
931 WCHAR* mszCards, LPDWORD pcchCards);
933typedef LONG(WINAPI* fnSCardListInterfacesA)(SCARDCONTEXT hContext, LPCSTR szCard,
934 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
935typedef LONG(WINAPI* fnSCardListInterfacesW)(SCARDCONTEXT hContext, LPCWSTR szCard,
936 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
938typedef LONG(WINAPI* fnSCardGetProviderIdA)(SCARDCONTEXT hContext, LPCSTR szCard,
939 LPGUID pguidProviderId);
940typedef LONG(WINAPI* fnSCardGetProviderIdW)(SCARDCONTEXT hContext, LPCWSTR szCard,
941 LPGUID pguidProviderId);
943typedef LONG(WINAPI* fnSCardGetCardTypeProviderNameA)(SCARDCONTEXT hContext, LPCSTR szCardName,
944 DWORD dwProviderId, CHAR* szProvider,
945 LPDWORD pcchProvider);
946typedef LONG(WINAPI* fnSCardGetCardTypeProviderNameW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
947 DWORD dwProviderId, WCHAR* szProvider,
948 LPDWORD pcchProvider);
950typedef LONG(WINAPI* fnSCardIntroduceReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
951typedef LONG(WINAPI* fnSCardIntroduceReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
953typedef LONG(WINAPI* fnSCardForgetReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
954typedef LONG(WINAPI* fnSCardForgetReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
956typedef LONG(WINAPI* fnSCardIntroduceReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
957 LPCSTR szDeviceName);
958typedef LONG(WINAPI* fnSCardIntroduceReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
959 LPCWSTR szDeviceName);
961typedef LONG(WINAPI* fnSCardForgetReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName);
962typedef LONG(WINAPI* fnSCardForgetReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName);
964typedef LONG(WINAPI* fnSCardAddReaderToGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
966typedef LONG(WINAPI* fnSCardAddReaderToGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
967 LPCWSTR szGroupName);
969typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
971typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
972 LPCWSTR szGroupName);
974typedef LONG(WINAPI* fnSCardIntroduceCardTypeA)(SCARDCONTEXT hContext, LPCSTR szCardName,
975 LPCGUID pguidPrimaryProvider,
976 LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
977 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
978typedef LONG(WINAPI* fnSCardIntroduceCardTypeW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
979 LPCGUID pguidPrimaryProvider,
980 LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
981 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
983typedef LONG(WINAPI* fnSCardSetCardTypeProviderNameA)(SCARDCONTEXT hContext, LPCSTR szCardName,
984 DWORD dwProviderId, LPCSTR szProvider);
985typedef LONG(WINAPI* fnSCardSetCardTypeProviderNameW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
986 DWORD dwProviderId, LPCWSTR szProvider);
988typedef LONG(WINAPI* fnSCardForgetCardTypeA)(SCARDCONTEXT hContext, LPCSTR szCardName);
989typedef LONG(WINAPI* fnSCardForgetCardTypeW)(SCARDCONTEXT hContext, LPCWSTR szCardName);
991typedef LONG(WINAPI* fnSCardFreeMemory)(SCARDCONTEXT hContext, LPVOID pvMem);
993typedef HANDLE(WINAPI* fnSCardAccessStartedEvent)(void);
995typedef void(WINAPI* fnSCardReleaseStartedEvent)(void);
997typedef LONG(WINAPI* fnSCardLocateCardsA)(SCARDCONTEXT hContext, LPCSTR mszCards,
999typedef LONG(WINAPI* fnSCardLocateCardsW)(SCARDCONTEXT hContext, LPCWSTR mszCards,
1002typedef LONG(WINAPI* fnSCardLocateCardsByATRA)(SCARDCONTEXT hContext,
LPSCARD_ATRMASK rgAtrMasks,
1005typedef LONG(WINAPI* fnSCardLocateCardsByATRW)(SCARDCONTEXT hContext,
LPSCARD_ATRMASK rgAtrMasks,
1009typedef LONG(WINAPI* fnSCardGetStatusChangeA)(SCARDCONTEXT hContext, DWORD dwTimeout,
1011typedef LONG(WINAPI* fnSCardGetStatusChangeW)(SCARDCONTEXT hContext, DWORD dwTimeout,
1014typedef LONG(WINAPI* fnSCardCancel)(SCARDCONTEXT hContext);
1016typedef LONG(WINAPI* fnSCardConnectA)(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
1017 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
1018 LPDWORD pdwActiveProtocol);
1019typedef LONG(WINAPI* fnSCardConnectW)(SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode,
1020 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
1021 LPDWORD pdwActiveProtocol);
1023typedef LONG(WINAPI* fnSCardReconnect)(SCARDHANDLE hCard, DWORD dwShareMode,
1024 DWORD dwPreferredProtocols, DWORD dwInitialization,
1025 LPDWORD pdwActiveProtocol);
1027typedef LONG(WINAPI* fnSCardDisconnect)(SCARDHANDLE hCard, DWORD dwDisposition);
1029typedef LONG(WINAPI* fnSCardBeginTransaction)(SCARDHANDLE hCard);
1031typedef LONG(WINAPI* fnSCardEndTransaction)(SCARDHANDLE hCard, DWORD dwDisposition);
1033typedef LONG(WINAPI* fnSCardCancelTransaction)(SCARDHANDLE hCard);
1035typedef LONG(WINAPI* fnSCardState)(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
1036 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1038typedef LONG(WINAPI* fnSCardStatusA)(SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen,
1039 LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr,
1041typedef LONG(WINAPI* fnSCardStatusW)(SCARDHANDLE hCard, LPWSTR mszReaderNames,
1042 LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol,
1043 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1046 LPCBYTE pbSendBuffer, DWORD cbSendLength,
1048 LPDWORD pcbRecvLength);
1050typedef LONG(WINAPI* fnSCardGetTransmitCount)(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
1052typedef LONG(WINAPI* fnSCardControl)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
1053 DWORD cbInBufferSize, LPVOID lpOutBuffer,
1054 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
1056typedef LONG(WINAPI* fnSCardGetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
1057 LPDWORD pcbAttrLen);
1059typedef LONG(WINAPI* fnSCardSetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
1062typedef LONG(WINAPI* fnSCardUIDlgSelectCardA)(LPOPENCARDNAMEA_EX pDlgStruc);
1063typedef LONG(WINAPI* fnSCardUIDlgSelectCardW)(LPOPENCARDNAMEW_EX pDlgStruc);
1068typedef LONG(WINAPI* fnSCardDlgExtendedError)(void);
1070typedef LONG(WINAPI* fnSCardReadCacheA)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1071 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1073typedef LONG(WINAPI* fnSCardReadCacheW)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1074 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1077typedef LONG(WINAPI* fnSCardWriteCacheA)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1078 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1080typedef LONG(WINAPI* fnSCardWriteCacheW)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1081 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1084typedef LONG(WINAPI* fnSCardGetReaderIconA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1085 LPBYTE pbIcon, LPDWORD pcbIcon);
1086typedef LONG(WINAPI* fnSCardGetReaderIconW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1087 LPBYTE pbIcon, LPDWORD pcbIcon);
1089typedef LONG(WINAPI* fnSCardGetDeviceTypeIdA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1090 LPDWORD pdwDeviceTypeId);
1091typedef LONG(WINAPI* fnSCardGetDeviceTypeIdW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1092 LPDWORD pdwDeviceTypeId);
1094typedef LONG(WINAPI* fnSCardGetReaderDeviceInstanceIdA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1095 LPSTR szDeviceInstanceId,
1096 LPDWORD pcchDeviceInstanceId);
1097typedef LONG(WINAPI* fnSCardGetReaderDeviceInstanceIdW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1098 LPWSTR szDeviceInstanceId,
1099 LPDWORD pcchDeviceInstanceId);
1101typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdA)(SCARDCONTEXT hContext,
1102 LPCSTR szDeviceInstanceId,
1104 LPDWORD pcchReaders);
1105typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdW)(SCARDCONTEXT hContext,
1106 LPCWSTR szDeviceInstanceId,
1108 LPDWORD pcchReaders);
1110typedef LONG(WINAPI* fnSCardAudit)(SCARDCONTEXT hContext, DWORD dwEvent);
1117 fnSCardEstablishContext pfnSCardEstablishContext;
1118 fnSCardReleaseContext pfnSCardReleaseContext;
1119 fnSCardIsValidContext pfnSCardIsValidContext;
1120 fnSCardListReaderGroupsA pfnSCardListReaderGroupsA;
1121 fnSCardListReaderGroupsW pfnSCardListReaderGroupsW;
1122 fnSCardListReadersA pfnSCardListReadersA;
1123 fnSCardListReadersW pfnSCardListReadersW;
1124 fnSCardListCardsA pfnSCardListCardsA;
1125 fnSCardListCardsW pfnSCardListCardsW;
1126 fnSCardListInterfacesA pfnSCardListInterfacesA;
1127 fnSCardListInterfacesW pfnSCardListInterfacesW;
1128 fnSCardGetProviderIdA pfnSCardGetProviderIdA;
1129 fnSCardGetProviderIdW pfnSCardGetProviderIdW;
1130 fnSCardGetCardTypeProviderNameA pfnSCardGetCardTypeProviderNameA;
1131 fnSCardGetCardTypeProviderNameW pfnSCardGetCardTypeProviderNameW;
1132 fnSCardIntroduceReaderGroupA pfnSCardIntroduceReaderGroupA;
1133 fnSCardIntroduceReaderGroupW pfnSCardIntroduceReaderGroupW;
1134 fnSCardForgetReaderGroupA pfnSCardForgetReaderGroupA;
1135 fnSCardForgetReaderGroupW pfnSCardForgetReaderGroupW;
1136 fnSCardIntroduceReaderA pfnSCardIntroduceReaderA;
1137 fnSCardIntroduceReaderW pfnSCardIntroduceReaderW;
1138 fnSCardForgetReaderA pfnSCardForgetReaderA;
1139 fnSCardForgetReaderW pfnSCardForgetReaderW;
1140 fnSCardAddReaderToGroupA pfnSCardAddReaderToGroupA;
1141 fnSCardAddReaderToGroupW pfnSCardAddReaderToGroupW;
1142 fnSCardRemoveReaderFromGroupA pfnSCardRemoveReaderFromGroupA;
1143 fnSCardRemoveReaderFromGroupW pfnSCardRemoveReaderFromGroupW;
1144 fnSCardIntroduceCardTypeA pfnSCardIntroduceCardTypeA;
1145 fnSCardIntroduceCardTypeW pfnSCardIntroduceCardTypeW;
1146 fnSCardSetCardTypeProviderNameA pfnSCardSetCardTypeProviderNameA;
1147 fnSCardSetCardTypeProviderNameW pfnSCardSetCardTypeProviderNameW;
1148 fnSCardForgetCardTypeA pfnSCardForgetCardTypeA;
1149 fnSCardForgetCardTypeW pfnSCardForgetCardTypeW;
1150 fnSCardFreeMemory pfnSCardFreeMemory;
1151 fnSCardAccessStartedEvent pfnSCardAccessStartedEvent;
1152 fnSCardReleaseStartedEvent pfnSCardReleaseStartedEvent;
1153 fnSCardLocateCardsA pfnSCardLocateCardsA;
1154 fnSCardLocateCardsW pfnSCardLocateCardsW;
1155 fnSCardLocateCardsByATRA pfnSCardLocateCardsByATRA;
1156 fnSCardLocateCardsByATRW pfnSCardLocateCardsByATRW;
1157 fnSCardGetStatusChangeA pfnSCardGetStatusChangeA;
1158 fnSCardGetStatusChangeW pfnSCardGetStatusChangeW;
1159 fnSCardCancel pfnSCardCancel;
1160 fnSCardConnectA pfnSCardConnectA;
1161 fnSCardConnectW pfnSCardConnectW;
1162 fnSCardReconnect pfnSCardReconnect;
1163 fnSCardDisconnect pfnSCardDisconnect;
1164 fnSCardBeginTransaction pfnSCardBeginTransaction;
1165 fnSCardEndTransaction pfnSCardEndTransaction;
1166 fnSCardCancelTransaction pfnSCardCancelTransaction;
1167 fnSCardState pfnSCardState;
1168 fnSCardStatusA pfnSCardStatusA;
1169 fnSCardStatusW pfnSCardStatusW;
1170 fnSCardTransmit pfnSCardTransmit;
1171 fnSCardGetTransmitCount pfnSCardGetTransmitCount;
1172 fnSCardControl pfnSCardControl;
1173 fnSCardGetAttrib pfnSCardGetAttrib;
1174 fnSCardSetAttrib pfnSCardSetAttrib;
1175 fnSCardUIDlgSelectCardA pfnSCardUIDlgSelectCardA;
1176 fnSCardUIDlgSelectCardW pfnSCardUIDlgSelectCardW;
1177 fnGetOpenCardNameA pfnGetOpenCardNameA;
1178 fnGetOpenCardNameW pfnGetOpenCardNameW;
1179 fnSCardDlgExtendedError pfnSCardDlgExtendedError;
1180 fnSCardReadCacheA pfnSCardReadCacheA;
1181 fnSCardReadCacheW pfnSCardReadCacheW;
1182 fnSCardWriteCacheA pfnSCardWriteCacheA;
1183 fnSCardWriteCacheW pfnSCardWriteCacheW;
1184 fnSCardGetReaderIconA pfnSCardGetReaderIconA;
1185 fnSCardGetReaderIconW pfnSCardGetReaderIconW;
1186 fnSCardGetDeviceTypeIdA pfnSCardGetDeviceTypeIdA;
1187 fnSCardGetDeviceTypeIdW pfnSCardGetDeviceTypeIdW;
1188 fnSCardGetReaderDeviceInstanceIdA pfnSCardGetReaderDeviceInstanceIdA;
1189 fnSCardGetReaderDeviceInstanceIdW pfnSCardGetReaderDeviceInstanceIdW;
1190 fnSCardListReadersWithDeviceInstanceIdA pfnSCardListReadersWithDeviceInstanceIdA;
1191 fnSCardListReadersWithDeviceInstanceIdW pfnSCardListReadersWithDeviceInstanceIdW;
1192 fnSCardAudit pfnSCardAudit;
1201 WINSCARDAPI
const char* WINAPI SCardGetErrorString(LONG errorCode);
1202 WINSCARDAPI
const char* WINAPI SCardGetAttributeString(DWORD dwAttrId);
1203 WINSCARDAPI
const char* WINAPI SCardGetProtocolString(DWORD dwProtocols);
1204 WINSCARDAPI
const char* WINAPI SCardGetShareModeString(DWORD dwShareMode);
1205 WINSCARDAPI
const char* WINAPI SCardGetDispositionString(DWORD dwDisposition);
1206 WINSCARDAPI
const char* WINAPI SCardGetScopeString(DWORD dwScope);
1207 WINSCARDAPI
const char* WINAPI SCardGetCardStateString(DWORD dwCardState);
1208 WINSCARDAPI
char* WINAPI SCardGetReaderStateString(DWORD dwReaderState);
1211 HMODULE hWinSCardLibrary);