1 // Copyright © 2015, skdltmxn
2 // Licensed under the MIT License <LICENSE.md>
3 //! Data Protection API Prototypes and Definitions
4 // This header file provides the definitions and symbols necessary for an
5 // Application or Smart Card Service Provider to access the Smartcard Subsystem.
6 pub type LPCBYTE = *const ::BYTE;
7 pub type SCARDCONTEXT = ::ULONG_PTR;
8 pub type PSCARDCONTEXT = *mut SCARDCONTEXT;
9 pub type LPSCARDCONTEXT = *mut SCARDCONTEXT;
10 pub type SCARDHANDLE = ::ULONG_PTR;
11 pub type PSCARDHANDLE = *mut SCARDHANDLE;
12 pub type LPSCARDHANDLE = *mut SCARDHANDLE;
13 pub const SCARD_AUTOALLOCATE: ::DWORD = -1i32 as ::DWORD;
14 pub const SCARD_SCOPE_USER: ::DWORD = 0;
15 pub const SCARD_SCOPE_TERMINAL: ::DWORD = 1;
16 pub const SCARD_SCOPE_SYSTEM: ::DWORD = 2;
17 pub const SCARD_PROVIDER_PRIMARY: ::DWORD = 1;
18 pub const SCARD_PROVIDER_CSP: ::DWORD = 2;
19 pub const SCARD_PROVIDER_KSP: ::DWORD = 3;
20 STRUCT!{nodebug struct SCARD_READERSTATEA {
21     szReader: ::LPCSTR,
22     pvUserData: ::LPVOID,
23     dwCurrentState: ::DWORD,
24     dwEventState: ::DWORD,
25     cbAtr: ::DWORD,
26     rgbAtr: [::BYTE; 36],
27 }}
28 pub type PSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
29 pub type LPSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
30 STRUCT!{nodebug struct SCARD_READERSTATEW {
31     szReader: ::LPCWSTR,
32     pvUserData: ::LPVOID,
33     dwCurrentState: ::DWORD,
34     dwEventState: ::DWORD,
35     cbAtr: ::DWORD,
36     rgbAtr: [::BYTE; 36],
37 }}
38 pub type PSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
39 pub type LPSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
40 pub type SCARD_READERSTATE_A = SCARD_READERSTATEA;
41 pub type SCARD_READERSTATE_W = SCARD_READERSTATEW;
42 pub type PSCARD_READERSTATE_A = PSCARD_READERSTATEA;
43 pub type PSCARD_READERSTATE_W = PSCARD_READERSTATEW;
44 pub type LPSCARD_READERSTATE_A = LPSCARD_READERSTATEA;
45 pub type LPSCARD_READERSTATE_W = LPSCARD_READERSTATEW;
46 pub const SCARD_STATE_UNAWARE: ::DWORD = 0x00000000;
47 pub const SCARD_STATE_IGNORE: ::DWORD = 0x00000001;
48 pub const SCARD_STATE_CHANGED: ::DWORD = 0x00000002;
49 pub const SCARD_STATE_UNKNOWN: ::DWORD = 0x00000004;
50 pub const SCARD_STATE_UNAVAILABLE: ::DWORD = 0x00000008;
51 pub const SCARD_STATE_EMPTY: ::DWORD = 0x00000010;
52 pub const SCARD_STATE_PRESENT: ::DWORD = 0x00000020;
53 pub const SCARD_STATE_ATRMATCH: ::DWORD = 0x00000040;
54 pub const SCARD_STATE_EXCLUSIVE: ::DWORD = 0x00000080;
55 pub const SCARD_STATE_INUSE: ::DWORD = 0x00000100;
56 pub const SCARD_STATE_MUTE: ::DWORD = 0x00000200;
57 pub const SCARD_STATE_UNPOWERED: ::DWORD = 0x00000400;
58 STRUCT!{nodebug struct SCARD_ATRMASK {
59     cbAtr: ::DWORD,
60     rgbAtr: [::BYTE; 36],
61     rgbMask: [::BYTE; 36],
62 }}
63 pub type PSCARD_ATRMASK = *mut SCARD_ATRMASK;
64 pub type LPSCARD_ATRMASK = *mut SCARD_ATRMASK;
65 pub const SCARD_SHARE_EXCLUSIVE: ::DWORD = 1;
66 pub const SCARD_SHARE_SHARED: ::DWORD = 2;
67 pub const SCARD_SHARE_DIRECT: ::DWORD = 3;
68 pub const SCARD_LEAVE_CARD: ::DWORD = 0;
69 pub const SCARD_RESET_CARD: ::DWORD = 1;
70 pub const SCARD_UNPOWER_CARD: ::DWORD = 2;
71 pub const SCARD_EJECT_CARD: ::DWORD = 3;
72 pub const SC_DLG_MINIMAL_UI: ::DWORD = 0x01;
73 pub const SC_DLG_NO_UI: ::DWORD = 0x02;
74 pub const SC_DLG_FORCE_UI: ::DWORD = 0x04;
75 pub const SCERR_NOCARDNAME: ::DWORD = 0x4000;
76 pub const SCERR_NOGUIDS: ::DWORD = 0x8000;
77 pub type LPOCNCONNPROCA = Option<unsafe extern "system" fn(
78     SCARDCONTEXT, ::LPSTR, ::LPSTR, ::PVOID,
79 ) -> SCARDHANDLE>;
80 pub type LPOCNCONNPROCW = Option<unsafe extern "system" fn(
81     SCARDCONTEXT, ::LPWSTR, ::LPWSTR, ::PVOID,
82 ) -> SCARDHANDLE>;
83 pub type LPOCNCHKPROC = Option<unsafe extern "system" fn(
84     SCARDCONTEXT, SCARDHANDLE, ::PVOID,
85 ) -> ::BOOL>;
86 pub type LPOCNDSCPROC = Option<unsafe extern "system" fn(SCARDCONTEXT, SCARDHANDLE, ::PVOID)>;
87 STRUCT!{nodebug struct OPENCARD_SEARCH_CRITERIAA {
88     dwStructSize: ::DWORD,
89     lpstrGroupNames: ::LPSTR,
90     nMaxGroupNames: ::DWORD,
91     rgguidInterfaces: ::LPCGUID,
92     cguidInterfaces: ::DWORD,
93     lpstrCardNames: ::LPSTR,
94     nMaxCardNames: ::DWORD,
95     lpfnCheck: LPOCNCHKPROC,
96     lpfnConnect: LPOCNCONNPROCA,
97     lpfnDisconnect: LPOCNDSCPROC,
98     pvUserData: ::LPVOID,
99     dwShareMode: ::DWORD,
100     dwPreferredProtocols: ::DWORD,
101 }}
102 pub type POPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
103 pub type LPOPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
104 STRUCT!{nodebug struct OPENCARD_SEARCH_CRITERIAW {
105     dwStructSize: ::DWORD,
106     lpstrGroupNames: ::LPWSTR,
107     nMaxGroupNames: ::DWORD,
108     rgguidInterfaces: ::LPCGUID,
109     cguidInterfaces: ::DWORD,
110     lpstrCardNames: ::LPWSTR,
111     nMaxCardNames: ::DWORD,
112     lpfnCheck: LPOCNCHKPROC,
113     lpfnConnect: LPOCNCONNPROCW,
114     lpfnDisconnect: LPOCNDSCPROC,
115     pvUserData: ::LPVOID,
116     dwShareMode: ::DWORD,
117     dwPreferredProtocols: ::DWORD,
118 }}
119 pub type POPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
120 pub type LPOPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
121 STRUCT!{nodebug struct OPENCARDNAME_EXA {
122     dwStructSize: ::DWORD,
123     hSCardContext: SCARDCONTEXT,
124     hwndOwner: ::HWND,
125     dwFlags: ::DWORD,
126     lpstrTitle: ::LPCSTR,
127     lpstrSearchDesc: ::LPCSTR,
128     hIcon: ::HICON,
129     pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAA,
130     lpfnConnect: LPOCNCONNPROCA,
131     pvUserData: ::LPVOID,
132     dwShareMode: ::DWORD,
133     dwPreferredProtocols: ::DWORD,
134     lpstrRdr: ::LPSTR,
135     nMaxRdr: ::DWORD,
136     lpstrCard: ::LPSTR,
137     nMaxCard: ::DWORD,
138     dwActiveProtocol: ::DWORD,
139     hCardHandle: SCARDHANDLE,
140 }}
141 pub type POPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
142 pub type LPOPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
143 STRUCT!{nodebug struct OPENCARDNAME_EXW {
144     dwStructSize: ::DWORD,
145     hSCardContext: SCARDCONTEXT,
146     hwndOwner: ::HWND,
147     dwFlags: ::DWORD,
148     lpstrTitle: ::LPCWSTR,
149     lpstrSearchDesc: ::LPCWSTR,
150     hIcon: ::HICON,
151     pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAW,
152     lpfnConnect: LPOCNCONNPROCW,
153     pvUserData: ::LPVOID,
154     dwShareMode: ::DWORD,
155     dwPreferredProtocols: ::DWORD,
156     lpstrRdr: ::LPWSTR,
157     nMaxRdr: ::DWORD,
158     lpstrCard: ::LPWSTR,
159     nMaxCard: ::DWORD,
160     dwActiveProtocol: ::DWORD,
161     hCardHandle: SCARDHANDLE,
162 }}
163 pub type POPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
164 pub type LPOPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
165 pub type OPENCARDNAMEA_EX = OPENCARDNAME_EXA;
166 pub type OPENCARDNAMEW_EX = OPENCARDNAME_EXW;
167 pub type POPENCARDNAMEA_EX = POPENCARDNAME_EXA;
168 pub type POPENCARDNAMEW_EX = POPENCARDNAME_EXW;
169 pub type LPOPENCARDNAMEA_EX = LPOPENCARDNAME_EXA;
170 pub type LPOPENCARDNAMEW_EX = LPOPENCARDNAME_EXW;
171 pub const SCARD_READER_SEL_AUTH_PACKAGE: ::DWORD = -629i32 as ::DWORD;
172 ENUM!{enum READER_SEL_REQUEST_MATCH_TYPE {
173     RSR_MATCH_TYPE_READER_AND_CONTAINER = 1,
174     RSR_MATCH_TYPE_SERIAL_NUMBER,
175     RSR_MATCH_TYPE_ALL_CARDS,
176 }}
177 STRUCT!{struct READER_SEL_REQUEST_ReaderAndContainerParameter {
178     cbReaderNameOffset: ::DWORD,
179     cchReaderNameLength: ::DWORD,
180     cbContainerNameOffset: ::DWORD,
181     cchContainerNameLength: ::DWORD,
182     dwDesiredCardModuleVersion: ::DWORD,
183     dwCspFlags: ::DWORD,
184 }}
185 STRUCT!{struct READER_SEL_REQUEST_SerialNumberParameter {
186     cbSerialNumberOffset: ::DWORD,
187     cbSerialNumberLength: ::DWORD,
188     dwDesiredCardModuleVersion: ::DWORD,
189 }}
190 STRUCT!{struct READER_SEL_REQUEST {
191     dwShareMode: ::DWORD,
192     dwPreferredProtocols: ::DWORD,
193     MatchType: READER_SEL_REQUEST_MATCH_TYPE,
194     ReaderAndContainerParameter: READER_SEL_REQUEST_ReaderAndContainerParameter,
195 }}
196 UNION!(
197     READER_SEL_REQUEST, ReaderAndContainerParameter, SerialNumberParameter,
198     SerialNumberParameter_mut, READER_SEL_REQUEST_SerialNumberParameter
199 );
200 pub type PREADER_SEL_REQUEST = *mut READER_SEL_REQUEST;
201 STRUCT!{struct READER_SEL_RESPONSE {
202     cbReaderNameOffset: ::DWORD,
203     cchReaderNameLength: ::DWORD,
204     cbCardNameOffset: ::DWORD,
205     cchCardNameLength: ::DWORD,
206 }}
207 pub type PREADER_SEL_RESPONSE = *mut READER_SEL_RESPONSE;
208 STRUCT!{nodebug struct OPENCARDNAMEA {
209     dwStructSize: ::DWORD,
210     hwndOwner: ::HWND,
211     hSCardContext: SCARDCONTEXT,
212     lpstrGroupNames: ::LPSTR,
213     nMaxGroupNames: ::DWORD,
214     lpstrCardNames: ::LPSTR,
215     nMaxCardNames: ::DWORD,
216     rgguidInterfaces: ::LPCGUID,
217     cguidInterfaces: ::DWORD,
218     lpstrRdr: ::LPSTR,
219     nMaxRdr: ::DWORD,
220     lpstrCard: ::LPSTR,
221     nMaxCard: ::DWORD,
222     lpstrTitle: ::LPCSTR,
223     dwFlags: ::DWORD,
224     pvUserData: ::LPVOID,
225     dwShareMode: ::DWORD,
226     dwPreferredProtocols: ::DWORD,
227     dwActiveProtocol: ::DWORD,
228     lpfnConnect: LPOCNCONNPROCA,
229     lpfnCheck: LPOCNCHKPROC,
230     lpfnDisconnect: LPOCNDSCPROC,
231     hCardHandle: SCARDHANDLE,
232 }}
233 pub type POPENCARDNAMEA = *mut OPENCARDNAMEA;
234 pub type LPOPENCARDNAMEA = *mut OPENCARDNAMEA;
235 STRUCT!{nodebug struct OPENCARDNAMEW {
236     dwStructSize: ::DWORD,
237     hwndOwner: ::HWND,
238     hSCardContext: SCARDCONTEXT,
239     lpstrGroupNames: ::LPWSTR,
240     nMaxGroupNames: ::DWORD,
241     lpstrCardNames: ::LPWSTR,
242     nMaxCardNames: ::DWORD,
243     rgguidInterfaces: ::LPCGUID,
244     cguidInterfaces: ::DWORD,
245     lpstrRdr: ::LPWSTR,
246     nMaxRdr: ::DWORD,
247     lpstrCard: ::LPWSTR,
248     nMaxCard: ::DWORD,
249     lpstrTitle: ::LPCWSTR,
250     dwFlags: ::DWORD,
251     pvUserData: ::LPVOID,
252     dwShareMode: ::DWORD,
253     dwPreferredProtocols: ::DWORD,
254     dwActiveProtocol: ::DWORD,
255     lpfnConnect: LPOCNCONNPROCW,
256     lpfnCheck: LPOCNCHKPROC,
257     lpfnDisconnect: LPOCNDSCPROC,
258     hCardHandle: SCARDHANDLE,
259 }}
260 pub type POPENCARDNAMEW = *mut OPENCARDNAMEW;
261 pub type LPOPENCARDNAMEW = *mut OPENCARDNAMEW;
262 pub type OPENCARDNAME_A = OPENCARDNAMEA;
263 pub type OPENCARDNAME_W = OPENCARDNAMEW;
264 pub type POPENCARDNAME_A = POPENCARDNAMEA;
265 pub type POPENCARDNAME_W = POPENCARDNAMEW;
266 pub type LPOPENCARDNAME_A = LPOPENCARDNAMEA;
267 pub type LPOPENCARDNAME_W = LPOPENCARDNAMEW;
268 pub const SCARD_AUDIT_CHV_FAILURE: ::DWORD = 0x0;
269 pub const SCARD_AUDIT_CHV_SUCCESS: ::DWORD = 0x1;
270