FreeRDP
Loading...
Searching...
No Matches
include/winpr/smartcard.h
1
22#ifndef WINPR_SMARTCARD_H
23#define WINPR_SMARTCARD_H
24
25#include <winpr/platform.h>
26#include <winpr/winpr.h>
27#include <winpr/wtypes.h>
28
29#include <winpr/io.h>
30#include <winpr/error.h>
31
32WINPR_PRAGMA_DIAG_PUSH
33WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
34
35#ifndef _WINSCARD_H_
36// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
37#define _WINSCARD_H_ /* do not include winscard.h */
38#endif
39
40WINPR_PRAGMA_DIAG_POP
41
42#ifndef SCARD_S_SUCCESS
43
44#define SCARD_S_SUCCESS NO_ERROR
45
46#define SCARD_F_INTERNAL_ERROR -2146435071l // (0x80100001L)
47#define SCARD_E_CANCELLED -2146435070l // (0x80100002L)
48#define SCARD_E_INVALID_HANDLE -2146435069l // (0x80100003L)
49#define SCARD_E_INVALID_PARAMETER -2146435068l // (0x80100004L)
50#define SCARD_E_INVALID_TARGET -2146435067l // (0x80100005L)
51#define SCARD_E_NO_MEMORY -2146435066l // (0x80100006L)
52#define SCARD_F_WAITED_TOO_LONG -2146435065l // (0x80100007L)
53#define SCARD_E_INSUFFICIENT_BUFFER -2146435064l // (0x80100008L)
54#define SCARD_E_UNKNOWN_READER -2146435063l // (0x80100009L)
55#define SCARD_E_TIMEOUT -2146435062l // (0x8010000AL)
56#define SCARD_E_SHARING_VIOLATION -2146435061l // (0x8010000BL)
57#define SCARD_E_NO_SMARTCARD -2146435060l // (0x8010000CL)
58#define SCARD_E_UNKNOWN_CARD -2146435059l // (0x8010000DL)
59#define SCARD_E_CANT_DISPOSE -2146435058l // (0x8010000EL)
60#define SCARD_E_PROTO_MISMATCH -2146435057l // (0x8010000FL)
61#define SCARD_E_NOT_READY -2146435056l // (0x80100010L)
62#define SCARD_E_INVALID_VALUE -2146435055l // (0x80100011L)
63#define SCARD_E_SYSTEM_CANCELLED -2146435054l // (0x80100012L)
64#define SCARD_F_COMM_ERROR -2146435053l // (0x80100013L)
65#define SCARD_F_UNKNOWN_ERROR -2146435052l // (0x80100014L)
66#define SCARD_E_INVALID_ATR -2146435051l // (0x80100015L)
67#define SCARD_E_NOT_TRANSACTED -2146435050l // (0x80100016L)
68#define SCARD_E_READER_UNAVAILABLE -2146435049l // (0x80100017L)
69#define SCARD_P_SHUTDOWN -2146435048l // (0x80100018L)
70#define SCARD_E_PCI_TOO_SMALL -2146435047l // (0x80100019L)
71#define SCARD_E_READER_UNSUPPORTED -2146435046l // (0x8010001AL)
72#define SCARD_E_DUPLICATE_READER -2146435045l // (0x8010001BL)
73#define SCARD_E_CARD_UNSUPPORTED -2146435044l // (0x8010001CL)
74#define SCARD_E_NO_SERVICE -2146435043l // (0x8010001DL)
75#define SCARD_E_SERVICE_STOPPED -2146435042l // (0x8010001EL)
76#define SCARD_E_UNEXPECTED -2146435041l // (0x8010001FL)
77#define SCARD_E_ICC_INSTALLATION -2146435040l // (0x80100020L)
78#define SCARD_E_ICC_CREATEORDER -2146435039l // (0x80100021L)
79#define SCARD_E_UNSUPPORTED_FEATURE -2146435038l // (0x80100022L)
80#define SCARD_E_DIR_NOT_FOUND -2146435037l // (0x80100023L)
81#define SCARD_E_FILE_NOT_FOUND -2146435036l // (0x80100024L)
82#define SCARD_E_NO_DIR -2146435035l // (0x80100025L)
83#define SCARD_E_NO_FILE -2146435034l // (0x80100026L)
84#define SCARD_E_NO_ACCESS -2146435033l // (0x80100027L)
85#define SCARD_E_WRITE_TOO_MANY -2146435032l // (0x80100028L)
86#define SCARD_E_BAD_SEEK -2146435031l // (0x80100029L)
87#define SCARD_E_INVALID_CHV -2146435030l // (0x8010002AL)
88#define SCARD_E_UNKNOWN_RES_MNG -2146435029l // (0x8010002BL)
89#define SCARD_E_NO_SUCH_CERTIFICATE -2146435028l // (0x8010002CL)
90#define SCARD_E_CERTIFICATE_UNAVAILABLE -2146435027l // (0x8010002DL)
91#define SCARD_E_NO_READERS_AVAILABLE -2146435026l // (0x8010002EL)
92#define SCARD_E_COMM_DATA_LOST -2146435025l // (0x8010002FL)
93#define SCARD_E_NO_KEY_CONTAINER -2146435024l // (0x80100030L)
94#define SCARD_E_SERVER_TOO_BUSY -2146435023l // (0x80100031L)
95#define SCARD_E_PIN_CACHE_EXPIRED -2146435022l // (0x80100032L)
96#define SCARD_E_NO_PIN_CACHE -2146435021l // (0x80100033L)
97#define SCARD_E_READ_ONLY_CARD -2146435020l // (0x80100034L)
98
99#define SCARD_W_UNSUPPORTED_CARD -2146434971l // (0x80100065L)
100#define SCARD_W_UNRESPONSIVE_CARD -2146434970l // (0x80100066L)
101#define SCARD_W_UNPOWERED_CARD -2146434969l // (0x80100067L)
102#define SCARD_W_RESET_CARD -2146434968l // (0x80100068L)
103#define SCARD_W_REMOVED_CARD -2146434967l // (0x80100069L)
104#define SCARD_W_SECURITY_VIOLATION -2146434966l // (0x8010006AL)
105#define SCARD_W_WRONG_CHV -2146434965l // (0x8010006BL)
106#define SCARD_W_CHV_BLOCKED -2146434964l // (0x8010006CL)
107#define SCARD_W_EOF -2146434963l // (0x8010006DL)
108#define SCARD_W_CANCELLED_BY_USER -2146434962l // (0x8010006EL)
109#define SCARD_W_CARD_NOT_AUTHENTICATED -2146434961l // (0x8010006FL)
110#define SCARD_W_CACHE_ITEM_NOT_FOUND -2146434960l // (0x80100070L)
111#define SCARD_W_CACHE_ITEM_STALE -2146434959l // (0x80100071L)
112#define SCARD_W_CACHE_ITEM_TOO_BIG -2146434958l // (0x80100072L)
113
114#endif
115
116/* ------------------------ missing definition with mingw --------------------*/
117#ifndef SCARD_E_PIN_CACHE_EXPIRED
118#define SCARD_E_PIN_CACHE_EXPIRED -2146435022l // (0x80100032L)
119#endif
120
121#ifndef SCARD_E_NO_PIN_CACHE
122#define SCARD_E_NO_PIN_CACHE -2146435021l // (0x80100033L)
123#endif
124
125#ifndef SCARD_E_READ_ONLY_CARD
126#define SCARD_E_READ_ONLY_CARD -2146435020l // (0x80100034L)
127#endif
128
129#ifndef SCARD_W_CACHE_ITEM_TOO_BIG
130#define SCARD_W_CACHE_ITEM_TOO_BIG -2146434958l // (0x80100072L)
131#endif
132/* -------------------------------------------------------------------------- */
133
134#define SCARD_ATR_LENGTH 33
135
136#define SCARD_PROTOCOL_UNDEFINED 0x00000000u
137#define SCARD_PROTOCOL_T0 0x00000001u
138#define SCARD_PROTOCOL_T1 0x00000002u
139#define SCARD_PROTOCOL_RAW 0x00010000u
140
141#define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
142#define SCARD_PROTOCOL_DEFAULT 0x80000000u
143#define SCARD_PROTOCOL_OPTIMAL 0x00000000u
144
145#define SCARD_POWER_DOWN 0
146#define SCARD_COLD_RESET 1
147#define SCARD_WARM_RESET 2
148
149#define SCARD_CTL_CODE(code) \
150 CTL_CODE(FILE_DEVICE_SMARTCARD, (code), METHOD_BUFFERED, FILE_ANY_ACCESS)
151
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)
165
166#define IOCTL_SMARTCARD_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400)
167
168#define MAXIMUM_ATTR_STRING_LENGTH 32
169#define MAXIMUM_SMARTCARD_READERS 10
170
171#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
172
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
184
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)
200
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)
213
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)
219
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)
224
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)
232
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)
236
237#ifdef UNICODE
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
240#else
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
243#endif
244
245#define SCARD_T0_HEADER_LENGTH 7
246#define SCARD_T0_CMD_LENGTH 5
247
248#define SCARD_T1_PROLOGUE_LENGTH 3
249#define SCARD_T1_EPILOGUE_LENGTH 2
250#define SCARD_T1_MAX_IFS 254
251
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
259
260#pragma pack(push, 1)
261
262typedef struct
263{
264 DWORD dwProtocol;
265 DWORD cbPciLength;
268
269typedef struct
270{
271 BYTE bCla, bIns, bP1, bP2, bP3;
273
274typedef struct
275{
276 SCARD_IO_REQUEST ioRequest;
277 BYTE bSw1, bSw2;
278 union
279 {
280 SCARD_T0_COMMAND CmdBytes;
281 BYTE rgbHeader[5];
282 } DUMMYUNIONNAME;
284
286
287typedef struct
288{
289 SCARD_IO_REQUEST ioRequest;
292
293#define SCARD_READER_SWALLOWS 0x00000001
294#define SCARD_READER_EJECTS 0x00000002
295#define SCARD_READER_CONFISCATES 0x00000004
296
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
308
309#ifndef WINSCARDAPI
310#define WINSCARDAPI WINPR_API
311#endif
312
313typedef ULONG_PTR SCARDCONTEXT;
314typedef SCARDCONTEXT *PSCARDCONTEXT, *LPSCARDCONTEXT;
315
316typedef ULONG_PTR SCARDHANDLE;
317typedef SCARDHANDLE *PSCARDHANDLE, *LPSCARDHANDLE;
318
319#define SCARD_AUTOALLOCATE UINT32_MAX
320
321#define SCARD_SCOPE_USER 0
322#define SCARD_SCOPE_TERMINAL 1
323#define SCARD_SCOPE_SYSTEM 2
324
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
337
338#define SCARD_SHARE_EXCLUSIVE 1
339#define SCARD_SHARE_SHARED 2
340#define SCARD_SHARE_DIRECT 3
341
342#define SCARD_LEAVE_CARD 0
343#define SCARD_RESET_CARD 1
344#define SCARD_UNPOWER_CARD 2
345#define SCARD_EJECT_CARD 3
346
347#define SC_DLG_MINIMAL_UI 0x01
348#define SC_DLG_NO_UI 0x02
349#define SC_DLG_FORCE_UI 0x04
350
351#define SCERR_NOCARDNAME 0x4000
352#define SCERR_NOGUIDS 0x8000
353
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);
358
359typedef BOOL(WINAPI* LPOCNCHKPROC)(SCARDCONTEXT hSCardContext, SCARDHANDLE hCard, PVOID pvUserData);
360typedef void(WINAPI* LPOCNDSCPROC)(SCARDCONTEXT hSCardContext, SCARDHANDLE hCard, PVOID pvUserData);
361
362#define SCARD_READER_SEL_AUTH_PACKAGE ((DWORD)-629)
363
364#define SCARD_AUDIT_CHV_FAILURE 0x0
365#define SCARD_AUDIT_CHV_SUCCESS 0x1
366
367#define SCardListCardTypes SCardListCards
368
369#define PCSCardIntroduceCardType(hContext, szCardName, pbAtr, pbAtrMask, cbAtrLen, \
370 pguidPrimaryProvider, rgguidInterfaces, dwInterfaceCount) \
371 SCardIntroduceCardType(hContext, szCardName, pguidPrimaryProvider, rgguidInterfaces, \
372 dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen)
373
374#define SCardGetReaderCapabilities SCardGetAttrib
375#define SCardSetReaderCapabilities SCardSetAttrib
376
377typedef struct
378{
379 LPSTR szReader;
380 LPVOID pvUserData;
381 DWORD dwCurrentState;
382 DWORD dwEventState;
383 DWORD cbAtr;
384 BYTE rgbAtr[36];
386
387typedef struct
388{
389 LPWSTR szReader;
390 LPVOID pvUserData;
391 DWORD dwCurrentState;
392 DWORD dwEventState;
393 DWORD cbAtr;
394 BYTE rgbAtr[36];
396
397typedef struct
398{
399 DWORD cbAtr;
400 BYTE rgbAtr[36];
401 BYTE rgbMask[36];
403
404typedef struct
405{
406 DWORD dwStructSize;
407 LPSTR lpstrGroupNames;
408 DWORD nMaxGroupNames;
409 LPCGUID rgguidInterfaces;
410 DWORD cguidInterfaces;
411 LPSTR lpstrCardNames;
412 DWORD nMaxCardNames;
413 LPOCNCHKPROC lpfnCheck;
414 LPOCNCONNPROCA lpfnConnect;
415 LPOCNDSCPROC lpfnDisconnect;
416 LPVOID pvUserData;
417 DWORD dwShareMode;
418 DWORD dwPreferredProtocols;
420
421typedef struct
422{
423 DWORD dwStructSize;
424 LPWSTR lpstrGroupNames;
425 DWORD nMaxGroupNames;
426 LPCGUID rgguidInterfaces;
427 DWORD cguidInterfaces;
428 LPWSTR lpstrCardNames;
429 DWORD nMaxCardNames;
430 LPOCNCHKPROC lpfnCheck;
431 LPOCNCONNPROCW lpfnConnect;
432 LPOCNDSCPROC lpfnDisconnect;
433 LPVOID pvUserData;
434 DWORD dwShareMode;
435 DWORD dwPreferredProtocols;
437
438typedef struct
439{
440 DWORD dwStructSize;
441 SCARDCONTEXT hSCardContext;
442 HWND hwndOwner;
443 DWORD dwFlags;
444 LPCSTR lpstrTitle;
445 LPCSTR lpstrSearchDesc;
446 HICON hIcon;
447 POPENCARD_SEARCH_CRITERIAA pOpenCardSearchCriteria;
448 LPOCNCONNPROCA lpfnConnect;
449 LPVOID pvUserData;
450 DWORD dwShareMode;
451 DWORD dwPreferredProtocols;
452 LPSTR lpstrRdr;
453 DWORD nMaxRdr;
454 LPSTR lpstrCard;
455 DWORD nMaxCard;
456 DWORD dwActiveProtocol;
457 SCARDHANDLE hCardHandle;
459
460typedef struct
461{
462 DWORD dwStructSize;
463 SCARDCONTEXT hSCardContext;
464 HWND hwndOwner;
465 DWORD dwFlags;
466 LPCWSTR lpstrTitle;
467 LPCWSTR lpstrSearchDesc;
468 HICON hIcon;
469 POPENCARD_SEARCH_CRITERIAW pOpenCardSearchCriteria;
470 LPOCNCONNPROCW lpfnConnect;
471 LPVOID pvUserData;
472 DWORD dwShareMode;
473 DWORD dwPreferredProtocols;
474 LPWSTR lpstrRdr;
475 DWORD nMaxRdr;
476 LPWSTR lpstrCard;
477 DWORD nMaxCard;
478 DWORD dwActiveProtocol;
479 SCARDHANDLE hCardHandle;
481
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
488
489typedef enum
490{
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;
495
496typedef struct
497{
498 DWORD dwShareMode;
499 DWORD dwPreferredProtocols;
500 READER_SEL_REQUEST_MATCH_TYPE MatchType;
501 union
502 {
503 struct
504 {
505 DWORD cbReaderNameOffset;
506 DWORD cchReaderNameLength;
507 DWORD cbContainerNameOffset;
508 DWORD cchContainerNameLength;
509 DWORD dwDesiredCardModuleVersion;
510 DWORD dwCspFlags;
511 } ReaderAndContainerParameter;
512 struct
513 {
514 DWORD cbSerialNumberOffset;
515 DWORD cbSerialNumberLength;
516 DWORD dwDesiredCardModuleVersion;
517 } SerialNumberParameter;
518 };
520
521typedef struct
522{
523 DWORD cbReaderNameOffset;
524 DWORD cchReaderNameLength;
525 DWORD cbCardNameOffset;
526 DWORD cchCardNameLength;
528
529typedef struct
530{
531 DWORD dwStructSize;
532 HWND hwndOwner;
533 SCARDCONTEXT hSCardContext;
534 LPSTR lpstrGroupNames;
535 DWORD nMaxGroupNames;
536 LPSTR lpstrCardNames;
537 DWORD nMaxCardNames;
538 LPCGUID rgguidInterfaces;
539 DWORD cguidInterfaces;
540 LPSTR lpstrRdr;
541 DWORD nMaxRdr;
542 LPSTR lpstrCard;
543 DWORD nMaxCard;
544 LPCSTR lpstrTitle;
545 DWORD dwFlags;
546 LPVOID pvUserData;
547 DWORD dwShareMode;
548 DWORD dwPreferredProtocols;
549 DWORD dwActiveProtocol;
550 LPOCNCONNPROCA lpfnConnect;
551 LPOCNCHKPROC lpfnCheck;
552 LPOCNDSCPROC lpfnDisconnect;
553 SCARDHANDLE hCardHandle;
555
556typedef struct
557{
558 DWORD dwStructSize;
559 HWND hwndOwner;
560 SCARDCONTEXT hSCardContext;
561 LPWSTR lpstrGroupNames;
562 DWORD nMaxGroupNames;
563 LPWSTR lpstrCardNames;
564 DWORD nMaxCardNames;
565 LPCGUID rgguidInterfaces;
566 DWORD cguidInterfaces;
567 LPWSTR lpstrRdr;
568 DWORD nMaxRdr;
569 LPWSTR lpstrCard;
570 DWORD nMaxCard;
571 LPCWSTR lpstrTitle;
572 DWORD dwFlags;
573 LPVOID pvUserData;
574 DWORD dwShareMode;
575 DWORD dwPreferredProtocols;
576 DWORD dwActiveProtocol;
577 LPOCNCONNPROCW lpfnConnect;
578 LPOCNCHKPROC lpfnCheck;
579 LPOCNDSCPROC lpfnDisconnect;
580 SCARDHANDLE hCardHandle;
582
583#pragma pack(pop)
584
585#ifdef UNICODE
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
599#else
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
613#endif
614
615#ifdef __cplusplus
616extern "C"
617{
618#endif
619
620 WINPR_API extern const SCARD_IO_REQUEST g_rgSCardT0Pci;
621 WINPR_API extern const SCARD_IO_REQUEST g_rgSCardT1Pci;
622 WINPR_API extern const SCARD_IO_REQUEST g_rgSCardRawPci;
623
624#define SCARD_PCI_T0 (&g_rgSCardT0Pci)
625#define SCARD_PCI_T1 (&g_rgSCardT1Pci)
626#define SCARD_PCI_RAW (&g_rgSCardRawPci)
627
628 WINPR_ATTR_NODISCARD
629 WINSCARDAPI LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
630 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
631
632 WINSCARDAPI LONG WINAPI SCardReleaseContext(SCARDCONTEXT hContext);
633
634 WINPR_ATTR_NODISCARD
635 WINSCARDAPI LONG WINAPI SCardIsValidContext(SCARDCONTEXT hContext);
636
637 WINPR_ATTR_NODISCARD
638 WINSCARDAPI LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups,
639 LPDWORD pcchGroups);
640
641 WINPR_ATTR_NODISCARD
642 WINSCARDAPI LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups,
643 LPDWORD pcchGroups);
644
645 WINPR_ATTR_NODISCARD
646 WINSCARDAPI LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups,
647 LPSTR mszReaders, LPDWORD pcchReaders);
648
649 WINPR_ATTR_NODISCARD
650 WINSCARDAPI LONG WINAPI SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups,
651 LPWSTR mszReaders, LPDWORD pcchReaders);
652
653 WINPR_ATTR_NODISCARD
654 WINSCARDAPI LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr,
655 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
656 CHAR* mszCards, LPDWORD pcchCards);
657
658 WINPR_ATTR_NODISCARD
659 WINSCARDAPI LONG WINAPI SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr,
660 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
661 WCHAR* mszCards, LPDWORD pcchCards);
662
663 WINPR_ATTR_NODISCARD
664 WINSCARDAPI LONG WINAPI SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard,
665 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
666
667 WINPR_ATTR_NODISCARD
668 WINSCARDAPI LONG WINAPI SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard,
669 LPGUID pguidInterfaces, LPDWORD pcguidInterfaces);
670
671 WINPR_ATTR_NODISCARD
672 WINSCARDAPI LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard,
673 LPGUID pguidProviderId);
674
675 WINPR_ATTR_NODISCARD
676 WINSCARDAPI LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard,
677 LPGUID pguidProviderId);
678
679 WINPR_ATTR_NODISCARD
680 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
681 DWORD dwProviderId, CHAR* szProvider,
682 LPDWORD pcchProvider);
683
684 WINPR_ATTR_NODISCARD
685 WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
686 DWORD dwProviderId, WCHAR* szProvider,
687 LPDWORD pcchProvider);
688
689 WINPR_ATTR_NODISCARD
690 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
691
692 WINPR_ATTR_NODISCARD
693 WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
694
695 WINPR_ATTR_NODISCARD
696 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName);
697
698 WINPR_ATTR_NODISCARD
699 WINSCARDAPI LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName);
700
701 WINPR_ATTR_NODISCARD
702 WINSCARDAPI LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName,
703 LPCSTR szDeviceName);
704
705 WINPR_ATTR_NODISCARD
706 WINSCARDAPI LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
707 LPCWSTR szDeviceName);
708
709 WINPR_ATTR_NODISCARD
710 WINSCARDAPI LONG WINAPI SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName);
711
712 WINPR_ATTR_NODISCARD
713 WINSCARDAPI LONG WINAPI SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName);
714
715 WINPR_ATTR_NODISCARD
716 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
717 LPCSTR szGroupName);
718
719 WINPR_ATTR_NODISCARD
720 WINSCARDAPI LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
721 LPCWSTR szGroupName);
722
723 WINPR_ATTR_NODISCARD
724 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
725 LPCSTR szGroupName);
726
727 WINPR_ATTR_NODISCARD
728 WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
729 LPCWSTR szGroupName);
730
731 WINPR_ATTR_NODISCARD
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);
737
738 WINPR_ATTR_NODISCARD
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);
744
745 WINPR_ATTR_NODISCARD
746 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
747 DWORD dwProviderId, LPCSTR szProvider);
748
749 WINPR_ATTR_NODISCARD
750 WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
751 DWORD dwProviderId, LPCWSTR szProvider);
752
753 WINPR_ATTR_NODISCARD
754 WINSCARDAPI LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName);
755
756 WINPR_ATTR_NODISCARD
757 WINSCARDAPI LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName);
758
759 WINSCARDAPI LONG WINAPI SCardFreeMemory(SCARDCONTEXT hContext, LPVOID pvMem);
760
761 WINSCARDAPI HANDLE WINAPI SCardAccessStartedEvent(void);
762
763 WINSCARDAPI void WINAPI SCardReleaseStartedEvent(void);
764
765 WINPR_ATTR_NODISCARD
766 WINSCARDAPI LONG WINAPI SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards,
767 LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders);
768
769 WINPR_ATTR_NODISCARD
770 WINSCARDAPI LONG WINAPI SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards,
771 LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders);
772
773 WINPR_ATTR_NODISCARD
774 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT hContext,
775 LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs,
776 LPSCARD_READERSTATEA rgReaderStates,
777 DWORD cReaders);
778
779 WINPR_ATTR_NODISCARD
780 WINSCARDAPI LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT hContext,
781 LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs,
782 LPSCARD_READERSTATEW rgReaderStates,
783 DWORD cReaders);
784
785 WINPR_ATTR_NODISCARD
786 WINSCARDAPI LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout,
787 LPSCARD_READERSTATEA rgReaderStates,
788 DWORD cReaders);
789
790 WINPR_ATTR_NODISCARD
791 WINSCARDAPI LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout,
792 LPSCARD_READERSTATEW rgReaderStates,
793 DWORD cReaders);
794
795 WINSCARDAPI LONG WINAPI SCardCancel(SCARDCONTEXT hContext);
796
797 WINPR_ATTR_NODISCARD
798 WINSCARDAPI LONG WINAPI SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
799 DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
800 LPDWORD pdwActiveProtocol);
801
802 WINPR_ATTR_NODISCARD
803 WINSCARDAPI LONG WINAPI SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader,
804 DWORD dwShareMode, DWORD dwPreferredProtocols,
805 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
806
807 WINPR_ATTR_NODISCARD
808 WINSCARDAPI LONG WINAPI SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode,
809 DWORD dwPreferredProtocols, DWORD dwInitialization,
810 LPDWORD pdwActiveProtocol);
811
812 WINSCARDAPI LONG WINAPI SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition);
813
814 WINPR_ATTR_NODISCARD
815 WINSCARDAPI LONG WINAPI SCardBeginTransaction(SCARDHANDLE hCard);
816
817 WINPR_ATTR_NODISCARD
818 WINSCARDAPI LONG WINAPI SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition);
819
820 WINPR_ATTR_NODISCARD
821 WINSCARDAPI LONG WINAPI SCardCancelTransaction(SCARDHANDLE hCard);
822
823 WINPR_ATTR_NODISCARD
824 WINSCARDAPI LONG WINAPI SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
825 LPBYTE pbAtr, LPDWORD pcbAtrLen);
826
827 WINPR_ATTR_NODISCARD
828 WINSCARDAPI LONG WINAPI SCardStatusA(SCARDHANDLE hCard, LPSTR mszReaderNames,
829 LPDWORD pcchReaderLen, LPDWORD pdwState,
830 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
831
832 WINPR_ATTR_NODISCARD
833 WINSCARDAPI LONG WINAPI SCardStatusW(SCARDHANDLE hCard, LPWSTR mszReaderNames,
834 LPDWORD pcchReaderLen, LPDWORD pdwState,
835 LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
836
837 WINPR_ATTR_NODISCARD
838 WINSCARDAPI LONG WINAPI SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci,
839 LPCBYTE pbSendBuffer, DWORD cbSendLength,
840 LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer,
841 LPDWORD pcbRecvLength);
842
843 WINPR_ATTR_NODISCARD
844 WINSCARDAPI LONG WINAPI SCardGetTransmitCount(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
845
846 WINPR_ATTR_NODISCARD
847 WINSCARDAPI LONG WINAPI SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
848 DWORD cbInBufferSize, LPVOID lpOutBuffer,
849 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
850
851 WINPR_ATTR_NODISCARD
852 WINSCARDAPI LONG WINAPI SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
853 LPDWORD pcbAttrLen);
854
855 WINPR_ATTR_NODISCARD
856 WINSCARDAPI LONG WINAPI SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
857 DWORD cbAttrLen);
858
859 WINPR_ATTR_NODISCARD
860 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardA(LPOPENCARDNAMEA_EX pDlgStruc);
861
862 WINPR_ATTR_NODISCARD
863 WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardW(LPOPENCARDNAMEW_EX pDlgStruc);
864
865 WINPR_ATTR_NODISCARD
866 WINSCARDAPI LONG WINAPI GetOpenCardNameA(LPOPENCARDNAMEA pDlgStruc);
867
868 WINPR_ATTR_NODISCARD
869 WINSCARDAPI LONG WINAPI GetOpenCardNameW(LPOPENCARDNAMEW pDlgStruc);
870
871 WINPR_ATTR_NODISCARD
872 WINSCARDAPI LONG WINAPI SCardDlgExtendedError(void);
873
874 WINPR_ATTR_NODISCARD
875 WINSCARDAPI LONG WINAPI SCardReadCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier,
876 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
877 DWORD* DataLen);
878
879 WINPR_ATTR_NODISCARD
880 WINSCARDAPI LONG WINAPI SCardReadCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier,
881 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
882 DWORD* DataLen);
883
884 WINPR_ATTR_NODISCARD
885 WINSCARDAPI LONG WINAPI SCardWriteCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier,
886 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
887 DWORD DataLen);
888
889 WINPR_ATTR_NODISCARD
890 WINSCARDAPI LONG WINAPI SCardWriteCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier,
891 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
892 DWORD DataLen);
893
894 WINPR_ATTR_NODISCARD
895 WINSCARDAPI LONG WINAPI SCardGetReaderIconA(SCARDCONTEXT hContext, LPCSTR szReaderName,
896 LPBYTE pbIcon, LPDWORD pcbIcon);
897
898 WINPR_ATTR_NODISCARD
899 WINSCARDAPI LONG WINAPI SCardGetReaderIconW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
900 LPBYTE pbIcon, LPDWORD pcbIcon);
901
902 WINPR_ATTR_NODISCARD
903 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdA(SCARDCONTEXT hContext, LPCSTR szReaderName,
904 LPDWORD pdwDeviceTypeId);
905
906 WINPR_ATTR_NODISCARD
907 WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
908 LPDWORD pdwDeviceTypeId);
909
910 WINPR_ATTR_NODISCARD
911 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext,
912 LPCSTR szReaderName,
913 LPSTR szDeviceInstanceId,
914 LPDWORD pcchDeviceInstanceId);
915
916 WINPR_ATTR_NODISCARD
917 WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdW(SCARDCONTEXT hContext,
918 LPCWSTR szReaderName,
919 LPWSTR szDeviceInstanceId,
920 LPDWORD pcchDeviceInstanceId);
921
922 WINPR_ATTR_NODISCARD
923 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdA(SCARDCONTEXT hContext,
924 LPCSTR szDeviceInstanceId,
925 LPSTR mszReaders,
926 LPDWORD pcchReaders);
927
928 WINPR_ATTR_NODISCARD
929 WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdW(SCARDCONTEXT hContext,
930 LPCWSTR szDeviceInstanceId,
931 LPWSTR mszReaders,
932 LPDWORD pcchReaders);
933
934 WINPR_ATTR_NODISCARD
935 WINSCARDAPI LONG WINAPI SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent);
936
937#ifdef UNICODE
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
966#else
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
995#endif
996
997#ifdef __cplusplus
998}
999#endif
1000
1005typedef LONG(WINAPI* fnSCardEstablishContext)(DWORD dwScope, LPCVOID pvReserved1,
1006 LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
1007
1008typedef LONG(WINAPI* fnSCardReleaseContext)(SCARDCONTEXT hContext);
1009
1010typedef LONG(WINAPI* fnSCardIsValidContext)(SCARDCONTEXT hContext);
1011
1012typedef LONG(WINAPI* fnSCardListReaderGroupsA)(SCARDCONTEXT hContext, LPSTR mszGroups,
1013 LPDWORD pcchGroups);
1014typedef LONG(WINAPI* fnSCardListReaderGroupsW)(SCARDCONTEXT hContext, LPWSTR mszGroups,
1015 LPDWORD pcchGroups);
1016
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);
1021
1022typedef LONG(WINAPI* fnSCardListCardsA)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
1023 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
1024 CHAR* mszCards, LPDWORD pcchCards);
1025
1026typedef LONG(WINAPI* fnSCardListCardsW)(SCARDCONTEXT hContext, LPCBYTE pbAtr,
1027 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
1028 WCHAR* mszCards, LPDWORD pcchCards);
1029
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);
1034
1035typedef LONG(WINAPI* fnSCardGetProviderIdA)(SCARDCONTEXT hContext, LPCSTR szCard,
1036 LPGUID pguidProviderId);
1037typedef LONG(WINAPI* fnSCardGetProviderIdW)(SCARDCONTEXT hContext, LPCWSTR szCard,
1038 LPGUID pguidProviderId);
1039
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);
1046
1047typedef LONG(WINAPI* fnSCardIntroduceReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
1048typedef LONG(WINAPI* fnSCardIntroduceReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
1049
1050typedef LONG(WINAPI* fnSCardForgetReaderGroupA)(SCARDCONTEXT hContext, LPCSTR szGroupName);
1051typedef LONG(WINAPI* fnSCardForgetReaderGroupW)(SCARDCONTEXT hContext, LPCWSTR szGroupName);
1052
1053typedef LONG(WINAPI* fnSCardIntroduceReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1054 LPCSTR szDeviceName);
1055typedef LONG(WINAPI* fnSCardIntroduceReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1056 LPCWSTR szDeviceName);
1057
1058typedef LONG(WINAPI* fnSCardForgetReaderA)(SCARDCONTEXT hContext, LPCSTR szReaderName);
1059typedef LONG(WINAPI* fnSCardForgetReaderW)(SCARDCONTEXT hContext, LPCWSTR szReaderName);
1060
1061typedef LONG(WINAPI* fnSCardAddReaderToGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1062 LPCSTR szGroupName);
1063typedef LONG(WINAPI* fnSCardAddReaderToGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1064 LPCWSTR szGroupName);
1065
1066typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1067 LPCSTR szGroupName);
1068typedef LONG(WINAPI* fnSCardRemoveReaderFromGroupW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1069 LPCWSTR szGroupName);
1070
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);
1079
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);
1084
1085typedef LONG(WINAPI* fnSCardForgetCardTypeA)(SCARDCONTEXT hContext, LPCSTR szCardName);
1086typedef LONG(WINAPI* fnSCardForgetCardTypeW)(SCARDCONTEXT hContext, LPCWSTR szCardName);
1087
1088typedef LONG(WINAPI* fnSCardFreeMemory)(SCARDCONTEXT hContext, LPVOID pvMem);
1089
1090typedef HANDLE(WINAPI* fnSCardAccessStartedEvent)(void);
1091
1092typedef void(WINAPI* fnSCardReleaseStartedEvent)(void);
1093
1094typedef LONG(WINAPI* fnSCardLocateCardsA)(SCARDCONTEXT hContext, LPCSTR mszCards,
1095 LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders);
1096typedef LONG(WINAPI* fnSCardLocateCardsW)(SCARDCONTEXT hContext, LPCWSTR mszCards,
1097 LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders);
1098
1099typedef LONG(WINAPI* fnSCardLocateCardsByATRA)(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks,
1100 DWORD cAtrs, LPSCARD_READERSTATEA rgReaderStates,
1101 DWORD cReaders);
1102typedef LONG(WINAPI* fnSCardLocateCardsByATRW)(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks,
1103 DWORD cAtrs, LPSCARD_READERSTATEW rgReaderStates,
1104 DWORD cReaders);
1105
1106typedef LONG(WINAPI* fnSCardGetStatusChangeA)(SCARDCONTEXT hContext, DWORD dwTimeout,
1107 LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders);
1108typedef LONG(WINAPI* fnSCardGetStatusChangeW)(SCARDCONTEXT hContext, DWORD dwTimeout,
1109 LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders);
1110
1111typedef LONG(WINAPI* fnSCardCancel)(SCARDCONTEXT hContext);
1112
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);
1119
1120typedef LONG(WINAPI* fnSCardReconnect)(SCARDHANDLE hCard, DWORD dwShareMode,
1121 DWORD dwPreferredProtocols, DWORD dwInitialization,
1122 LPDWORD pdwActiveProtocol);
1123
1124typedef LONG(WINAPI* fnSCardDisconnect)(SCARDHANDLE hCard, DWORD dwDisposition);
1125
1126typedef LONG(WINAPI* fnSCardBeginTransaction)(SCARDHANDLE hCard);
1127
1128typedef LONG(WINAPI* fnSCardEndTransaction)(SCARDHANDLE hCard, DWORD dwDisposition);
1129
1130typedef LONG(WINAPI* fnSCardCancelTransaction)(SCARDHANDLE hCard);
1131
1132typedef LONG(WINAPI* fnSCardState)(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
1133 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1134
1135typedef LONG(WINAPI* fnSCardStatusA)(SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen,
1136 LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr,
1137 LPDWORD pcbAtrLen);
1138typedef LONG(WINAPI* fnSCardStatusW)(SCARDHANDLE hCard, LPWSTR mszReaderNames,
1139 LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol,
1140 LPBYTE pbAtr, LPDWORD pcbAtrLen);
1141
1142typedef LONG(WINAPI* fnSCardTransmit)(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci,
1143 LPCBYTE pbSendBuffer, DWORD cbSendLength,
1144 LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer,
1145 LPDWORD pcbRecvLength);
1146
1147typedef LONG(WINAPI* fnSCardGetTransmitCount)(SCARDHANDLE hCard, LPDWORD pcTransmitCount);
1148
1149typedef LONG(WINAPI* fnSCardControl)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
1150 DWORD cbInBufferSize, LPVOID lpOutBuffer,
1151 DWORD cbOutBufferSize, LPDWORD lpBytesReturned);
1152
1153typedef LONG(WINAPI* fnSCardGetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
1154 LPDWORD pcbAttrLen);
1155
1156typedef LONG(WINAPI* fnSCardSetAttrib)(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
1157 DWORD cbAttrLen);
1158
1159typedef LONG(WINAPI* fnSCardUIDlgSelectCardA)(LPOPENCARDNAMEA_EX pDlgStruc);
1160typedef LONG(WINAPI* fnSCardUIDlgSelectCardW)(LPOPENCARDNAMEW_EX pDlgStruc);
1161
1162typedef LONG(WINAPI* fnGetOpenCardNameA)(LPOPENCARDNAMEA pDlgStruc);
1163typedef LONG(WINAPI* fnGetOpenCardNameW)(LPOPENCARDNAMEW pDlgStruc);
1164
1165typedef LONG(WINAPI* fnSCardDlgExtendedError)(void);
1166
1167typedef LONG(WINAPI* fnSCardReadCacheA)(SCARDCONTEXT hContext, UUID* CardIdentifier,
1168 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1169 DWORD* DataLen);
1170typedef LONG(WINAPI* fnSCardReadCacheW)(SCARDCONTEXT hContext, UUID* CardIdentifier,
1171 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1172 DWORD* DataLen);
1173
1174typedef LONG(WINAPI* fnSCardWriteCacheA)(SCARDCONTEXT hContext, UUID* CardIdentifier,
1175 DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
1176 DWORD DataLen);
1177typedef LONG(WINAPI* fnSCardWriteCacheW)(SCARDCONTEXT hContext, UUID* CardIdentifier,
1178 DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
1179 DWORD DataLen);
1180
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);
1185
1186typedef LONG(WINAPI* fnSCardGetDeviceTypeIdA)(SCARDCONTEXT hContext, LPCSTR szReaderName,
1187 LPDWORD pdwDeviceTypeId);
1188typedef LONG(WINAPI* fnSCardGetDeviceTypeIdW)(SCARDCONTEXT hContext, LPCWSTR szReaderName,
1189 LPDWORD pdwDeviceTypeId);
1190
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);
1197
1198typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdA)(SCARDCONTEXT hContext,
1199 LPCSTR szDeviceInstanceId,
1200 LPSTR mszReaders,
1201 LPDWORD pcchReaders);
1202typedef LONG(WINAPI* fnSCardListReadersWithDeviceInstanceIdW)(SCARDCONTEXT hContext,
1203 LPCWSTR szDeviceInstanceId,
1204 LPWSTR mszReaders,
1205 LPDWORD pcchReaders);
1206
1207typedef LONG(WINAPI* fnSCardAudit)(SCARDCONTEXT hContext, DWORD dwEvent);
1208
1209typedef struct
1210{
1211 DWORD dwVersion;
1212 DWORD dwFlags;
1213
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;
1294
1295#ifdef __cplusplus
1296extern "C"
1297{
1298#endif
1299
1300 WINPR_ATTR_NODISCARD
1301 WINSCARDAPI const char* WINAPI SCardGetErrorString(LONG errorCode);
1302
1303 WINPR_ATTR_NODISCARD
1304 WINSCARDAPI const char* WINAPI SCardGetAttributeString(DWORD dwAttrId);
1305
1306 WINPR_ATTR_NODISCARD
1307 WINSCARDAPI const char* WINAPI SCardGetProtocolString(DWORD dwProtocols);
1308
1309 WINPR_ATTR_NODISCARD
1310 WINSCARDAPI const char* WINAPI SCardGetShareModeString(DWORD dwShareMode);
1311
1312 WINPR_ATTR_NODISCARD
1313 WINSCARDAPI const char* WINAPI SCardGetDispositionString(DWORD dwDisposition);
1314
1315 WINPR_ATTR_NODISCARD
1316 WINSCARDAPI const char* WINAPI SCardGetScopeString(DWORD dwScope);
1317
1318 WINPR_ATTR_NODISCARD
1319 WINSCARDAPI const char* WINAPI SCardGetCardStateString(DWORD dwCardState);
1320
1321 WINPR_ATTR_NODISCARD
1322 WINSCARDAPI char* WINAPI SCardGetReaderStateString(DWORD dwReaderState);
1323
1324 WINPR_ATTR_NODISCARD
1325 WINPR_API BOOL WinSCard_LoadApiTableFunctions(PSCardApiFunctionTable pWinSCardApiTable,
1326 HMODULE hWinSCardLibrary);
1327
1328 WINPR_ATTR_NODISCARD
1329 WINPR_API const SCardApiFunctionTable* WinPR_GetSCardApiFunctionTable(void);
1330
1331#ifdef __cplusplus
1332}
1333#endif
1334
1335#endif /* WINPR_SMARTCARD_H */
Definition wtypes.h:254