1use shared::basetsd::ULONG_PTR;
10use shared::guiddef::{LPCGUID, LPGUID};
11use shared::minwindef::{BOOL, BYTE, DWORD, LPBYTE, LPCVOID, LPDWORD, LPVOID, PBYTE};
12use shared::rpcdce::UUID;
13use shared::windef::{HICON, HWND};
14use um::winnt::{CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PVOID, WCHAR};
15use um::winsmcrd::{LPCSCARD_IO_REQUEST, LPSCARD_IO_REQUEST};
16pub type LPCBYTE = *const BYTE;
17pub type SCARDCONTEXT = ULONG_PTR;
18pub type PSCARDCONTEXT = *mut SCARDCONTEXT;
19pub type LPSCARDCONTEXT = *mut SCARDCONTEXT;
20pub type SCARDHANDLE = ULONG_PTR;
21pub type PSCARDHANDLE = *mut SCARDHANDLE;
22pub type LPSCARDHANDLE = *mut SCARDHANDLE;
23pub const SCARD_AUTOALLOCATE: DWORD = -1i32 as u32;
24pub const SCARD_SCOPE_USER: DWORD = 0;
25pub const SCARD_SCOPE_TERMINAL: DWORD = 1;
26pub const SCARD_SCOPE_SYSTEM: DWORD = 2;
27extern "system" {
28 pub fn SCardEstablishContext(
29 dwScope: DWORD,
30 pvReserved1: LPCVOID,
31 pvReserved2: LPCVOID,
32 phContext: LPSCARDCONTEXT,
33 ) -> LONG;
34 pub fn SCardReleaseContext(
35 hContext: SCARDCONTEXT,
36 ) -> LONG;
37 pub fn SCardIsValidContext(
38 hContext: SCARDCONTEXT,
39 ) -> LONG;
40}
41pub const SCARD_PROVIDER_PRIMARY: DWORD = 1;
42pub const SCARD_PROVIDER_CSP: DWORD = 2;
43pub const SCARD_PROVIDER_KSP: DWORD = 3;
44extern "system" {
45 pub fn SCardListReaderGroupsA(
46 hContext: SCARDCONTEXT,
47 mszGroups: LPSTR,
48 pcchGroups: LPDWORD,
49 ) -> LONG;
50 pub fn SCardListReaderGroupsW(
51 hContext: SCARDCONTEXT,
52 mszGroups: LPWSTR,
53 pcchGroups: LPDWORD,
54 ) -> LONG;
55 pub fn SCardListReadersA(
56 hContext: SCARDCONTEXT,
57 mszGroups: LPCSTR,
58 mszReaders: LPSTR,
59 pcchReaders: LPDWORD,
60 ) -> LONG;
61 pub fn SCardListReadersW(
62 hContext: SCARDCONTEXT,
63 mszGroups: LPCWSTR,
64 mszReaders: LPWSTR,
65 pcchReaders: LPDWORD,
66 ) -> LONG;
67 pub fn SCardListCardsA(
68 hContext: SCARDCONTEXT,
69 pbAtr: LPCBYTE,
70 rgquidInterfaces: LPCGUID,
71 cguidInterfaceCount: DWORD,
72 mszCards: *mut CHAR,
73 pcchCards: LPDWORD,
74 ) -> LONG;
75 pub fn SCardListCardsW(
76 hContext: SCARDCONTEXT,
77 pbAtr: LPCBYTE,
78 rgquidInterfaces: LPCGUID,
79 cguidInterfaceCount: DWORD,
80 mszCards: *mut WCHAR,
81 pcchCards: LPDWORD,
82 ) -> LONG;
83 pub fn SCardListInterfacesA(
84 hContext: SCARDCONTEXT,
85 szCard: LPCSTR,
86 pguidInterfaces: LPGUID,
87 pcguidInterfaces: LPDWORD,
88 ) -> LONG;
89 pub fn SCardListInterfacesW(
90 hContext: SCARDCONTEXT,
91 szCard: LPCWSTR,
92 pguidInterfaces: LPGUID,
93 pcguidInterfaces: LPDWORD,
94 ) -> LONG;
95 pub fn SCardGetProviderIdA(
96 hContext: SCARDCONTEXT,
97 szCard: LPCSTR,
98 pguidProviderId: LPGUID,
99 ) -> LONG;
100 pub fn SCardGetProviderIdW(
101 hContext: SCARDCONTEXT,
102 szCard: LPCWSTR,
103 pguidProviderId: LPGUID,
104 ) -> LONG;
105 pub fn SCardGetCardTypeProviderNameA(
106 hContext: SCARDCONTEXT,
107 szCardName: LPCSTR,
108 dwProviderId: DWORD,
109 szProvider: *mut CHAR,
110 pcchProvider: LPDWORD,
111 ) -> LONG;
112 pub fn SCardGetCardTypeProviderNameW(
113 hContext: SCARDCONTEXT,
114 szCardName: LPCWSTR,
115 dwProviderId: DWORD,
116 szProvider: *mut WCHAR,
117 pcchProvider: LPDWORD,
118 ) -> LONG;
119 pub fn SCardIntroduceReaderGroupA(
120 hContext: SCARDCONTEXT,
121 szGroupName: LPCSTR,
122 ) -> LONG;
123 pub fn SCardIntroduceReaderGroupW(
124 hContext: SCARDCONTEXT,
125 szGroupName: LPCWSTR,
126 ) -> LONG;
127 pub fn SCardForgetReaderGroupA(
128 hContext: SCARDCONTEXT,
129 szGroupName: LPCSTR,
130 ) -> LONG;
131 pub fn SCardForgetReaderGroupW(
132 hContext: SCARDCONTEXT,
133 szGroupName: LPCWSTR,
134 ) -> LONG;
135 pub fn SCardIntroduceReaderA(
136 hContext: SCARDCONTEXT,
137 szReaderName: LPCSTR,
138 szDeviceName: LPCSTR,
139 ) -> LONG;
140 pub fn SCardIntroduceReaderW(
141 hContext: SCARDCONTEXT,
142 szReaderName: LPCWSTR,
143 szDeviceName: LPCWSTR,
144 ) -> LONG;
145 pub fn SCardForgetReaderA(
146 hContext: SCARDCONTEXT,
147 szReaderName: LPCSTR,
148 ) -> LONG;
149 pub fn SCardForgetReaderW(
150 hContext: SCARDCONTEXT,
151 szReaderName: LPCWSTR,
152 ) -> LONG;
153 pub fn SCardAddReaderToGroupA(
154 hContext: SCARDCONTEXT,
155 szReaderName: LPCSTR,
156 szGroupName: LPCSTR,
157 ) -> LONG;
158 pub fn SCardAddReaderToGroupW(
159 hContext: SCARDCONTEXT,
160 szReaderName: LPCWSTR,
161 szGroupName: LPCWSTR,
162 ) -> LONG;
163 pub fn SCardRemoveReaderFromGroupA(
164 hContext: SCARDCONTEXT,
165 szReaderName: LPCSTR,
166 szGroupName: LPCSTR,
167 ) -> LONG;
168 pub fn SCardRemoveReaderFromGroupW(
169 hContext: SCARDCONTEXT,
170 szReaderName: LPCWSTR,
171 szGroupName: LPCWSTR,
172 ) -> LONG;
173 pub fn SCardIntroduceCardTypeA(
174 hContext: SCARDCONTEXT,
175 szCardName: LPCSTR,
176 pguidPrimaryProvider: LPCGUID,
177 rgguidInterfaces: LPCGUID,
178 dwInterfaceCount: DWORD,
179 pbAtr: LPCBYTE,
180 pbAtrMask: LPCBYTE,
181 cbAtrLen: DWORD,
182 ) -> LONG;
183 pub fn SCardIntroduceCardTypeW(
184 hContext: SCARDCONTEXT,
185 szCardName: LPCWSTR,
186 pguidPrimaryProvider: LPCGUID,
187 rgguidInterfaces: LPCGUID,
188 dwInterfaceCount: DWORD,
189 pbAtr: LPCBYTE,
190 pbAtrMask: LPCBYTE,
191 cbAtrLen: DWORD,
192 ) -> LONG;
193 pub fn SCardSetCardTypeProviderNameA(
194 hContext: SCARDCONTEXT,
195 szCardName: LPCSTR,
196 dwProviderId: DWORD,
197 szProvider: LPCSTR,
198 ) -> LONG;
199 pub fn SCardSetCardTypeProviderNameW(
200 hContext: SCARDCONTEXT,
201 szCardName: LPCWSTR,
202 dwProviderId: DWORD,
203 szProvider: LPCWSTR,
204 ) -> LONG;
205 pub fn SCardForgetCardTypeA(
206 hContext: SCARDCONTEXT,
207 szCardName: LPCSTR,
208 ) -> LONG;
209 pub fn SCardForgetCardTypeW(
210 hContext: SCARDCONTEXT,
211 szCardName: LPCWSTR,
212 ) -> LONG;
213 pub fn SCardFreeMemory(
214 hContext: SCARDCONTEXT,
215 pvMem: LPCVOID,
216 ) -> LONG;
217 pub fn SCardAccessStartedEvent() -> HANDLE;
218 pub fn SCardReleaseStartedEvent();
219}
220STRUCT!{struct SCARD_READERSTATEA {
221 szReader: LPCSTR,
222 pvUserData: LPVOID,
223 dwCurrentState: DWORD,
224 dwEventState: DWORD,
225 cbAtr: DWORD,
226 rgbAtr: [BYTE; 36],
227}}
228pub type PSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
229pub type LPSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
230STRUCT!{struct SCARD_READERSTATEW {
231 szReader: LPCWSTR,
232 pvUserData: LPVOID,
233 dwCurrentState: DWORD,
234 dwEventState: DWORD,
235 cbAtr: DWORD,
236 rgbAtr: [BYTE; 36],
237}}
238pub type PSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
239pub type LPSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
240pub type SCARD_READERSTATE_A = SCARD_READERSTATEA;
241pub type SCARD_READERSTATE_W = SCARD_READERSTATEW;
242pub type PSCARD_READERSTATE_A = PSCARD_READERSTATEA;
243pub type PSCARD_READERSTATE_W = PSCARD_READERSTATEW;
244pub type LPSCARD_READERSTATE_A = LPSCARD_READERSTATEA;
245pub type LPSCARD_READERSTATE_W = LPSCARD_READERSTATEW;
246pub const SCARD_STATE_UNAWARE: DWORD = 0x00000000;
247pub const SCARD_STATE_IGNORE: DWORD = 0x00000001;
248pub const SCARD_STATE_CHANGED: DWORD = 0x00000002;
249pub const SCARD_STATE_UNKNOWN: DWORD = 0x00000004;
250pub const SCARD_STATE_UNAVAILABLE: DWORD = 0x00000008;
251pub const SCARD_STATE_EMPTY: DWORD = 0x00000010;
252pub const SCARD_STATE_PRESENT: DWORD = 0x00000020;
253pub const SCARD_STATE_ATRMATCH: DWORD = 0x00000040;
254pub const SCARD_STATE_EXCLUSIVE: DWORD = 0x00000080;
255pub const SCARD_STATE_INUSE: DWORD = 0x00000100;
256pub const SCARD_STATE_MUTE: DWORD = 0x00000200;
257pub const SCARD_STATE_UNPOWERED: DWORD = 0x00000400;
258extern "system" {
259 pub fn SCardLocateCardsA(
260 hContext: SCARDCONTEXT,
261 mszCards: LPCSTR,
262 rgReaderStates: LPSCARD_READERSTATEA,
263 cReaders: DWORD,
264 ) -> LONG;
265 pub fn SCardLocateCardsW(
266 hContext: SCARDCONTEXT,
267 mszCards: LPCWSTR,
268 rgReaderStates: LPSCARD_READERSTATEW,
269 cReaders: DWORD,
270 ) -> LONG;
271}
272STRUCT!{struct SCARD_ATRMASK {
273 cbAtr: DWORD,
274 rgbAtr: [BYTE; 36],
275 rgbMask: [BYTE; 36],
276}}
277pub type PSCARD_ATRMASK = *mut SCARD_ATRMASK;
278pub type LPSCARD_ATRMASK = *mut SCARD_ATRMASK;
279extern "system" {
280 pub fn SCardLocateCardsByATRA(
281 hContext: SCARDCONTEXT,
282 rgAtrMasks: LPSCARD_ATRMASK,
283 cAtrs: DWORD,
284 rgReaderStates: LPSCARD_READERSTATEA,
285 cReaders: DWORD,
286 ) -> LONG;
287 pub fn SCardLocateCardsByATRW(
288 hContext: SCARDCONTEXT,
289 rgAtrMasks: LPSCARD_ATRMASK,
290 cAtrs: DWORD,
291 rgReaderStates: LPSCARD_READERSTATEW,
292 cReaders: DWORD,
293 ) -> LONG;
294 pub fn SCardGetStatusChangeA(
295 hContext: SCARDCONTEXT,
296 dwTimeout: DWORD,
297 rgReaderStates: LPSCARD_READERSTATEA,
298 cReaders: DWORD,
299 ) -> LONG;
300 pub fn SCardGetStatusChangeW(
301 hContext: SCARDCONTEXT,
302 dwTimeout: DWORD,
303 rgReaderStates: LPSCARD_READERSTATEW,
304 cReaders: DWORD,
305 ) -> LONG;
306 pub fn SCardCancel(
307 hContext: SCARDCONTEXT,
308 ) -> LONG;
309}
310pub const SCARD_SHARE_EXCLUSIVE: DWORD = 1;
311pub const SCARD_SHARE_SHARED: DWORD = 2;
312pub const SCARD_SHARE_DIRECT: DWORD = 3;
313pub const SCARD_LEAVE_CARD: DWORD = 0;
314pub const SCARD_RESET_CARD: DWORD = 1;
315pub const SCARD_UNPOWER_CARD: DWORD = 2;
316pub const SCARD_EJECT_CARD: DWORD = 3;
317extern "system" {
318 pub fn SCardConnectA(
319 hContext: SCARDCONTEXT,
320 szReader: LPCSTR,
321 dwShareMode: DWORD,
322 dwPreferredProtocols: DWORD,
323 phCard: LPSCARDHANDLE,
324 pdwActiveProtocol: LPDWORD,
325 ) -> LONG;
326 pub fn SCardConnectW(
327 hContext: SCARDCONTEXT,
328 szReader: LPCWSTR,
329 dwShareMode: DWORD,
330 dwPreferredProtocols: DWORD,
331 phCard: LPSCARDHANDLE,
332 pdwActiveProtocol: LPDWORD,
333 ) -> LONG;
334 pub fn SCardReconnect(
335 hCard: SCARDHANDLE,
336 dwShareMode: DWORD,
337 dwPreferredProtocols: DWORD,
338 dwInitialization: DWORD,
339 pdwActiveProtocol: LPDWORD,
340 ) -> LONG;
341 pub fn SCardDisconnect(
342 hCard: SCARDHANDLE,
343 dwDisposition: DWORD,
344 ) -> LONG;
345 pub fn SCardBeginTransaction(
346 hCard: SCARDHANDLE,
347 ) -> LONG;
348 pub fn SCardEndTransaction(
349 hCard: SCARDHANDLE,
350 dwDisposition: DWORD,
351 ) -> LONG;
352 pub fn SCardState(
353 hCard: SCARDHANDLE,
354 pdwState: LPDWORD,
355 pdwProtocol: LPDWORD,
356 pbAtr: LPBYTE,
357 pcbAtrLen: LPDWORD,
358 ) -> LONG;
359 pub fn SCardStatusA(
360 hCard: SCARDHANDLE,
361 mszReaderNames: LPSTR,
362 pcchReaderLen: LPDWORD,
363 pdwState: LPDWORD,
364 pdwProtocol: LPDWORD,
365 pbAtr: LPBYTE,
366 pcbAtrLen: LPDWORD,
367 ) -> LONG;
368 pub fn SCardStatusW(
369 hCard: SCARDHANDLE,
370 mszReaderNames: LPWSTR,
371 pcchReaderLen: LPDWORD,
372 pdwState: LPDWORD,
373 pdwProtocol: LPDWORD,
374 pbAtr: LPBYTE,
375 pcbAtrLen: LPDWORD,
376 ) -> LONG;
377 pub fn SCardTransmit(
378 hCard: SCARDHANDLE,
379 pioSendPci: LPCSCARD_IO_REQUEST,
380 pbSendBuffer: LPCBYTE,
381 cbSendLength: DWORD,
382 pioRecvPci: LPSCARD_IO_REQUEST,
383 pbRecvBuffer: LPBYTE,
384 pcbRecvLength: LPDWORD,
385 ) -> LONG;
386 pub fn SCardGetTransmitCount(
387 hCard: SCARDHANDLE,
388 pcTransmitCount: LPDWORD,
389 ) -> LONG;
390 pub fn SCardControl(
391 hCard: SCARDHANDLE,
392 dwControlCode: DWORD,
393 lpInBuffer: LPCVOID,
394 cbInBufferSize: DWORD,
395 lpOutBuffer: LPVOID,
396 cbOutBufferSize: DWORD,
397 lpBytesReturned: LPDWORD,
398 ) -> LONG;
399 pub fn SCardGetAttrib(
400 hCard: SCARDHANDLE,
401 dwAttrId: DWORD,
402 pbAttr: LPBYTE,
403 pcbAttrLen: LPDWORD,
404 ) -> LONG;
405 pub fn SCardSetAttrib(
406 hCard: SCARDHANDLE,
407 dwAttrId: DWORD,
408 pbAttr: LPCBYTE,
409 cbAttrLen: DWORD,
410 ) -> LONG;
411}
412pub const SC_DLG_MINIMAL_UI: DWORD = 0x01;
413pub const SC_DLG_NO_UI: DWORD = 0x02;
414pub const SC_DLG_FORCE_UI: DWORD = 0x04;
415pub const SCERR_NOCARDNAME: DWORD = 0x4000;
416pub const SCERR_NOGUIDS: DWORD = 0x8000;
417FN!{stdcall LPOCNCONNPROCA(
418 SCARDCONTEXT,
419 LPSTR,
420 LPSTR,
421 PVOID,
422) -> SCARDHANDLE}
423FN!{stdcall LPOCNCONNPROCW(
424 SCARDCONTEXT,
425 LPWSTR,
426 LPWSTR,
427 PVOID,
428) -> SCARDHANDLE}
429FN!{stdcall LPOCNCHKPROC(
430 SCARDCONTEXT,
431 SCARDHANDLE,
432 PVOID,
433) -> BOOL}
434FN!{stdcall LPOCNDSCPROC(
435 SCARDCONTEXT,
436 SCARDHANDLE,
437 PVOID,
438) -> ()}
439STRUCT!{struct OPENCARD_SEARCH_CRITERIAA {
440 dwStructSize: DWORD,
441 lpstrGroupNames: LPSTR,
442 nMaxGroupNames: DWORD,
443 rgguidInterfaces: LPCGUID,
444 cguidInterfaces: DWORD,
445 lpstrCardNames: LPSTR,
446 nMaxCardNames: DWORD,
447 lpfnCheck: LPOCNCHKPROC,
448 lpfnConnect: LPOCNCONNPROCA,
449 lpfnDisconnect: LPOCNDSCPROC,
450 pvUserData: LPVOID,
451 dwShareMode: DWORD,
452 dwPreferredProtocols: DWORD,
453}}
454pub type POPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
455pub type LPOPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
456STRUCT!{struct OPENCARD_SEARCH_CRITERIAW {
457 dwStructSize: DWORD,
458 lpstrGroupNames: LPWSTR,
459 nMaxGroupNames: DWORD,
460 rgguidInterfaces: LPCGUID,
461 cguidInterfaces: DWORD,
462 lpstrCardNames: LPWSTR,
463 nMaxCardNames: DWORD,
464 lpfnCheck: LPOCNCHKPROC,
465 lpfnConnect: LPOCNCONNPROCW,
466 lpfnDisconnect: LPOCNDSCPROC,
467 pvUserData: LPVOID,
468 dwShareMode: DWORD,
469 dwPreferredProtocols: DWORD,
470}}
471pub type POPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
472pub type LPOPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
473STRUCT!{struct OPENCARDNAME_EXA {
474 dwStructSize: DWORD,
475 hSCardContext: SCARDCONTEXT,
476 hwndOwner: HWND,
477 dwFlags: DWORD,
478 lpstrTitle: LPCSTR,
479 lpstrSearchDesc: LPCSTR,
480 hIcon: HICON,
481 pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAA,
482 lpfnConnect: LPOCNCONNPROCA,
483 pvUserData: LPVOID,
484 dwShareMode: DWORD,
485 dwPreferredProtocols: DWORD,
486 lpstrRdr: LPSTR,
487 nMaxRdr: DWORD,
488 lpstrCard: LPSTR,
489 nMaxCard: DWORD,
490 dwActiveProtocol: DWORD,
491 hCardHandle: SCARDHANDLE,
492}}
493pub type POPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
494pub type LPOPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
495STRUCT!{struct OPENCARDNAME_EXW {
496 dwStructSize: DWORD,
497 hSCardContext: SCARDCONTEXT,
498 hwndOwner: HWND,
499 dwFlags: DWORD,
500 lpstrTitle: LPCWSTR,
501 lpstrSearchDesc: LPCWSTR,
502 hIcon: HICON,
503 pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAW,
504 lpfnConnect: LPOCNCONNPROCW,
505 pvUserData: LPVOID,
506 dwShareMode: DWORD,
507 dwPreferredProtocols: DWORD,
508 lpstrRdr: LPWSTR,
509 nMaxRdr: DWORD,
510 lpstrCard: LPWSTR,
511 nMaxCard: DWORD,
512 dwActiveProtocol: DWORD,
513 hCardHandle: SCARDHANDLE,
514}}
515pub type POPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
516pub type LPOPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
517pub type OPENCARDNAMEA_EX = OPENCARDNAME_EXA;
518pub type OPENCARDNAMEW_EX = OPENCARDNAME_EXW;
519pub type POPENCARDNAMEA_EX = POPENCARDNAME_EXA;
520pub type POPENCARDNAMEW_EX = POPENCARDNAME_EXW;
521pub type LPOPENCARDNAMEA_EX = LPOPENCARDNAME_EXA;
522pub type LPOPENCARDNAMEW_EX = LPOPENCARDNAME_EXW;
523pub const SCARD_READER_SEL_AUTH_PACKAGE: DWORD = -629i32 as u32;
524ENUM!{enum READER_SEL_REQUEST_MATCH_TYPE {
525 RSR_MATCH_TYPE_READER_AND_CONTAINER = 1,
526 RSR_MATCH_TYPE_SERIAL_NUMBER,
527 RSR_MATCH_TYPE_ALL_CARDS,
528}}
529STRUCT!{struct READER_SEL_REQUEST_ReaderAndContainerParameter {
530 cbReaderNameOffset: DWORD,
531 cchReaderNameLength: DWORD,
532 cbContainerNameOffset: DWORD,
533 cchContainerNameLength: DWORD,
534 dwDesiredCardModuleVersion: DWORD,
535 dwCspFlags: DWORD,
536}}
537STRUCT!{struct READER_SEL_REQUEST_SerialNumberParameter {
538 cbSerialNumberOffset: DWORD,
539 cbSerialNumberLength: DWORD,
540 dwDesiredCardModuleVersion: DWORD,
541}}
542UNION!{union READER_SEL_REQUEST_u {
543 [u32; 6],
544 ReaderAndContainerParameter ReaderAndContainerParameter_mut:
545 READER_SEL_REQUEST_ReaderAndContainerParameter,
546 SerialNumberParameter SerialNumberParameter_mut: READER_SEL_REQUEST_SerialNumberParameter,
547}}
548STRUCT!{struct READER_SEL_REQUEST {
549 dwShareMode: DWORD,
550 dwPreferredProtocols: DWORD,
551 MatchType: READER_SEL_REQUEST_MATCH_TYPE,
552 u: READER_SEL_REQUEST_u,
553}}
554pub type PREADER_SEL_REQUEST = *mut READER_SEL_REQUEST;
555STRUCT!{struct READER_SEL_RESPONSE {
556 cbReaderNameOffset: DWORD,
557 cchReaderNameLength: DWORD,
558 cbCardNameOffset: DWORD,
559 cchCardNameLength: DWORD,
560}}
561pub type PREADER_SEL_RESPONSE = *mut READER_SEL_RESPONSE;
562STRUCT!{struct OPENCARDNAMEA {
563 dwStructSize: DWORD,
564 hwndOwner: HWND,
565 hSCardContext: SCARDCONTEXT,
566 lpstrGroupNames: LPSTR,
567 nMaxGroupNames: DWORD,
568 lpstrCardNames: LPSTR,
569 nMaxCardNames: DWORD,
570 rgguidInterfaces: LPCGUID,
571 cguidInterfaces: DWORD,
572 lpstrRdr: LPSTR,
573 nMaxRdr: DWORD,
574 lpstrCard: LPSTR,
575 nMaxCard: DWORD,
576 lpstrTitle: LPCSTR,
577 dwFlags: DWORD,
578 pvUserData: LPVOID,
579 dwShareMode: DWORD,
580 dwPreferredProtocols: DWORD,
581 dwActiveProtocol: DWORD,
582 lpfnConnect: LPOCNCONNPROCA,
583 lpfnCheck: LPOCNCHKPROC,
584 lpfnDisconnect: LPOCNDSCPROC,
585 hCardHandle: SCARDHANDLE,
586}}
587pub type POPENCARDNAMEA = *mut OPENCARDNAMEA;
588pub type LPOPENCARDNAMEA = *mut OPENCARDNAMEA;
589STRUCT!{struct OPENCARDNAMEW {
590 dwStructSize: DWORD,
591 hwndOwner: HWND,
592 hSCardContext: SCARDCONTEXT,
593 lpstrGroupNames: LPWSTR,
594 nMaxGroupNames: DWORD,
595 lpstrCardNames: LPWSTR,
596 nMaxCardNames: DWORD,
597 rgguidInterfaces: LPCGUID,
598 cguidInterfaces: DWORD,
599 lpstrRdr: LPWSTR,
600 nMaxRdr: DWORD,
601 lpstrCard: LPWSTR,
602 nMaxCard: DWORD,
603 lpstrTitle: LPCWSTR,
604 dwFlags: DWORD,
605 pvUserData: LPVOID,
606 dwShareMode: DWORD,
607 dwPreferredProtocols: DWORD,
608 dwActiveProtocol: DWORD,
609 lpfnConnect: LPOCNCONNPROCW,
610 lpfnCheck: LPOCNCHKPROC,
611 lpfnDisconnect: LPOCNDSCPROC,
612 hCardHandle: SCARDHANDLE,
613}}
614pub type POPENCARDNAMEW = *mut OPENCARDNAMEW;
615pub type LPOPENCARDNAMEW = *mut OPENCARDNAMEW;
616pub type OPENCARDNAME_A = OPENCARDNAMEA;
617pub type OPENCARDNAME_W = OPENCARDNAMEW;
618pub type POPENCARDNAME_A = POPENCARDNAMEA;
619pub type POPENCARDNAME_W = POPENCARDNAMEW;
620pub type LPOPENCARDNAME_A = LPOPENCARDNAMEA;
621pub type LPOPENCARDNAME_W = LPOPENCARDNAMEW;
622extern "system" {
623 pub fn SCardReadCacheA(
624 hContext: SCARDCONTEXT,
625 CardIdentifier: *mut UUID,
626 FreshnessCounter: DWORD,
627 LookupName: LPSTR,
628 Data: PBYTE,
629 DataLen: *mut DWORD,
630 ) -> LONG;
631 pub fn SCardReadCacheW(
632 hContext: SCARDCONTEXT,
633 CardIdentifier: *mut UUID,
634 FreshnessCounter: DWORD,
635 LookupName: LPWSTR,
636 Data: PBYTE,
637 DataLen: *mut DWORD,
638 ) -> LONG;
639 pub fn SCardWriteCacheA(
640 hContext: SCARDCONTEXT,
641 CardIdentifier: *mut UUID,
642 FreshnessCounter: DWORD,
643 LookupName: LPSTR,
644 Data: PBYTE,
645 DataLen: DWORD,
646 ) -> LONG;
647 pub fn SCardWriteCacheW(
648 hContext: SCARDCONTEXT,
649 CardIdentifier: *mut UUID,
650 FreshnessCounter: DWORD,
651 LookupName: LPWSTR,
652 Data: PBYTE,
653 DataLen: DWORD,
654 ) -> LONG;
655 pub fn SCardGetReaderIconA(
656 hContext: SCARDCONTEXT,
657 szReaderName: LPCSTR,
658 pbIcon: LPBYTE,
659 pcbIcon: LPDWORD,
660 ) -> LONG;
661 pub fn SCardGetReaderIconW(
662 hContext: SCARDCONTEXT,
663 szReaderName: LPCWSTR,
664 pbIcon: LPBYTE,
665 pcbIcon: LPDWORD,
666 ) -> LONG;
667 pub fn SCardGetDeviceTypeIdA(
668 hContext: SCARDCONTEXT,
669 szReaderName: LPCSTR,
670 pdwDeviceTypeId: LPDWORD,
671 ) -> LONG;
672 pub fn SCardGetDeviceTypeIdW(
673 hContext: SCARDCONTEXT,
674 szReaderName: LPCWSTR,
675 pdwDeviceTypeId: LPDWORD,
676 ) -> LONG;
677 pub fn SCardGetReaderDeviceInstanceIdA(
678 hContext: SCARDCONTEXT,
679 szReaderName: LPCSTR,
680 szDeviceInstanceId: LPSTR,
681 pcchDeviceInstanceId: LPDWORD,
682 ) -> LONG;
683 pub fn SCardGetReaderDeviceInstanceIdW(
684 hContext: SCARDCONTEXT,
685 szReaderName: LPCWSTR,
686 szDeviceInstanceId: LPWSTR,
687 pcchDeviceInstanceId: LPDWORD,
688 ) -> LONG;
689 pub fn SCardListReadersWithDeviceInstanceIdA(
690 hContext: SCARDCONTEXT,
691 szDeviceInstanceId: LPCSTR,
692 mszReaders: LPSTR,
693 pcchReaders: LPDWORD,
694 ) -> LONG;
695 pub fn SCardListReadersWithDeviceInstanceIdW(
696 hContext: SCARDCONTEXT,
697 szDeviceInstanceId: LPCWSTR,
698 mszReaders: LPWSTR,
699 pcchReaders: LPDWORD,
700 ) -> LONG;
701}
702pub const SCARD_AUDIT_CHV_FAILURE: DWORD = 0x0;
703pub const SCARD_AUDIT_CHV_SUCCESS: DWORD = 0x1;
704extern "system" {
705 pub fn SCardAudit(
706 hContext: SCARDCONTEXT,
707 dwEvent: DWORD,
708 ) -> LONG;
709}