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)
629 WINSCARDAPI LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
630 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
632 WINSCARDAPI LONG WINAPI SCardReleaseContext(SCARDCONTEXT hContext);
635 WINSCARDAPI LONG WINAPI SCardIsValidContext(SCARDCONTEXT hContext);
638 WINSCARDAPI LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups,
642 WINSCARDAPI LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups,
646 WINSCARDAPI LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups,
647 LPSTR mszReaders, LPDWORD pcchReaders);
650 WINSCARDAPI LONG WINAPI SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups,
651 LPWSTR mszReaders, LPDWORD pcchReaders);
654 WINSCARDAPI LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr,
655 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
656 CHAR* mszCards, LPDWORD pcchCards);
659 WINSCARDAPI LONG WINAPI SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr,
660 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
661 WCHAR* mszCards, LPDWORD pcchCards);
664 WINSCARDAPI LONG WINAPI SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard,
665 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
668 WINSCARDAPI LONG WINAPI SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard,
669 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
672 WINSCARDAPI LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard,
673 LPGUID pguidProviderId);
676 WINSCARDAPI LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard,
677 LPGUID pguidProviderId);
680 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
681 DWORD dwProviderId, CHAR* szProvider,
682 LPDWORD pcchProvider);
685 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
686 DWORD dwProviderId, WCHAR* szProvider,
687 LPDWORD pcchProvider);
690 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
693 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
696 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
699 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
702 WINSCARDAPI LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName,
703 LPCSTR szDeviceName);
706 WINSCARDAPI LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
707 LPCWSTR szDeviceName);
710 WINSCARDAPI LONG WINAPI SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName);
713 WINSCARDAPI LONG WINAPI SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName);
716 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
720 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
721 LPCWSTR szGroupName);
724 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
728 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
729 LPCWSTR szGroupName);
732 WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName,
733 LPCGUID pguidPrimaryProvider,
734 LPCGUID rgguidInterfaces,
735 DWORD dwInterfaceCount, LPCBYTE pbAtr,
736 LPCBYTE pbAtrMask, DWORD cbAtrLen);
739 WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName,
740 LPCGUID pguidPrimaryProvider,
741 LPCGUID rgguidInterfaces,
742 DWORD dwInterfaceCount, LPCBYTE pbAtr,
743 LPCBYTE pbAtrMask, DWORD cbAtrLen);
746 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
747 DWORD dwProviderId, LPCSTR szProvider);
750 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
751 DWORD dwProviderId, LPCWSTR szProvider);
754 WINSCARDAPI LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName);
757 WINSCARDAPI LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName);
759 WINSCARDAPI LONG WINAPI SCardFreeMemory(SCARDCONTEXT hContext, LPVOID pvMem);
761 WINSCARDAPI HANDLE WINAPI SCardAccessStartedEvent(
void);
763 WINSCARDAPI
void WINAPI SCardReleaseStartedEvent(
void);
766 WINSCARDAPI LONG WINAPI SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards,
770 WINSCARDAPI LONG WINAPI SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards,
774 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT hContext,
780 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT hContext,
786 WINSCARDAPI LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout,
791 WINSCARDAPI LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout,
795 WINSCARDAPI LONG WINAPI SCardCancel(SCARDCONTEXT hContext);
798 WINSCARDAPI LONG WINAPI SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
799 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
800 LPDWORD pdwActiveProtocol);
803 WINSCARDAPI LONG WINAPI SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader,
804 DWORD dwShareMode, DWORD dwPreferredProtocols,
805 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
808 WINSCARDAPI LONG WINAPI SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode,
809 DWORD dwPreferredProtocols, DWORD dwInitialization,
810 LPDWORD pdwActiveProtocol);
812 WINSCARDAPI LONG WINAPI SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition);
815 WINSCARDAPI LONG WINAPI SCardBeginTransaction(SCARDHANDLE hCard);
818 WINSCARDAPI LONG WINAPI SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition);
821 WINSCARDAPI LONG WINAPI SCardCancelTransaction(SCARDHANDLE hCard);
824 WINSCARDAPI LONG WINAPI SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
825 LPBYTE pbAtr, LPDWORD pcbAtrLen);
828 WINSCARDAPI LONG WINAPI SCardStatusA(SCARDHANDLE hCard, LPSTR mszReaderNames,
829 LPDWORD pcchReaderLen, LPDWORD pdwState,
830 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
833 WINSCARDAPI LONG WINAPI SCardStatusW(SCARDHANDLE hCard, LPWSTR mszReaderNames,
834 LPDWORD pcchReaderLen, LPDWORD pdwState,
835 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
839 LPCBYTE pbSendBuffer, DWORD cbSendLength,
841 LPDWORD pcbRecvLength);
844 WINSCARDAPI LONG WINAPI SCardGetTransmitCount(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
847 WINSCARDAPI LONG WINAPI SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
848 DWORD cbInBufferSize, LPVOID lpOutBuffer,
849 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
852 WINSCARDAPI LONG WINAPI SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
856 WINSCARDAPI LONG WINAPI SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
860 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardA(LPOPENCARDNAMEA_EX pDlgStruc);
863 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardW(LPOPENCARDNAMEW_EX pDlgStruc);
872 WINSCARDAPI LONG WINAPI SCardDlgExtendedError(
void);
875 WINSCARDAPI LONG WINAPI SCardReadCacheA(SCARDCONTEXT hContext,
UUID* CardIdentifier,
876 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
880 WINSCARDAPI LONG WINAPI SCardReadCacheW(SCARDCONTEXT hContext,
UUID* CardIdentifier,
881 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
885 WINSCARDAPI LONG WINAPI SCardWriteCacheA(SCARDCONTEXT hContext,
UUID* CardIdentifier,
886 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
890 WINSCARDAPI LONG WINAPI SCardWriteCacheW(SCARDCONTEXT hContext,
UUID* CardIdentifier,
891 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
895 WINSCARDAPI LONG WINAPI SCardGetReaderIconA(SCARDCONTEXT hContext, LPCSTR szReaderName,
896 LPBYTE pbIcon, LPDWORD pcbIcon);
899 WINSCARDAPI LONG WINAPI SCardGetReaderIconW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
900 LPBYTE pbIcon, LPDWORD pcbIcon);
903 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdA(SCARDCONTEXT hContext, LPCSTR szReaderName,
904 LPDWORD pdwDeviceTypeId);
907 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
908 LPDWORD pdwDeviceTypeId);
911 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext,
913 LPSTR szDeviceInstanceId,
914 LPDWORD pcchDeviceInstanceId);
917 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdW(SCARDCONTEXT hContext,
918 LPCWSTR szReaderName,
919 LPWSTR szDeviceInstanceId,
920 LPDWORD pcchDeviceInstanceId);
923 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdA(SCARDCONTEXT hContext,
924 LPCSTR szDeviceInstanceId,
926 LPDWORD pcchReaders);
929 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdW(SCARDCONTEXT hContext,
930 LPCWSTR szDeviceInstanceId,
932 LPDWORD pcchReaders);
935 WINSCARDAPI LONG WINAPI SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent);
938#define SCardListReaderGroups SCardListReaderGroupsW
939#define SCardListReaders SCardListReadersW
940#define SCardListCards SCardListCardsW
941#define SCardListInterfaces SCardListInterfacesW
942#define SCardGetProviderId SCardGetProviderIdW
943#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameW
944#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupW
945#define SCardForgetReaderGroup SCardForgetReaderGroupW
946#define SCardIntroduceReader SCardIntroduceReaderW
947#define SCardForgetReader SCardForgetReaderW
948#define SCardAddReaderToGroup SCardAddReaderToGroupW
949#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupW
950#define SCardIntroduceCardType SCardIntroduceCardTypeW
951#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameW
952#define SCardForgetCardType SCardForgetCardTypeW
953#define SCardLocateCards SCardLocateCardsW
954#define SCardLocateCardsByATR SCardLocateCardsByATRW
955#define SCardGetStatusChange SCardGetStatusChangeW
956#define SCardConnect SCardConnectW
957#define SCardStatus SCardStatusW
958#define SCardUIDlgSelectCard SCardUIDlgSelectCardW
959#define GetOpenCardName GetOpenCardNameW
960#define SCardReadCache SCardReadCacheW
961#define SCardWriteCache SCardWriteCacheW
962#define SCardGetReaderIcon SCardGetReaderIconW
963#define SCardGetDeviceTypeId SCardGetDeviceTypeIdW
964#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdW
965#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstanceIdW
967#define SCardListReaderGroups SCardListReaderGroupsA
968#define SCardListReaders SCardListReadersA
969#define SCardListCards SCardListCardsA
970#define SCardListInterfaces SCardListInterfacesA
971#define SCardGetProviderId SCardGetProviderIdA
972#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameA
973#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupA
974#define SCardForgetReaderGroup SCardForgetReaderGroupA
975#define SCardIntroduceReader SCardIntroduceReaderA
976#define SCardForgetReader SCardForgetReaderA
977#define SCardAddReaderToGroup SCardAddReaderToGroupA
978#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupA
979#define SCardIntroduceCardType SCardIntroduceCardTypeA
980#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameA
981#define SCardForgetCardType SCardForgetCardTypeA
982#define SCardLocateCards SCardLocateCardsA
983#define SCardLocateCardsByATR SCardLocateCardsByATRA
984#define SCardGetStatusChange SCardGetStatusChangeA
985#define SCardConnect SCardConnectA
986#define SCardStatus SCardStatusA
987#define SCardUIDlgSelectCard SCardUIDlgSelectCardA
988#define GetOpenCardName GetOpenCardNameA
989#define SCardReadCache SCardReadCacheA
990#define SCardWriteCache SCardWriteCacheA
991#define SCardGetReaderIcon SCardGetReaderIconA
992#define SCardGetDeviceTypeId SCardGetDeviceTypeIdA
993#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdA
994#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstanceIdA
1005typedef LONG(WINAPI* fnSCardEstablishContext)(DWORD dwScope, LPCVOID pvReserved1,
1006 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
1008typedef LONG(WINAPI* fnSCardReleaseContext)(SCARDCONTEXT hContext);
1010typedef LONG(WINAPI* fnSCardIsValidContext)(SCARDCONTEXT hContext);
1012typedef LONG(WINAPI* fnSCardListReaderGroupsA)(SCARDCONTEXT hContext, LPSTR mszGroups,
1013 LPDWORD pcchGroups);
1014typedef LONG(WINAPI* fnSCardListReaderGroupsW)(SCARDCONTEXT hContext, LPWSTR mszGroups,
1015 LPDWORD pcchGroups);
1017typedef LONG(WINAPI* fnSCardListReadersA)(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders,
1018 LPDWORD pcchReaders);
1019typedef LONG(WINAPI* fnSCardListReadersW)(SCARDCONTEXT hContext, LPCWSTR mszGroups,
1020 LPWSTR mszReaders, LPDWORD pcchReaders);
1022typedef LONG(WINAPI* fnSCardListCardsA)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
1023 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
1024 CHAR* mszCards, LPDWORD pcchCards);
1026typedef LONG(WINAPI* fnSCardListCardsW)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
1027 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
1028 WCHAR* mszCards, LPDWORD pcchCards);
1030typedef LONG(WINAPI* fnSCardListInterfacesA)(SCARDCONTEXT hContext, LPCSTR szCard,
1031 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
1032typedef LONG(WINAPI* fnSCardListInterfacesW)(SCARDCONTEXT hContext, LPCWSTR szCard,
1033 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
1035typedef LONG(WINAPI* fnSCardGetProviderIdA)(SCARDCONTEXT hContext, LPCSTR szCard,
1036 LPGUID pguidProviderId);
1037typedef LONG(WINAPI* fnSCardGetProviderIdW)(SCARDCONTEXT hContext, LPCWSTR szCard,
1038 LPGUID pguidProviderId);
1040typedef LONG(WINAPI* fnSCardGetCardTypeProviderNameA)(SCARDCONTEXT hContext, LPCSTR szCardName,
1041 DWORD dwProviderId, CHAR* szProvider,
1042 LPDWORD pcchProvider);
1043typedef LONG(WINAPI* fnSCardGetCardTypeProviderNameW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
1044 DWORD dwProviderId, WCHAR* szProvider,
1045 LPDWORD pcchProvider);
1047typedef LONG(WINAPI* fnSCardIntroduceReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
1048typedef LONG(WINAPI* fnSCardIntroduceReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
1050typedef LONG(WINAPI* fnSCardForgetReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
1051typedef LONG(WINAPI* fnSCardForgetReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
1053typedef LONG(WINAPI* fnSCardIntroduceReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1054 LPCSTR szDeviceName);
1055typedef LONG(WINAPI* fnSCardIntroduceReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1056 LPCWSTR szDeviceName);
1058typedef LONG(WINAPI* fnSCardForgetReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName);
1059typedef LONG(WINAPI* fnSCardForgetReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName);
1061typedef LONG(WINAPI* fnSCardAddReaderToGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1062 LPCSTR szGroupName);
1063typedef LONG(WINAPI* fnSCardAddReaderToGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1064 LPCWSTR szGroupName);
1066typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1067 LPCSTR szGroupName);
1068typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1069 LPCWSTR szGroupName);
1071typedef LONG(WINAPI* fnSCardIntroduceCardTypeA)(SCARDCONTEXT hContext, LPCSTR szCardName,
1072 LPCGUID pguidPrimaryProvider,
1073 LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
1074 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
1075typedef LONG(WINAPI* fnSCardIntroduceCardTypeW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
1076 LPCGUID pguidPrimaryProvider,
1077 LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
1078 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
1080typedef LONG(WINAPI* fnSCardSetCardTypeProviderNameA)(SCARDCONTEXT hContext, LPCSTR szCardName,
1081 DWORD dwProviderId, LPCSTR szProvider);
1082typedef LONG(WINAPI* fnSCardSetCardTypeProviderNameW)(SCARDCONTEXT hContext, LPCWSTR szCardName,
1083 DWORD dwProviderId, LPCWSTR szProvider);
1085typedef LONG(WINAPI* fnSCardForgetCardTypeA)(SCARDCONTEXT hContext, LPCSTR szCardName);
1086typedef LONG(WINAPI* fnSCardForgetCardTypeW)(SCARDCONTEXT hContext, LPCWSTR szCardName);
1088typedef LONG(WINAPI* fnSCardFreeMemory)(SCARDCONTEXT hContext, LPVOID pvMem);
1090typedef HANDLE(WINAPI* fnSCardAccessStartedEvent)(void);
1092typedef void(WINAPI* fnSCardReleaseStartedEvent)(void);
1094typedef LONG(WINAPI* fnSCardLocateCardsA)(SCARDCONTEXT hContext, LPCSTR mszCards,
1096typedef LONG(WINAPI* fnSCardLocateCardsW)(SCARDCONTEXT hContext, LPCWSTR mszCards,
1099typedef LONG(WINAPI* fnSCardLocateCardsByATRA)(SCARDCONTEXT hContext,
LPSCARD_ATRMASK rgAtrMasks,
1102typedef LONG(WINAPI* fnSCardLocateCardsByATRW)(SCARDCONTEXT hContext,
LPSCARD_ATRMASK rgAtrMasks,
1106typedef LONG(WINAPI* fnSCardGetStatusChangeA)(SCARDCONTEXT hContext, DWORD dwTimeout,
1108typedef LONG(WINAPI* fnSCardGetStatusChangeW)(SCARDCONTEXT hContext, DWORD dwTimeout,
1111typedef LONG(WINAPI* fnSCardCancel)(SCARDCONTEXT hContext);
1113typedef LONG(WINAPI* fnSCardConnectA)(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
1114 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
1115 LPDWORD pdwActiveProtocol);
1116typedef LONG(WINAPI* fnSCardConnectW)(SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode,
1117 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
1118 LPDWORD pdwActiveProtocol);
1120typedef LONG(WINAPI* fnSCardReconnect)(SCARDHANDLE hCard, DWORD dwShareMode,
1121 DWORD dwPreferredProtocols, DWORD dwInitialization,
1122 LPDWORD pdwActiveProtocol);
1124typedef LONG(WINAPI* fnSCardDisconnect)(SCARDHANDLE hCard, DWORD dwDisposition);
1126typedef LONG(WINAPI* fnSCardBeginTransaction)(SCARDHANDLE hCard);
1128typedef LONG(WINAPI* fnSCardEndTransaction)(SCARDHANDLE hCard, DWORD dwDisposition);
1130typedef LONG(WINAPI* fnSCardCancelTransaction)(SCARDHANDLE hCard);
1132typedef LONG(WINAPI* fnSCardState)(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
1133 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1135typedef LONG(WINAPI* fnSCardStatusA)(SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen,
1136 LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr,
1138typedef LONG(WINAPI* fnSCardStatusW)(SCARDHANDLE hCard, LPWSTR mszReaderNames,
1139 LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol,
1140 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1143 LPCBYTE pbSendBuffer, DWORD cbSendLength,
1145 LPDWORD pcbRecvLength);
1147typedef LONG(WINAPI* fnSCardGetTransmitCount)(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
1149typedef LONG(WINAPI* fnSCardControl)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
1150 DWORD cbInBufferSize, LPVOID lpOutBuffer,
1151 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
1153typedef LONG(WINAPI* fnSCardGetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
1154 LPDWORD pcbAttrLen);
1156typedef LONG(WINAPI* fnSCardSetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
1159typedef LONG(WINAPI* fnSCardUIDlgSelectCardA)(LPOPENCARDNAMEA_EX pDlgStruc);
1160typedef LONG(WINAPI* fnSCardUIDlgSelectCardW)(LPOPENCARDNAMEW_EX pDlgStruc);
1165typedef LONG(WINAPI* fnSCardDlgExtendedError)(void);
1167typedef LONG(WINAPI* fnSCardReadCacheA)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1168 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1170typedef LONG(WINAPI* fnSCardReadCacheW)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1171 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1174typedef LONG(WINAPI* fnSCardWriteCacheA)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1175 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1177typedef LONG(WINAPI* fnSCardWriteCacheW)(SCARDCONTEXT hContext,
UUID* CardIdentifier,
1178 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1181typedef LONG(WINAPI* fnSCardGetReaderIconA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1182 LPBYTE pbIcon, LPDWORD pcbIcon);
1183typedef LONG(WINAPI* fnSCardGetReaderIconW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1184 LPBYTE pbIcon, LPDWORD pcbIcon);
1186typedef LONG(WINAPI* fnSCardGetDeviceTypeIdA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1187 LPDWORD pdwDeviceTypeId);
1188typedef LONG(WINAPI* fnSCardGetDeviceTypeIdW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1189 LPDWORD pdwDeviceTypeId);
1191typedef LONG(WINAPI* fnSCardGetReaderDeviceInstanceIdA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1192 LPSTR szDeviceInstanceId,
1193 LPDWORD pcchDeviceInstanceId);
1194typedef LONG(WINAPI* fnSCardGetReaderDeviceInstanceIdW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1195 LPWSTR szDeviceInstanceId,
1196 LPDWORD pcchDeviceInstanceId);
1198typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdA)(SCARDCONTEXT hContext,
1199 LPCSTR szDeviceInstanceId,
1201 LPDWORD pcchReaders);
1202typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdW)(SCARDCONTEXT hContext,
1203 LPCWSTR szDeviceInstanceId,
1205 LPDWORD pcchReaders);
1207typedef LONG(WINAPI* fnSCardAudit)(SCARDCONTEXT hContext, DWORD dwEvent);
1214 WINPR_ATTR_NODISCARD fnSCardEstablishContext pfnSCardEstablishContext;
1215 WINPR_ATTR_NODISCARD fnSCardReleaseContext pfnSCardReleaseContext;
1216 WINPR_ATTR_NODISCARD fnSCardIsValidContext pfnSCardIsValidContext;
1217 WINPR_ATTR_NODISCARD fnSCardListReaderGroupsA pfnSCardListReaderGroupsA;
1218 WINPR_ATTR_NODISCARD fnSCardListReaderGroupsW pfnSCardListReaderGroupsW;
1219 WINPR_ATTR_NODISCARD fnSCardListReadersA pfnSCardListReadersA;
1220 WINPR_ATTR_NODISCARD fnSCardListReadersW pfnSCardListReadersW;
1221 WINPR_ATTR_NODISCARD fnSCardListCardsA pfnSCardListCardsA;
1222 WINPR_ATTR_NODISCARD fnSCardListCardsW pfnSCardListCardsW;
1223 WINPR_ATTR_NODISCARD fnSCardListInterfacesA pfnSCardListInterfacesA;
1224 WINPR_ATTR_NODISCARD fnSCardListInterfacesW pfnSCardListInterfacesW;
1225 WINPR_ATTR_NODISCARD fnSCardGetProviderIdA pfnSCardGetProviderIdA;
1226 WINPR_ATTR_NODISCARD fnSCardGetProviderIdW pfnSCardGetProviderIdW;
1227 WINPR_ATTR_NODISCARD fnSCardGetCardTypeProviderNameA pfnSCardGetCardTypeProviderNameA;
1228 WINPR_ATTR_NODISCARD fnSCardGetCardTypeProviderNameW pfnSCardGetCardTypeProviderNameW;
1229 WINPR_ATTR_NODISCARD fnSCardIntroduceReaderGroupA pfnSCardIntroduceReaderGroupA;
1230 WINPR_ATTR_NODISCARD fnSCardIntroduceReaderGroupW pfnSCardIntroduceReaderGroupW;
1231 WINPR_ATTR_NODISCARD fnSCardForgetReaderGroupA pfnSCardForgetReaderGroupA;
1232 WINPR_ATTR_NODISCARD fnSCardForgetReaderGroupW pfnSCardForgetReaderGroupW;
1233 WINPR_ATTR_NODISCARD fnSCardIntroduceReaderA pfnSCardIntroduceReaderA;
1234 WINPR_ATTR_NODISCARD fnSCardIntroduceReaderW pfnSCardIntroduceReaderW;
1235 WINPR_ATTR_NODISCARD fnSCardForgetReaderA pfnSCardForgetReaderA;
1236 WINPR_ATTR_NODISCARD fnSCardForgetReaderW pfnSCardForgetReaderW;
1237 WINPR_ATTR_NODISCARD fnSCardAddReaderToGroupA pfnSCardAddReaderToGroupA;
1238 WINPR_ATTR_NODISCARD fnSCardAddReaderToGroupW pfnSCardAddReaderToGroupW;
1239 WINPR_ATTR_NODISCARD fnSCardRemoveReaderFromGroupA pfnSCardRemoveReaderFromGroupA;
1240 WINPR_ATTR_NODISCARD fnSCardRemoveReaderFromGroupW pfnSCardRemoveReaderFromGroupW;
1241 WINPR_ATTR_NODISCARD fnSCardIntroduceCardTypeA pfnSCardIntroduceCardTypeA;
1242 WINPR_ATTR_NODISCARD fnSCardIntroduceCardTypeW pfnSCardIntroduceCardTypeW;
1243 WINPR_ATTR_NODISCARD fnSCardSetCardTypeProviderNameA pfnSCardSetCardTypeProviderNameA;
1244 WINPR_ATTR_NODISCARD fnSCardSetCardTypeProviderNameW pfnSCardSetCardTypeProviderNameW;
1245 WINPR_ATTR_NODISCARD fnSCardForgetCardTypeA pfnSCardForgetCardTypeA;
1246 WINPR_ATTR_NODISCARD fnSCardForgetCardTypeW pfnSCardForgetCardTypeW;
1247 fnSCardFreeMemory pfnSCardFreeMemory;
1248 WINPR_ATTR_NODISCARD fnSCardAccessStartedEvent pfnSCardAccessStartedEvent;
1249 fnSCardReleaseStartedEvent pfnSCardReleaseStartedEvent;
1250 WINPR_ATTR_NODISCARD fnSCardLocateCardsA pfnSCardLocateCardsA;
1251 WINPR_ATTR_NODISCARD fnSCardLocateCardsW pfnSCardLocateCardsW;
1252 WINPR_ATTR_NODISCARD fnSCardLocateCardsByATRA pfnSCardLocateCardsByATRA;
1253 WINPR_ATTR_NODISCARD fnSCardLocateCardsByATRW pfnSCardLocateCardsByATRW;
1254 WINPR_ATTR_NODISCARD fnSCardGetStatusChangeA pfnSCardGetStatusChangeA;
1255 WINPR_ATTR_NODISCARD fnSCardGetStatusChangeW pfnSCardGetStatusChangeW;
1256 fnSCardCancel pfnSCardCancel;
1257 WINPR_ATTR_NODISCARD fnSCardConnectA pfnSCardConnectA;
1258 WINPR_ATTR_NODISCARD fnSCardConnectW pfnSCardConnectW;
1259 WINPR_ATTR_NODISCARD fnSCardReconnect pfnSCardReconnect;
1260 WINPR_ATTR_NODISCARD fnSCardDisconnect pfnSCardDisconnect;
1261 WINPR_ATTR_NODISCARD fnSCardBeginTransaction pfnSCardBeginTransaction;
1262 WINPR_ATTR_NODISCARD fnSCardEndTransaction pfnSCardEndTransaction;
1263 fnSCardCancelTransaction pfnSCardCancelTransaction;
1264 WINPR_ATTR_NODISCARD fnSCardState pfnSCardState;
1265 WINPR_ATTR_NODISCARD fnSCardStatusA pfnSCardStatusA;
1266 WINPR_ATTR_NODISCARD fnSCardStatusW pfnSCardStatusW;
1267 WINPR_ATTR_NODISCARD fnSCardTransmit pfnSCardTransmit;
1268 WINPR_ATTR_NODISCARD fnSCardGetTransmitCount pfnSCardGetTransmitCount;
1269 WINPR_ATTR_NODISCARD fnSCardControl pfnSCardControl;
1270 WINPR_ATTR_NODISCARD fnSCardGetAttrib pfnSCardGetAttrib;
1271 WINPR_ATTR_NODISCARD fnSCardSetAttrib pfnSCardSetAttrib;
1272 WINPR_ATTR_NODISCARD fnSCardUIDlgSelectCardA pfnSCardUIDlgSelectCardA;
1273 WINPR_ATTR_NODISCARD fnSCardUIDlgSelectCardW pfnSCardUIDlgSelectCardW;
1274 WINPR_ATTR_NODISCARD fnGetOpenCardNameA pfnGetOpenCardNameA;
1275 WINPR_ATTR_NODISCARD fnGetOpenCardNameW pfnGetOpenCardNameW;
1276 WINPR_ATTR_NODISCARD fnSCardDlgExtendedError pfnSCardDlgExtendedError;
1277 WINPR_ATTR_NODISCARD fnSCardReadCacheA pfnSCardReadCacheA;
1278 WINPR_ATTR_NODISCARD fnSCardReadCacheW pfnSCardReadCacheW;
1279 WINPR_ATTR_NODISCARD fnSCardWriteCacheA pfnSCardWriteCacheA;
1280 WINPR_ATTR_NODISCARD fnSCardWriteCacheW pfnSCardWriteCacheW;
1281 WINPR_ATTR_NODISCARD fnSCardGetReaderIconA pfnSCardGetReaderIconA;
1282 WINPR_ATTR_NODISCARD fnSCardGetReaderIconW pfnSCardGetReaderIconW;
1283 WINPR_ATTR_NODISCARD fnSCardGetDeviceTypeIdA pfnSCardGetDeviceTypeIdA;
1284 WINPR_ATTR_NODISCARD fnSCardGetDeviceTypeIdW pfnSCardGetDeviceTypeIdW;
1285 WINPR_ATTR_NODISCARD fnSCardGetReaderDeviceInstanceIdA pfnSCardGetReaderDeviceInstanceIdA;
1286 WINPR_ATTR_NODISCARD fnSCardGetReaderDeviceInstanceIdW pfnSCardGetReaderDeviceInstanceIdW;
1287 WINPR_ATTR_NODISCARD fnSCardListReadersWithDeviceInstanceIdA
1288 pfnSCardListReadersWithDeviceInstanceIdA;
1289 WINPR_ATTR_NODISCARD fnSCardListReadersWithDeviceInstanceIdW
1290 pfnSCardListReadersWithDeviceInstanceIdW;
1291 WINPR_ATTR_NODISCARD fnSCardAudit pfnSCardAudit;
1300 WINPR_ATTR_NODISCARD
1301 WINSCARDAPI
const char* WINAPI SCardGetErrorString(LONG errorCode);
1303 WINPR_ATTR_NODISCARD
1304 WINSCARDAPI
const char* WINAPI SCardGetAttributeString(DWORD dwAttrId);
1306 WINPR_ATTR_NODISCARD
1307 WINSCARDAPI
const char* WINAPI SCardGetProtocolString(DWORD dwProtocols);
1309 WINPR_ATTR_NODISCARD
1310 WINSCARDAPI
const char* WINAPI SCardGetShareModeString(DWORD dwShareMode);
1312 WINPR_ATTR_NODISCARD
1313 WINSCARDAPI
const char* WINAPI SCardGetDispositionString(DWORD dwDisposition);
1315 WINPR_ATTR_NODISCARD
1316 WINSCARDAPI
const char* WINAPI SCardGetScopeString(DWORD dwScope);
1318 WINPR_ATTR_NODISCARD
1319 WINSCARDAPI
const char* WINAPI SCardGetCardStateString(DWORD dwCardState);
1321 WINPR_ATTR_NODISCARD
1322 WINSCARDAPI
char* WINAPI SCardGetReaderStateString(DWORD dwReaderState);
1324 WINPR_ATTR_NODISCARD
1326 HMODULE hWinSCardLibrary);
1328 WINPR_ATTR_NODISCARD