/src/FreeRDP/winpr/libwinpr/smartcard/smartcard.c
Line | Count | Source (jump to first uncovered line) |
1 | | /** |
2 | | * WinPR: Windows Portable Runtime |
3 | | * Smart Card API |
4 | | * |
5 | | * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com> |
6 | | * Copyright 2020 Armin Novak <armin.novak@thincast.com> |
7 | | * Copyright 2020 Thincast Technologies GmbH |
8 | | * |
9 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
10 | | * you may not use this file except in compliance with the License. |
11 | | * You may obtain a copy of the License at |
12 | | * |
13 | | * http://www.apache.org/licenses/LICENSE-2.0 |
14 | | * |
15 | | * Unless required by applicable law or agreed to in writing, software |
16 | | * distributed under the License is distributed on an "AS IS" BASIS, |
17 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
18 | | * See the License for the specific language governing permissions and |
19 | | * limitations under the License. |
20 | | */ |
21 | | |
22 | | #include <winpr/config.h> |
23 | | |
24 | | #include <winpr/crt.h> |
25 | | #include <winpr/library.h> |
26 | | #include <winpr/smartcard.h> |
27 | | #include <winpr/synch.h> |
28 | | #include <winpr/wlog.h> |
29 | | #include <winpr/assert.h> |
30 | | |
31 | | #include "../log.h" |
32 | | |
33 | | #include "smartcard.h" |
34 | | |
35 | | #if defined(WITH_SMARTCARD_INSPECT) |
36 | | #include "smartcard_inspect.h" |
37 | | #endif |
38 | | |
39 | | static INIT_ONCE g_Initialized = INIT_ONCE_STATIC_INIT; |
40 | | static const SCardApiFunctionTable* g_SCardApi = NULL; |
41 | | |
42 | | #define TAG WINPR_TAG("smartcard") |
43 | | |
44 | | #define xstr(s) str(s) |
45 | | #define str(s) #s |
46 | | |
47 | | #define SCARDAPI_STUB_CALL_LONG(_name, ...) \ |
48 | 0 | InitOnceExecuteOnce(&g_Initialized, InitializeSCardApiStubs, NULL, NULL); \ |
49 | 0 | if (!g_SCardApi || !g_SCardApi->pfn##_name) \ |
50 | 0 | { \ |
51 | 0 | WLog_DBG(TAG, "Missing function pointer g_SCardApi=%p->" xstr(pfn##_name) "=%p", \ |
52 | 0 | g_SCardApi, g_SCardApi ? g_SCardApi->pfn##_name : NULL); \ |
53 | 0 | return SCARD_E_NO_SERVICE; \ |
54 | 0 | } \ |
55 | 0 | return g_SCardApi->pfn##_name(__VA_ARGS__) |
56 | | |
57 | | #define SCARDAPI_STUB_CALL_HANDLE(_name, ...) \ |
58 | 0 | InitOnceExecuteOnce(&g_Initialized, InitializeSCardApiStubs, NULL, NULL); \ |
59 | 0 | if (!g_SCardApi || !g_SCardApi->pfn##_name) \ |
60 | 0 | { \ |
61 | 0 | WLog_DBG(TAG, "Missing function pointer g_SCardApi=%p->" xstr(pfn##_name) "=%p", \ |
62 | 0 | g_SCardApi, g_SCardApi ? g_SCardApi->pfn##_name : NULL); \ |
63 | 0 | return NULL; \ |
64 | 0 | } \ |
65 | 0 | return g_SCardApi->pfn##_name(__VA_ARGS__) |
66 | | |
67 | | #define SCARDAPI_STUB_CALL_VOID(_name, ...) \ |
68 | 0 | InitOnceExecuteOnce(&g_Initialized, InitializeSCardApiStubs, NULL, NULL); \ |
69 | 0 | if (!g_SCardApi || !g_SCardApi->pfn##_name) \ |
70 | 0 | { \ |
71 | 0 | WLog_DBG(TAG, "Missing function pointer g_SCardApi=%p->" xstr(pfn##_name) "=%p", \ |
72 | 0 | g_SCardApi, g_SCardApi ? g_SCardApi->pfn##_name : NULL); \ |
73 | 0 | return; \ |
74 | 0 | } \ |
75 | 0 | g_SCardApi->pfn##_name(__VA_ARGS__) |
76 | | |
77 | | /** |
78 | | * Standard Windows Smart Card API |
79 | | */ |
80 | | |
81 | | const SCARD_IO_REQUEST g_rgSCardT0Pci = { SCARD_PROTOCOL_T0, 8 }; |
82 | | const SCARD_IO_REQUEST g_rgSCardT1Pci = { SCARD_PROTOCOL_T1, 8 }; |
83 | | const SCARD_IO_REQUEST g_rgSCardRawPci = { SCARD_PROTOCOL_RAW, 8 }; |
84 | | |
85 | | static BOOL CALLBACK InitializeSCardApiStubs(PINIT_ONCE once, PVOID param, PVOID* context) |
86 | 0 | { |
87 | | #ifdef _WIN32 |
88 | | if (Windows_InitializeSCardApi() >= 0) |
89 | | g_SCardApi = Windows_GetSCardApiFunctionTable(); |
90 | | #else |
91 | 0 | #if defined(WITH_SMARTCARD_PCSC) |
92 | 0 | if (PCSC_InitializeSCardApi() >= 0) |
93 | 0 | g_SCardApi = PCSC_GetSCardApiFunctionTable(); |
94 | 0 | #endif |
95 | 0 | #endif |
96 | |
|
97 | | #if defined(WITH_SMARTCARD_INSPECT) |
98 | | g_SCardApi = Inspect_RegisterSCardApi(g_SCardApi); |
99 | | #endif |
100 | 0 | return TRUE; |
101 | 0 | } |
102 | | |
103 | | WINSCARDAPI LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, |
104 | | LPCVOID pvReserved2, LPSCARDCONTEXT phContext) |
105 | 0 | { |
106 | 0 | SCARDAPI_STUB_CALL_LONG(SCardEstablishContext, dwScope, pvReserved1, pvReserved2, phContext); |
107 | 0 | } |
108 | | |
109 | | WINSCARDAPI LONG WINAPI SCardReleaseContext(SCARDCONTEXT hContext) |
110 | 0 | { |
111 | 0 | SCARDAPI_STUB_CALL_LONG(SCardReleaseContext, hContext); |
112 | 0 | } |
113 | | |
114 | | WINSCARDAPI LONG WINAPI SCardIsValidContext(SCARDCONTEXT hContext) |
115 | 0 | { |
116 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIsValidContext, hContext); |
117 | 0 | } |
118 | | |
119 | | WINSCARDAPI LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups, |
120 | | LPDWORD pcchGroups) |
121 | 0 | { |
122 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReaderGroupsA, hContext, mszGroups, pcchGroups); |
123 | 0 | } |
124 | | |
125 | | WINSCARDAPI LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups, |
126 | | LPDWORD pcchGroups) |
127 | 0 | { |
128 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReaderGroupsW, hContext, mszGroups, pcchGroups); |
129 | 0 | } |
130 | | |
131 | | WINSCARDAPI LONG WINAPI SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, |
132 | | LPDWORD pcchReaders) |
133 | 0 | { |
134 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReadersA, hContext, mszGroups, mszReaders, pcchReaders); |
135 | 0 | } |
136 | | |
137 | | WINSCARDAPI LONG WINAPI SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups, |
138 | | LPWSTR mszReaders, LPDWORD pcchReaders) |
139 | 0 | { |
140 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReadersW, hContext, mszGroups, mszReaders, pcchReaders); |
141 | 0 | } |
142 | | |
143 | | WINSCARDAPI LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr, |
144 | | LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, |
145 | | CHAR* mszCards, LPDWORD pcchCards) |
146 | 0 | { |
147 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListCardsA, hContext, pbAtr, rgquidInterfaces, cguidInterfaceCount, |
148 | 0 | mszCards, pcchCards); |
149 | 0 | } |
150 | | |
151 | | WINSCARDAPI LONG WINAPI SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr, |
152 | | LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, |
153 | | WCHAR* mszCards, LPDWORD pcchCards) |
154 | 0 | { |
155 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListCardsW, hContext, pbAtr, rgquidInterfaces, cguidInterfaceCount, |
156 | 0 | mszCards, pcchCards); |
157 | 0 | } |
158 | | |
159 | | WINSCARDAPI LONG WINAPI SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard, |
160 | | LPGUID pguidInterfaces, LPDWORD pcguidInterfaces) |
161 | 0 | { |
162 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListInterfacesA, hContext, szCard, pguidInterfaces, |
163 | 0 | pcguidInterfaces); |
164 | 0 | } |
165 | | |
166 | | WINSCARDAPI LONG WINAPI SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard, |
167 | | LPGUID pguidInterfaces, LPDWORD pcguidInterfaces) |
168 | 0 | { |
169 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListInterfacesW, hContext, szCard, pguidInterfaces, |
170 | 0 | pcguidInterfaces); |
171 | 0 | } |
172 | | |
173 | | WINSCARDAPI LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard, |
174 | | LPGUID pguidProviderId) |
175 | 0 | { |
176 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetProviderIdA, hContext, szCard, pguidProviderId); |
177 | 0 | } |
178 | | |
179 | | WINSCARDAPI LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard, |
180 | | LPGUID pguidProviderId) |
181 | 0 | { |
182 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetProviderIdW, hContext, szCard, pguidProviderId); |
183 | 0 | } |
184 | | |
185 | | WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName, |
186 | | DWORD dwProviderId, CHAR* szProvider, |
187 | | LPDWORD pcchProvider) |
188 | 0 | { |
189 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetCardTypeProviderNameA, hContext, szCardName, dwProviderId, |
190 | 0 | szProvider, pcchProvider); |
191 | 0 | } |
192 | | |
193 | | WINSCARDAPI LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName, |
194 | | DWORD dwProviderId, WCHAR* szProvider, |
195 | | LPDWORD pcchProvider) |
196 | 0 | { |
197 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetCardTypeProviderNameW, hContext, szCardName, dwProviderId, |
198 | 0 | szProvider, pcchProvider); |
199 | 0 | } |
200 | | |
201 | | WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName) |
202 | 0 | { |
203 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceReaderGroupA, hContext, szGroupName); |
204 | 0 | } |
205 | | |
206 | | WINSCARDAPI LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName) |
207 | 0 | { |
208 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceReaderGroupW, hContext, szGroupName); |
209 | 0 | } |
210 | | |
211 | | WINSCARDAPI LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName) |
212 | 0 | { |
213 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetReaderGroupA, hContext, szGroupName); |
214 | 0 | } |
215 | | |
216 | | WINSCARDAPI LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName) |
217 | 0 | { |
218 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetReaderGroupW, hContext, szGroupName); |
219 | 0 | } |
220 | | |
221 | | WINSCARDAPI LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
222 | | LPCSTR szDeviceName) |
223 | 0 | { |
224 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceReaderA, hContext, szReaderName, szDeviceName); |
225 | 0 | } |
226 | | |
227 | | WINSCARDAPI LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
228 | | LPCWSTR szDeviceName) |
229 | 0 | { |
230 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceReaderW, hContext, szReaderName, szDeviceName); |
231 | 0 | } |
232 | | |
233 | | WINSCARDAPI LONG WINAPI SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName) |
234 | 0 | { |
235 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetReaderA, hContext, szReaderName); |
236 | 0 | } |
237 | | |
238 | | WINSCARDAPI LONG WINAPI SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName) |
239 | 0 | { |
240 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetReaderW, hContext, szReaderName); |
241 | 0 | } |
242 | | |
243 | | WINSCARDAPI LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
244 | | LPCSTR szGroupName) |
245 | 0 | { |
246 | 0 | SCARDAPI_STUB_CALL_LONG(SCardAddReaderToGroupA, hContext, szReaderName, szGroupName); |
247 | 0 | } |
248 | | |
249 | | WINSCARDAPI LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
250 | | LPCWSTR szGroupName) |
251 | 0 | { |
252 | 0 | SCARDAPI_STUB_CALL_LONG(SCardAddReaderToGroupW, hContext, szReaderName, szGroupName); |
253 | 0 | } |
254 | | |
255 | | WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
256 | | LPCSTR szGroupName) |
257 | 0 | { |
258 | 0 | SCARDAPI_STUB_CALL_LONG(SCardRemoveReaderFromGroupA, hContext, szReaderName, szGroupName); |
259 | 0 | } |
260 | | |
261 | | WINSCARDAPI LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
262 | | LPCWSTR szGroupName) |
263 | 0 | { |
264 | 0 | SCARDAPI_STUB_CALL_LONG(SCardRemoveReaderFromGroupW, hContext, szReaderName, szGroupName); |
265 | 0 | } |
266 | | |
267 | | WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName, |
268 | | LPCGUID pguidPrimaryProvider, |
269 | | LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, |
270 | | LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen) |
271 | 0 | { |
272 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceCardTypeA, hContext, szCardName, pguidPrimaryProvider, |
273 | 0 | rgguidInterfaces, dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen); |
274 | 0 | } |
275 | | |
276 | | WINSCARDAPI LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName, |
277 | | LPCGUID pguidPrimaryProvider, |
278 | | LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, |
279 | | LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen) |
280 | 0 | { |
281 | 0 | SCARDAPI_STUB_CALL_LONG(SCardIntroduceCardTypeW, hContext, szCardName, pguidPrimaryProvider, |
282 | 0 | rgguidInterfaces, dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen); |
283 | 0 | } |
284 | | |
285 | | WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName, |
286 | | DWORD dwProviderId, LPCSTR szProvider) |
287 | 0 | { |
288 | 0 | SCARDAPI_STUB_CALL_LONG(SCardSetCardTypeProviderNameA, hContext, szCardName, dwProviderId, |
289 | 0 | szProvider); |
290 | 0 | } |
291 | | |
292 | | WINSCARDAPI LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName, |
293 | | DWORD dwProviderId, LPCWSTR szProvider) |
294 | 0 | { |
295 | 0 | SCARDAPI_STUB_CALL_LONG(SCardSetCardTypeProviderNameW, hContext, szCardName, dwProviderId, |
296 | 0 | szProvider); |
297 | 0 | } |
298 | | |
299 | | WINSCARDAPI LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName) |
300 | 0 | { |
301 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetCardTypeA, hContext, szCardName); |
302 | 0 | } |
303 | | |
304 | | WINSCARDAPI LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName) |
305 | 0 | { |
306 | 0 | SCARDAPI_STUB_CALL_LONG(SCardForgetCardTypeW, hContext, szCardName); |
307 | 0 | } |
308 | | |
309 | | WINSCARDAPI LONG WINAPI SCardFreeMemory(SCARDCONTEXT hContext, LPVOID pvMem) |
310 | 0 | { |
311 | 0 | SCARDAPI_STUB_CALL_LONG(SCardFreeMemory, hContext, pvMem); |
312 | 0 | } |
313 | | |
314 | | WINSCARDAPI HANDLE WINAPI SCardAccessStartedEvent(void) |
315 | 0 | { |
316 | 0 | SCARDAPI_STUB_CALL_HANDLE(SCardAccessStartedEvent); |
317 | 0 | } |
318 | | |
319 | | WINSCARDAPI void WINAPI SCardReleaseStartedEvent(void) |
320 | 0 | { |
321 | 0 | SCARDAPI_STUB_CALL_VOID(SCardReleaseStartedEvent); |
322 | 0 | } |
323 | | |
324 | | WINSCARDAPI LONG WINAPI SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards, |
325 | | LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders) |
326 | 0 | { |
327 | 0 | SCARDAPI_STUB_CALL_LONG(SCardLocateCardsA, hContext, mszCards, rgReaderStates, cReaders); |
328 | 0 | } |
329 | | |
330 | | WINSCARDAPI LONG WINAPI SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards, |
331 | | LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders) |
332 | 0 | { |
333 | 0 | SCARDAPI_STUB_CALL_LONG(SCardLocateCardsW, hContext, mszCards, rgReaderStates, cReaders); |
334 | 0 | } |
335 | | |
336 | | WINSCARDAPI LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, |
337 | | DWORD cAtrs, LPSCARD_READERSTATEA rgReaderStates, |
338 | | DWORD cReaders) |
339 | 0 | { |
340 | 0 | SCARDAPI_STUB_CALL_LONG(SCardLocateCardsByATRA, hContext, rgAtrMasks, cAtrs, rgReaderStates, |
341 | 0 | cReaders); |
342 | 0 | } |
343 | | |
344 | | WINSCARDAPI LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, |
345 | | DWORD cAtrs, LPSCARD_READERSTATEW rgReaderStates, |
346 | | DWORD cReaders) |
347 | 0 | { |
348 | 0 | SCARDAPI_STUB_CALL_LONG(SCardLocateCardsByATRW, hContext, rgAtrMasks, cAtrs, rgReaderStates, |
349 | 0 | cReaders); |
350 | 0 | } |
351 | | |
352 | | WINSCARDAPI LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout, |
353 | | LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders) |
354 | 0 | { |
355 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetStatusChangeA, hContext, dwTimeout, rgReaderStates, cReaders); |
356 | 0 | } |
357 | | |
358 | | WINSCARDAPI LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout, |
359 | | LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders) |
360 | 0 | { |
361 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetStatusChangeW, hContext, dwTimeout, rgReaderStates, cReaders); |
362 | 0 | } |
363 | | |
364 | | WINSCARDAPI LONG WINAPI SCardCancel(SCARDCONTEXT hContext) |
365 | 0 | { |
366 | 0 | SCARDAPI_STUB_CALL_LONG(SCardCancel, hContext); |
367 | 0 | } |
368 | | |
369 | | WINSCARDAPI LONG WINAPI SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, |
370 | | DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, |
371 | | LPDWORD pdwActiveProtocol) |
372 | 0 | { |
373 | 0 | SCARDAPI_STUB_CALL_LONG(SCardConnectA, hContext, szReader, dwShareMode, dwPreferredProtocols, |
374 | 0 | phCard, pdwActiveProtocol); |
375 | 0 | } |
376 | | |
377 | | WINSCARDAPI LONG WINAPI SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode, |
378 | | DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, |
379 | | LPDWORD pdwActiveProtocol) |
380 | 0 | { |
381 | 0 | SCARDAPI_STUB_CALL_LONG(SCardConnectW, hContext, szReader, dwShareMode, dwPreferredProtocols, |
382 | 0 | phCard, pdwActiveProtocol); |
383 | 0 | } |
384 | | |
385 | | WINSCARDAPI LONG WINAPI SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode, |
386 | | DWORD dwPreferredProtocols, DWORD dwInitialization, |
387 | | LPDWORD pdwActiveProtocol) |
388 | 0 | { |
389 | 0 | SCARDAPI_STUB_CALL_LONG(SCardReconnect, hCard, dwShareMode, dwPreferredProtocols, |
390 | 0 | dwInitialization, pdwActiveProtocol); |
391 | 0 | } |
392 | | |
393 | | WINSCARDAPI LONG WINAPI SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition) |
394 | 0 | { |
395 | 0 | SCARDAPI_STUB_CALL_LONG(SCardDisconnect, hCard, dwDisposition); |
396 | 0 | } |
397 | | |
398 | | WINSCARDAPI LONG WINAPI SCardBeginTransaction(SCARDHANDLE hCard) |
399 | 0 | { |
400 | 0 | SCARDAPI_STUB_CALL_LONG(SCardBeginTransaction, hCard); |
401 | 0 | } |
402 | | |
403 | | WINSCARDAPI LONG WINAPI SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition) |
404 | 0 | { |
405 | 0 | SCARDAPI_STUB_CALL_LONG(SCardEndTransaction, hCard, dwDisposition); |
406 | 0 | } |
407 | | |
408 | | WINSCARDAPI LONG WINAPI SCardCancelTransaction(SCARDHANDLE hCard) |
409 | 0 | { |
410 | 0 | SCARDAPI_STUB_CALL_LONG(SCardCancelTransaction, hCard); |
411 | 0 | } |
412 | | |
413 | | WINSCARDAPI LONG WINAPI SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol, |
414 | | LPBYTE pbAtr, LPDWORD pcbAtrLen) |
415 | 0 | { |
416 | 0 | SCARDAPI_STUB_CALL_LONG(SCardState, hCard, pdwState, pdwProtocol, pbAtr, pcbAtrLen); |
417 | 0 | } |
418 | | |
419 | | WINSCARDAPI LONG WINAPI SCardStatusA(SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen, |
420 | | LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, |
421 | | LPDWORD pcbAtrLen) |
422 | 0 | { |
423 | 0 | SCARDAPI_STUB_CALL_LONG(SCardStatusA, hCard, mszReaderNames, pcchReaderLen, pdwState, |
424 | 0 | pdwProtocol, pbAtr, pcbAtrLen); |
425 | 0 | } |
426 | | |
427 | | WINSCARDAPI LONG WINAPI SCardStatusW(SCARDHANDLE hCard, LPWSTR mszReaderNames, |
428 | | LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, |
429 | | LPBYTE pbAtr, LPDWORD pcbAtrLen) |
430 | 0 | { |
431 | 0 | SCARDAPI_STUB_CALL_LONG(SCardStatusW, hCard, mszReaderNames, pcchReaderLen, pdwState, |
432 | 0 | pdwProtocol, pbAtr, pcbAtrLen); |
433 | 0 | } |
434 | | |
435 | | WINSCARDAPI LONG WINAPI SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, |
436 | | LPCBYTE pbSendBuffer, DWORD cbSendLength, |
437 | | LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, |
438 | | LPDWORD pcbRecvLength) |
439 | 0 | { |
440 | 0 | SCARDAPI_STUB_CALL_LONG(SCardTransmit, hCard, pioSendPci, pbSendBuffer, cbSendLength, |
441 | 0 | pioRecvPci, pbRecvBuffer, pcbRecvLength); |
442 | 0 | } |
443 | | |
444 | | WINSCARDAPI LONG WINAPI SCardGetTransmitCount(SCARDHANDLE hCard, LPDWORD pcTransmitCount) |
445 | 0 | { |
446 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetTransmitCount, hCard, pcTransmitCount); |
447 | 0 | } |
448 | | |
449 | | WINSCARDAPI LONG WINAPI SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer, |
450 | | DWORD cbInBufferSize, LPVOID lpOutBuffer, |
451 | | DWORD cbOutBufferSize, LPDWORD lpBytesReturned) |
452 | 0 | { |
453 | 0 | SCARDAPI_STUB_CALL_LONG(SCardControl, hCard, dwControlCode, lpInBuffer, cbInBufferSize, |
454 | 0 | lpOutBuffer, cbOutBufferSize, lpBytesReturned); |
455 | 0 | } |
456 | | |
457 | | WINSCARDAPI LONG WINAPI SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr, |
458 | | LPDWORD pcbAttrLen) |
459 | 0 | { |
460 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetAttrib, hCard, dwAttrId, pbAttr, pcbAttrLen); |
461 | 0 | } |
462 | | |
463 | | WINSCARDAPI LONG WINAPI SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, |
464 | | DWORD cbAttrLen) |
465 | 0 | { |
466 | 0 | SCARDAPI_STUB_CALL_LONG(SCardSetAttrib, hCard, dwAttrId, pbAttr, cbAttrLen); |
467 | 0 | } |
468 | | |
469 | | WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardA(LPOPENCARDNAMEA_EX pDlgStruc) |
470 | 0 | { |
471 | 0 | SCARDAPI_STUB_CALL_LONG(SCardUIDlgSelectCardA, pDlgStruc); |
472 | 0 | } |
473 | | |
474 | | WINSCARDAPI LONG WINAPI SCardUIDlgSelectCardW(LPOPENCARDNAMEW_EX pDlgStruc) |
475 | 0 | { |
476 | 0 | SCARDAPI_STUB_CALL_LONG(SCardUIDlgSelectCardW, pDlgStruc); |
477 | 0 | } |
478 | | |
479 | | WINSCARDAPI LONG WINAPI GetOpenCardNameA(LPOPENCARDNAMEA pDlgStruc) |
480 | 0 | { |
481 | 0 | SCARDAPI_STUB_CALL_LONG(GetOpenCardNameA, pDlgStruc); |
482 | 0 | } |
483 | | |
484 | | WINSCARDAPI LONG WINAPI GetOpenCardNameW(LPOPENCARDNAMEW pDlgStruc) |
485 | 0 | { |
486 | 0 | SCARDAPI_STUB_CALL_LONG(GetOpenCardNameW, pDlgStruc); |
487 | 0 | } |
488 | | |
489 | | WINSCARDAPI LONG WINAPI SCardDlgExtendedError(void) |
490 | 0 | { |
491 | 0 | SCARDAPI_STUB_CALL_LONG(SCardDlgExtendedError); |
492 | 0 | } |
493 | | |
494 | | WINSCARDAPI LONG WINAPI SCardReadCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier, |
495 | | DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, |
496 | | DWORD* DataLen) |
497 | 0 | { |
498 | 0 | SCARDAPI_STUB_CALL_LONG(SCardReadCacheA, hContext, CardIdentifier, FreshnessCounter, LookupName, |
499 | 0 | Data, DataLen); |
500 | 0 | } |
501 | | |
502 | | WINSCARDAPI LONG WINAPI SCardReadCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier, |
503 | | DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, |
504 | | DWORD* DataLen) |
505 | 0 | { |
506 | 0 | SCARDAPI_STUB_CALL_LONG(SCardReadCacheW, hContext, CardIdentifier, FreshnessCounter, LookupName, |
507 | 0 | Data, DataLen); |
508 | 0 | } |
509 | | |
510 | | WINSCARDAPI LONG WINAPI SCardWriteCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier, |
511 | | DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, |
512 | | DWORD DataLen) |
513 | 0 | { |
514 | 0 | SCARDAPI_STUB_CALL_LONG(SCardWriteCacheA, hContext, CardIdentifier, FreshnessCounter, |
515 | 0 | LookupName, Data, DataLen); |
516 | 0 | } |
517 | | |
518 | | WINSCARDAPI LONG WINAPI SCardWriteCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier, |
519 | | DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, |
520 | | DWORD DataLen) |
521 | 0 | { |
522 | 0 | SCARDAPI_STUB_CALL_LONG(SCardWriteCacheW, hContext, CardIdentifier, FreshnessCounter, |
523 | 0 | LookupName, Data, DataLen); |
524 | 0 | } |
525 | | |
526 | | WINSCARDAPI LONG WINAPI SCardGetReaderIconA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
527 | | LPBYTE pbIcon, LPDWORD pcbIcon) |
528 | 0 | { |
529 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetReaderIconA, hContext, szReaderName, pbIcon, pcbIcon); |
530 | 0 | } |
531 | | |
532 | | WINSCARDAPI LONG WINAPI SCardGetReaderIconW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
533 | | LPBYTE pbIcon, LPDWORD pcbIcon) |
534 | 0 | { |
535 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetReaderIconW, hContext, szReaderName, pbIcon, pcbIcon); |
536 | 0 | } |
537 | | |
538 | | WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
539 | | LPDWORD pdwDeviceTypeId) |
540 | 0 | { |
541 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetDeviceTypeIdA, hContext, szReaderName, pdwDeviceTypeId); |
542 | 0 | } |
543 | | |
544 | | WINSCARDAPI LONG WINAPI SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
545 | | LPDWORD pdwDeviceTypeId) |
546 | 0 | { |
547 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetDeviceTypeIdW, hContext, szReaderName, pdwDeviceTypeId); |
548 | 0 | } |
549 | | |
550 | | WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext, LPCSTR szReaderName, |
551 | | LPSTR szDeviceInstanceId, |
552 | | LPDWORD pcchDeviceInstanceId) |
553 | 0 | { |
554 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetReaderDeviceInstanceIdA, hContext, szReaderName, |
555 | 0 | szDeviceInstanceId, pcchDeviceInstanceId); |
556 | 0 | } |
557 | | |
558 | | WINSCARDAPI LONG WINAPI SCardGetReaderDeviceInstanceIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName, |
559 | | LPWSTR szDeviceInstanceId, |
560 | | LPDWORD pcchDeviceInstanceId) |
561 | 0 | { |
562 | 0 | SCARDAPI_STUB_CALL_LONG(SCardGetReaderDeviceInstanceIdW, hContext, szReaderName, |
563 | 0 | szDeviceInstanceId, pcchDeviceInstanceId); |
564 | 0 | } |
565 | | |
566 | | WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdA(SCARDCONTEXT hContext, |
567 | | LPCSTR szDeviceInstanceId, |
568 | | LPSTR mszReaders, LPDWORD pcchReaders) |
569 | 0 | { |
570 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReadersWithDeviceInstanceIdA, hContext, szDeviceInstanceId, |
571 | 0 | mszReaders, pcchReaders); |
572 | 0 | } |
573 | | |
574 | | WINSCARDAPI LONG WINAPI SCardListReadersWithDeviceInstanceIdW(SCARDCONTEXT hContext, |
575 | | LPCWSTR szDeviceInstanceId, |
576 | | LPWSTR mszReaders, |
577 | | LPDWORD pcchReaders) |
578 | 0 | { |
579 | 0 | SCARDAPI_STUB_CALL_LONG(SCardListReadersWithDeviceInstanceIdW, hContext, szDeviceInstanceId, |
580 | 0 | mszReaders, pcchReaders); |
581 | 0 | } |
582 | | |
583 | | WINSCARDAPI LONG WINAPI SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent) |
584 | 0 | { |
585 | 0 | SCARDAPI_STUB_CALL_LONG(SCardAudit, hContext, dwEvent); |
586 | 0 | } |
587 | | |
588 | | /** |
589 | | * Extended API |
590 | | */ |
591 | | |
592 | | WINSCARDAPI const char* WINAPI SCardGetErrorString(LONG errorCode) |
593 | 0 | { |
594 | 0 | switch (errorCode) |
595 | 0 | { |
596 | 0 | case SCARD_S_SUCCESS: |
597 | 0 | return "SCARD_S_SUCCESS"; |
598 | | |
599 | 0 | case SCARD_F_INTERNAL_ERROR: |
600 | 0 | return "SCARD_F_INTERNAL_ERROR"; |
601 | | |
602 | 0 | case SCARD_E_CANCELLED: |
603 | 0 | return "SCARD_E_CANCELLED"; |
604 | | |
605 | 0 | case SCARD_E_INVALID_HANDLE: |
606 | 0 | return "SCARD_E_INVALID_HANDLE"; |
607 | | |
608 | 0 | case SCARD_E_INVALID_PARAMETER: |
609 | 0 | return "SCARD_E_INVALID_PARAMETER"; |
610 | | |
611 | 0 | case SCARD_E_INVALID_TARGET: |
612 | 0 | return "SCARD_E_INVALID_TARGET"; |
613 | | |
614 | 0 | case SCARD_E_NO_MEMORY: |
615 | 0 | return "SCARD_E_NO_MEMORY"; |
616 | | |
617 | 0 | case SCARD_F_WAITED_TOO_LONG: |
618 | 0 | return "SCARD_F_WAITED_TOO_LONG"; |
619 | | |
620 | 0 | case SCARD_E_INSUFFICIENT_BUFFER: |
621 | 0 | return "SCARD_E_INSUFFICIENT_BUFFER"; |
622 | | |
623 | 0 | case SCARD_E_UNKNOWN_READER: |
624 | 0 | return "SCARD_E_UNKNOWN_READER"; |
625 | | |
626 | 0 | case SCARD_E_TIMEOUT: |
627 | 0 | return "SCARD_E_TIMEOUT"; |
628 | | |
629 | 0 | case SCARD_E_SHARING_VIOLATION: |
630 | 0 | return "SCARD_E_SHARING_VIOLATION"; |
631 | | |
632 | 0 | case SCARD_E_NO_SMARTCARD: |
633 | 0 | return "SCARD_E_NO_SMARTCARD"; |
634 | | |
635 | 0 | case SCARD_E_UNKNOWN_CARD: |
636 | 0 | return "SCARD_E_UNKNOWN_CARD"; |
637 | | |
638 | 0 | case SCARD_E_CANT_DISPOSE: |
639 | 0 | return "SCARD_E_CANT_DISPOSE"; |
640 | | |
641 | 0 | case SCARD_E_PROTO_MISMATCH: |
642 | 0 | return "SCARD_E_PROTO_MISMATCH"; |
643 | | |
644 | 0 | case SCARD_E_NOT_READY: |
645 | 0 | return "SCARD_E_NOT_READY"; |
646 | | |
647 | 0 | case SCARD_E_INVALID_VALUE: |
648 | 0 | return "SCARD_E_INVALID_VALUE"; |
649 | | |
650 | 0 | case SCARD_E_SYSTEM_CANCELLED: |
651 | 0 | return "SCARD_E_SYSTEM_CANCELLED"; |
652 | | |
653 | 0 | case SCARD_F_COMM_ERROR: |
654 | 0 | return "SCARD_F_COMM_ERROR"; |
655 | | |
656 | 0 | case SCARD_F_UNKNOWN_ERROR: |
657 | 0 | return "SCARD_F_UNKNOWN_ERROR"; |
658 | | |
659 | 0 | case SCARD_E_INVALID_ATR: |
660 | 0 | return "SCARD_E_INVALID_ATR"; |
661 | | |
662 | 0 | case SCARD_E_NOT_TRANSACTED: |
663 | 0 | return "SCARD_E_NOT_TRANSACTED"; |
664 | | |
665 | 0 | case SCARD_E_READER_UNAVAILABLE: |
666 | 0 | return "SCARD_E_READER_UNAVAILABLE"; |
667 | | |
668 | 0 | case SCARD_P_SHUTDOWN: |
669 | 0 | return "SCARD_P_SHUTDOWN"; |
670 | | |
671 | 0 | case SCARD_E_PCI_TOO_SMALL: |
672 | 0 | return "SCARD_E_PCI_TOO_SMALL"; |
673 | | |
674 | 0 | case SCARD_E_READER_UNSUPPORTED: |
675 | 0 | return "SCARD_E_READER_UNSUPPORTED"; |
676 | | |
677 | 0 | case SCARD_E_DUPLICATE_READER: |
678 | 0 | return "SCARD_E_DUPLICATE_READER"; |
679 | | |
680 | 0 | case SCARD_E_CARD_UNSUPPORTED: |
681 | 0 | return "SCARD_E_CARD_UNSUPPORTED"; |
682 | | |
683 | 0 | case SCARD_E_NO_SERVICE: |
684 | 0 | return "SCARD_E_NO_SERVICE"; |
685 | | |
686 | 0 | case SCARD_E_SERVICE_STOPPED: |
687 | 0 | return "SCARD_E_SERVICE_STOPPED"; |
688 | | |
689 | 0 | case SCARD_E_UNEXPECTED: |
690 | 0 | return "SCARD_E_UNEXPECTED"; |
691 | | |
692 | 0 | case SCARD_E_ICC_INSTALLATION: |
693 | 0 | return "SCARD_E_ICC_INSTALLATION"; |
694 | | |
695 | 0 | case SCARD_E_ICC_CREATEORDER: |
696 | 0 | return "SCARD_E_ICC_CREATEORDER"; |
697 | | |
698 | 0 | case SCARD_E_UNSUPPORTED_FEATURE: |
699 | 0 | return "SCARD_E_UNSUPPORTED_FEATURE"; |
700 | | |
701 | 0 | case SCARD_E_DIR_NOT_FOUND: |
702 | 0 | return "SCARD_E_DIR_NOT_FOUND"; |
703 | | |
704 | 0 | case SCARD_E_FILE_NOT_FOUND: |
705 | 0 | return "SCARD_E_FILE_NOT_FOUND"; |
706 | | |
707 | 0 | case SCARD_E_NO_DIR: |
708 | 0 | return "SCARD_E_NO_DIR"; |
709 | | |
710 | 0 | case SCARD_E_NO_FILE: |
711 | 0 | return "SCARD_E_NO_FILE"; |
712 | | |
713 | 0 | case SCARD_E_NO_ACCESS: |
714 | 0 | return "SCARD_E_NO_ACCESS"; |
715 | | |
716 | 0 | case SCARD_E_WRITE_TOO_MANY: |
717 | 0 | return "SCARD_E_WRITE_TOO_MANY"; |
718 | | |
719 | 0 | case SCARD_E_BAD_SEEK: |
720 | 0 | return "SCARD_E_BAD_SEEK"; |
721 | | |
722 | 0 | case SCARD_E_INVALID_CHV: |
723 | 0 | return "SCARD_E_INVALID_CHV"; |
724 | | |
725 | 0 | case SCARD_E_UNKNOWN_RES_MNG: |
726 | 0 | return "SCARD_E_UNKNOWN_RES_MNG"; |
727 | | |
728 | 0 | case SCARD_E_NO_SUCH_CERTIFICATE: |
729 | 0 | return "SCARD_E_NO_SUCH_CERTIFICATE"; |
730 | | |
731 | 0 | case SCARD_E_CERTIFICATE_UNAVAILABLE: |
732 | 0 | return "SCARD_E_CERTIFICATE_UNAVAILABLE"; |
733 | | |
734 | 0 | case SCARD_E_NO_READERS_AVAILABLE: |
735 | 0 | return "SCARD_E_NO_READERS_AVAILABLE"; |
736 | | |
737 | 0 | case SCARD_E_COMM_DATA_LOST: |
738 | 0 | return "SCARD_E_COMM_DATA_LOST"; |
739 | | |
740 | 0 | case SCARD_E_NO_KEY_CONTAINER: |
741 | 0 | return "SCARD_E_NO_KEY_CONTAINER"; |
742 | | |
743 | 0 | case SCARD_E_SERVER_TOO_BUSY: |
744 | 0 | return "SCARD_E_SERVER_TOO_BUSY"; |
745 | | |
746 | 0 | case SCARD_E_PIN_CACHE_EXPIRED: |
747 | 0 | return "SCARD_E_PIN_CACHE_EXPIRED"; |
748 | | |
749 | 0 | case SCARD_E_NO_PIN_CACHE: |
750 | 0 | return "SCARD_E_NO_PIN_CACHE"; |
751 | | |
752 | 0 | case SCARD_E_READ_ONLY_CARD: |
753 | 0 | return "SCARD_E_READ_ONLY_CARD"; |
754 | | |
755 | 0 | case SCARD_W_UNSUPPORTED_CARD: |
756 | 0 | return "SCARD_W_UNSUPPORTED_CARD"; |
757 | | |
758 | 0 | case SCARD_W_UNRESPONSIVE_CARD: |
759 | 0 | return "SCARD_W_UNRESPONSIVE_CARD"; |
760 | | |
761 | 0 | case SCARD_W_UNPOWERED_CARD: |
762 | 0 | return "SCARD_W_UNPOWERED_CARD"; |
763 | | |
764 | 0 | case SCARD_W_RESET_CARD: |
765 | 0 | return "SCARD_W_RESET_CARD"; |
766 | | |
767 | 0 | case SCARD_W_REMOVED_CARD: |
768 | 0 | return "SCARD_W_REMOVED_CARD"; |
769 | | |
770 | 0 | case SCARD_W_SECURITY_VIOLATION: |
771 | 0 | return "SCARD_W_SECURITY_VIOLATION"; |
772 | | |
773 | 0 | case SCARD_W_WRONG_CHV: |
774 | 0 | return "SCARD_W_WRONG_CHV"; |
775 | | |
776 | 0 | case SCARD_W_CHV_BLOCKED: |
777 | 0 | return "SCARD_W_CHV_BLOCKED"; |
778 | | |
779 | 0 | case SCARD_W_EOF: |
780 | 0 | return "SCARD_W_EOF"; |
781 | | |
782 | 0 | case SCARD_W_CANCELLED_BY_USER: |
783 | 0 | return "SCARD_W_CANCELLED_BY_USER"; |
784 | | |
785 | 0 | case SCARD_W_CARD_NOT_AUTHENTICATED: |
786 | 0 | return "SCARD_W_CARD_NOT_AUTHENTICATED"; |
787 | | |
788 | 0 | case SCARD_W_CACHE_ITEM_NOT_FOUND: |
789 | 0 | return "SCARD_W_CACHE_ITEM_NOT_FOUND"; |
790 | | |
791 | 0 | case SCARD_W_CACHE_ITEM_STALE: |
792 | 0 | return "SCARD_W_CACHE_ITEM_STALE"; |
793 | | |
794 | 0 | case SCARD_W_CACHE_ITEM_TOO_BIG: |
795 | 0 | return "SCARD_W_CACHE_ITEM_TOO_BIG"; |
796 | | |
797 | 0 | default: |
798 | 0 | return "SCARD_E_UNKNOWN"; |
799 | 0 | } |
800 | 0 | } |
801 | | |
802 | | WINSCARDAPI const char* WINAPI SCardGetAttributeString(DWORD dwAttrId) |
803 | 0 | { |
804 | 0 | switch (dwAttrId) |
805 | 0 | { |
806 | 0 | case SCARD_ATTR_VENDOR_NAME: |
807 | 0 | return "SCARD_ATTR_VENDOR_NAME"; |
808 | | |
809 | 0 | case SCARD_ATTR_VENDOR_IFD_TYPE: |
810 | 0 | return "SCARD_ATTR_VENDOR_IFD_TYPE"; |
811 | | |
812 | 0 | case SCARD_ATTR_VENDOR_IFD_VERSION: |
813 | 0 | return "SCARD_ATTR_VENDOR_IFD_VERSION"; |
814 | | |
815 | 0 | case SCARD_ATTR_VENDOR_IFD_SERIAL_NO: |
816 | 0 | return "SCARD_ATTR_VENDOR_IFD_SERIAL_NO"; |
817 | | |
818 | 0 | case SCARD_ATTR_CHANNEL_ID: |
819 | 0 | return "SCARD_ATTR_CHANNEL_ID"; |
820 | | |
821 | 0 | case SCARD_ATTR_PROTOCOL_TYPES: |
822 | 0 | return "SCARD_ATTR_PROTOCOL_TYPES"; |
823 | | |
824 | 0 | case SCARD_ATTR_DEFAULT_CLK: |
825 | 0 | return "SCARD_ATTR_DEFAULT_CLK"; |
826 | | |
827 | 0 | case SCARD_ATTR_MAX_CLK: |
828 | 0 | return "SCARD_ATTR_MAX_CLK"; |
829 | | |
830 | 0 | case SCARD_ATTR_DEFAULT_DATA_RATE: |
831 | 0 | return "SCARD_ATTR_DEFAULT_DATA_RATE"; |
832 | | |
833 | 0 | case SCARD_ATTR_MAX_DATA_RATE: |
834 | 0 | return "SCARD_ATTR_MAX_DATA_RATE"; |
835 | | |
836 | 0 | case SCARD_ATTR_MAX_IFSD: |
837 | 0 | return "SCARD_ATTR_MAX_IFSD"; |
838 | | |
839 | 0 | case SCARD_ATTR_POWER_MGMT_SUPPORT: |
840 | 0 | return "SCARD_ATTR_POWER_MGMT_SUPPORT"; |
841 | | |
842 | 0 | case SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE: |
843 | 0 | return "SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE"; |
844 | | |
845 | 0 | case SCARD_ATTR_USER_AUTH_INPUT_DEVICE: |
846 | 0 | return "SCARD_ATTR_USER_AUTH_INPUT_DEVICE"; |
847 | | |
848 | 0 | case SCARD_ATTR_CHARACTERISTICS: |
849 | 0 | return "SCARD_ATTR_CHARACTERISTICS"; |
850 | | |
851 | 0 | case SCARD_ATTR_CURRENT_PROTOCOL_TYPE: |
852 | 0 | return "SCARD_ATTR_CURRENT_PROTOCOL_TYPE"; |
853 | | |
854 | 0 | case SCARD_ATTR_CURRENT_CLK: |
855 | 0 | return "SCARD_ATTR_CURRENT_CLK"; |
856 | | |
857 | 0 | case SCARD_ATTR_CURRENT_F: |
858 | 0 | return "SCARD_ATTR_CURRENT_F"; |
859 | | |
860 | 0 | case SCARD_ATTR_CURRENT_D: |
861 | 0 | return "SCARD_ATTR_CURRENT_D"; |
862 | | |
863 | 0 | case SCARD_ATTR_CURRENT_N: |
864 | 0 | return "SCARD_ATTR_CURRENT_N"; |
865 | | |
866 | 0 | case SCARD_ATTR_CURRENT_W: |
867 | 0 | return "SCARD_ATTR_CURRENT_W"; |
868 | | |
869 | 0 | case SCARD_ATTR_CURRENT_IFSC: |
870 | 0 | return "SCARD_ATTR_CURRENT_IFSC"; |
871 | | |
872 | 0 | case SCARD_ATTR_CURRENT_IFSD: |
873 | 0 | return "SCARD_ATTR_CURRENT_IFSD"; |
874 | | |
875 | 0 | case SCARD_ATTR_CURRENT_BWT: |
876 | 0 | return "SCARD_ATTR_CURRENT_BWT"; |
877 | | |
878 | 0 | case SCARD_ATTR_CURRENT_CWT: |
879 | 0 | return "SCARD_ATTR_CURRENT_CWT"; |
880 | | |
881 | 0 | case SCARD_ATTR_CURRENT_EBC_ENCODING: |
882 | 0 | return "SCARD_ATTR_CURRENT_EBC_ENCODING"; |
883 | | |
884 | 0 | case SCARD_ATTR_EXTENDED_BWT: |
885 | 0 | return "SCARD_ATTR_EXTENDED_BWT"; |
886 | | |
887 | 0 | case SCARD_ATTR_ICC_PRESENCE: |
888 | 0 | return "SCARD_ATTR_ICC_PRESENCE"; |
889 | | |
890 | 0 | case SCARD_ATTR_ICC_INTERFACE_STATUS: |
891 | 0 | return "SCARD_ATTR_ICC_INTERFACE_STATUS"; |
892 | | |
893 | 0 | case SCARD_ATTR_CURRENT_IO_STATE: |
894 | 0 | return "SCARD_ATTR_CURRENT_IO_STATE"; |
895 | | |
896 | 0 | case SCARD_ATTR_ATR_STRING: |
897 | 0 | return "SCARD_ATTR_ATR_STRING"; |
898 | | |
899 | 0 | case SCARD_ATTR_ICC_TYPE_PER_ATR: |
900 | 0 | return "SCARD_ATTR_ICC_TYPE_PER_ATR"; |
901 | | |
902 | 0 | case SCARD_ATTR_ESC_RESET: |
903 | 0 | return "SCARD_ATTR_ESC_RESET"; |
904 | | |
905 | 0 | case SCARD_ATTR_ESC_CANCEL: |
906 | 0 | return "SCARD_ATTR_ESC_CANCEL"; |
907 | | |
908 | 0 | case SCARD_ATTR_ESC_AUTHREQUEST: |
909 | 0 | return "SCARD_ATTR_ESC_AUTHREQUEST"; |
910 | | |
911 | 0 | case SCARD_ATTR_MAXINPUT: |
912 | 0 | return "SCARD_ATTR_MAXINPUT"; |
913 | | |
914 | 0 | case SCARD_ATTR_DEVICE_UNIT: |
915 | 0 | return "SCARD_ATTR_DEVICE_UNIT"; |
916 | | |
917 | 0 | case SCARD_ATTR_DEVICE_IN_USE: |
918 | 0 | return "SCARD_ATTR_DEVICE_IN_USE"; |
919 | | |
920 | 0 | case SCARD_ATTR_DEVICE_FRIENDLY_NAME_A: |
921 | 0 | return "SCARD_ATTR_DEVICE_FRIENDLY_NAME_A"; |
922 | | |
923 | 0 | case SCARD_ATTR_DEVICE_SYSTEM_NAME_A: |
924 | 0 | return "SCARD_ATTR_DEVICE_SYSTEM_NAME_A"; |
925 | | |
926 | 0 | case SCARD_ATTR_DEVICE_FRIENDLY_NAME_W: |
927 | 0 | return "SCARD_ATTR_DEVICE_FRIENDLY_NAME_W"; |
928 | | |
929 | 0 | case SCARD_ATTR_DEVICE_SYSTEM_NAME_W: |
930 | 0 | return "SCARD_ATTR_DEVICE_SYSTEM_NAME_W"; |
931 | | |
932 | 0 | case SCARD_ATTR_SUPRESS_T1_IFS_REQUEST: |
933 | 0 | return "SCARD_ATTR_SUPRESS_T1_IFS_REQUEST"; |
934 | | |
935 | 0 | default: |
936 | 0 | return "SCARD_ATTR_UNKNOWN"; |
937 | 0 | } |
938 | 0 | } |
939 | | |
940 | | WINSCARDAPI const char* WINAPI SCardGetProtocolString(DWORD dwProtocols) |
941 | 0 | { |
942 | 0 | if (dwProtocols == SCARD_PROTOCOL_UNDEFINED) |
943 | 0 | return "SCARD_PROTOCOL_UNDEFINED"; |
944 | | |
945 | 0 | if (dwProtocols == SCARD_PROTOCOL_T0) |
946 | 0 | return "SCARD_PROTOCOL_T0"; |
947 | | |
948 | 0 | if (dwProtocols == SCARD_PROTOCOL_T1) |
949 | 0 | return "SCARD_PROTOCOL_T1"; |
950 | | |
951 | 0 | if (dwProtocols == SCARD_PROTOCOL_Tx) |
952 | 0 | return "SCARD_PROTOCOL_Tx"; |
953 | | |
954 | 0 | if (dwProtocols == SCARD_PROTOCOL_RAW) |
955 | 0 | return "SCARD_PROTOCOL_RAW"; |
956 | | |
957 | 0 | if (dwProtocols == SCARD_PROTOCOL_DEFAULT) |
958 | 0 | return "SCARD_PROTOCOL_DEFAULT"; |
959 | | |
960 | 0 | if (dwProtocols == (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_RAW)) |
961 | 0 | return "SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_RAW"; |
962 | | |
963 | 0 | if (dwProtocols == (SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_RAW)) |
964 | 0 | return "SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_RAW"; |
965 | | |
966 | 0 | if (dwProtocols == (SCARD_PROTOCOL_Tx | SCARD_PROTOCOL_RAW)) |
967 | 0 | return "SCARD_PROTOCOL_Tx | SCARD_PROTOCOL_RAW"; |
968 | | |
969 | 0 | return "SCARD_PROTOCOL_UNKNOWN"; |
970 | 0 | } |
971 | | |
972 | | WINSCARDAPI const char* WINAPI SCardGetShareModeString(DWORD dwShareMode) |
973 | 0 | { |
974 | 0 | switch (dwShareMode) |
975 | 0 | { |
976 | 0 | case SCARD_SHARE_EXCLUSIVE: |
977 | 0 | return "SCARD_SHARE_EXCLUSIVE"; |
978 | | |
979 | 0 | case SCARD_SHARE_SHARED: |
980 | 0 | return "SCARD_SHARE_SHARED"; |
981 | | |
982 | 0 | case SCARD_SHARE_DIRECT: |
983 | 0 | return "SCARD_SHARE_DIRECT"; |
984 | | |
985 | 0 | default: |
986 | 0 | return "SCARD_SHARE_UNKNOWN"; |
987 | 0 | } |
988 | 0 | } |
989 | | |
990 | | WINSCARDAPI const char* WINAPI SCardGetDispositionString(DWORD dwDisposition) |
991 | 0 | { |
992 | 0 | switch (dwDisposition) |
993 | 0 | { |
994 | 0 | case SCARD_LEAVE_CARD: |
995 | 0 | return "SCARD_LEAVE_CARD"; |
996 | | |
997 | 0 | case SCARD_RESET_CARD: |
998 | 0 | return "SCARD_RESET_CARD"; |
999 | | |
1000 | 0 | case SCARD_UNPOWER_CARD: |
1001 | 0 | return "SCARD_UNPOWER_CARD"; |
1002 | | |
1003 | 0 | default: |
1004 | 0 | return "SCARD_UNKNOWN_CARD"; |
1005 | 0 | } |
1006 | 0 | } |
1007 | | |
1008 | | WINSCARDAPI const char* WINAPI SCardGetScopeString(DWORD dwScope) |
1009 | 0 | { |
1010 | 0 | switch (dwScope) |
1011 | 0 | { |
1012 | 0 | case SCARD_SCOPE_USER: |
1013 | 0 | return "SCARD_SCOPE_USER"; |
1014 | | |
1015 | 0 | case SCARD_SCOPE_TERMINAL: |
1016 | 0 | return "SCARD_SCOPE_TERMINAL"; |
1017 | | |
1018 | 0 | case SCARD_SCOPE_SYSTEM: |
1019 | 0 | return "SCARD_SCOPE_SYSTEM"; |
1020 | | |
1021 | 0 | default: |
1022 | 0 | return "SCARD_SCOPE_UNKNOWN"; |
1023 | 0 | } |
1024 | 0 | } |
1025 | | |
1026 | | WINSCARDAPI const char* WINAPI SCardGetCardStateString(DWORD dwCardState) |
1027 | 0 | { |
1028 | 0 | switch (dwCardState) |
1029 | 0 | { |
1030 | 0 | case SCARD_UNKNOWN: |
1031 | 0 | return "SCARD_UNKNOWN"; |
1032 | | |
1033 | 0 | case SCARD_ABSENT: |
1034 | 0 | return "SCARD_ABSENT"; |
1035 | | |
1036 | 0 | case SCARD_PRESENT: |
1037 | 0 | return "SCARD_PRESENT"; |
1038 | | |
1039 | 0 | case SCARD_SWALLOWED: |
1040 | 0 | return "SCARD_SWALLOWED"; |
1041 | | |
1042 | 0 | case SCARD_POWERED: |
1043 | 0 | return "SCARD_POWERED"; |
1044 | | |
1045 | 0 | case SCARD_NEGOTIABLE: |
1046 | 0 | return "SCARD_NEGOTIABLE"; |
1047 | | |
1048 | 0 | case SCARD_SPECIFIC: |
1049 | 0 | return "SCARD_SPECIFIC"; |
1050 | | |
1051 | 0 | default: |
1052 | 0 | return "SCARD_UNKNOWN"; |
1053 | 0 | } |
1054 | 0 | } |
1055 | | |
1056 | | WINSCARDAPI char* WINAPI SCardGetReaderStateString(DWORD dwReaderState) |
1057 | 0 | { |
1058 | 0 | const size_t size = 512; |
1059 | 0 | char* buffer = calloc(size, sizeof(char)); |
1060 | |
|
1061 | 0 | if (!buffer) |
1062 | 0 | return NULL; |
1063 | | |
1064 | 0 | if (dwReaderState & SCARD_STATE_IGNORE) |
1065 | 0 | winpr_str_append("SCARD_STATE_IGNORE", buffer, size, "|"); |
1066 | |
|
1067 | 0 | if (dwReaderState & SCARD_STATE_CHANGED) |
1068 | 0 | winpr_str_append("SCARD_STATE_CHANGED", buffer, size, "|"); |
1069 | |
|
1070 | 0 | if (dwReaderState & SCARD_STATE_UNKNOWN) |
1071 | 0 | winpr_str_append("SCARD_STATE_UNKNOWN", buffer, size, "|"); |
1072 | |
|
1073 | 0 | if (dwReaderState & SCARD_STATE_UNAVAILABLE) |
1074 | 0 | winpr_str_append("SCARD_STATE_UNAVAILABLE", buffer, size, "|"); |
1075 | |
|
1076 | 0 | if (dwReaderState & SCARD_STATE_EMPTY) |
1077 | 0 | winpr_str_append("SCARD_STATE_EMPTY", buffer, size, "|"); |
1078 | |
|
1079 | 0 | if (dwReaderState & SCARD_STATE_PRESENT) |
1080 | 0 | winpr_str_append("SCARD_STATE_PRESENT", buffer, size, "|"); |
1081 | |
|
1082 | 0 | if (dwReaderState & SCARD_STATE_ATRMATCH) |
1083 | 0 | winpr_str_append("SCARD_STATE_ATRMATCH", buffer, size, "|"); |
1084 | |
|
1085 | 0 | if (dwReaderState & SCARD_STATE_EXCLUSIVE) |
1086 | 0 | winpr_str_append("SCARD_STATE_EXCLUSIVE", buffer, size, "|"); |
1087 | |
|
1088 | 0 | if (dwReaderState & SCARD_STATE_INUSE) |
1089 | 0 | winpr_str_append("SCARD_STATE_INUSE", buffer, size, "|"); |
1090 | |
|
1091 | 0 | if (dwReaderState & SCARD_STATE_MUTE) |
1092 | 0 | winpr_str_append("SCARD_STATE_MUTE", buffer, size, "|"); |
1093 | |
|
1094 | 0 | if (dwReaderState & SCARD_STATE_UNPOWERED) |
1095 | 0 | winpr_str_append("SCARD_STATE_UNPOWERED", buffer, size, "|"); |
1096 | |
|
1097 | 0 | if (!buffer[0]) |
1098 | 0 | winpr_str_append("SCARD_STATE_UNAWARE", buffer, size, "|"); |
1099 | |
|
1100 | 0 | return buffer; |
1101 | 0 | } |
1102 | | |
1103 | | #define WINSCARD_LOAD_PROC(_name, ...) \ |
1104 | 0 | do \ |
1105 | 0 | { \ |
1106 | 0 | WINPR_PRAGMA_DIAG_PUSH \ |
1107 | 0 | WINPR_PRAGMA_DIAG_IGNORED_PEDANTIC \ |
1108 | 0 | pWinSCardApiTable->pfn##_name = (fn##_name)GetProcAddress(hWinSCardLibrary, #_name); \ |
1109 | 0 | WINPR_PRAGMA_DIAG_POP \ |
1110 | 0 | } while (0) |
1111 | | |
1112 | | BOOL WinSCard_LoadApiTableFunctions(PSCardApiFunctionTable pWinSCardApiTable, |
1113 | | HMODULE hWinSCardLibrary) |
1114 | 0 | { |
1115 | 0 | WINPR_ASSERT(pWinSCardApiTable); |
1116 | 0 | WINPR_ASSERT(hWinSCardLibrary); |
1117 | | |
1118 | 0 | WINSCARD_LOAD_PROC(SCardEstablishContext); |
1119 | 0 | WINSCARD_LOAD_PROC(SCardReleaseContext); |
1120 | 0 | WINSCARD_LOAD_PROC(SCardIsValidContext); |
1121 | 0 | WINSCARD_LOAD_PROC(SCardListReaderGroupsA); |
1122 | 0 | WINSCARD_LOAD_PROC(SCardListReaderGroupsW); |
1123 | 0 | WINSCARD_LOAD_PROC(SCardListReadersA); |
1124 | 0 | WINSCARD_LOAD_PROC(SCardListReadersW); |
1125 | 0 | WINSCARD_LOAD_PROC(SCardListCardsA); |
1126 | 0 | WINSCARD_LOAD_PROC(SCardListCardsW); |
1127 | 0 | WINSCARD_LOAD_PROC(SCardListInterfacesA); |
1128 | 0 | WINSCARD_LOAD_PROC(SCardListInterfacesW); |
1129 | 0 | WINSCARD_LOAD_PROC(SCardGetProviderIdA); |
1130 | 0 | WINSCARD_LOAD_PROC(SCardGetProviderIdW); |
1131 | 0 | WINSCARD_LOAD_PROC(SCardGetCardTypeProviderNameA); |
1132 | 0 | WINSCARD_LOAD_PROC(SCardGetCardTypeProviderNameW); |
1133 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceReaderGroupA); |
1134 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceReaderGroupW); |
1135 | 0 | WINSCARD_LOAD_PROC(SCardForgetReaderGroupA); |
1136 | 0 | WINSCARD_LOAD_PROC(SCardForgetReaderGroupW); |
1137 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceReaderA); |
1138 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceReaderW); |
1139 | 0 | WINSCARD_LOAD_PROC(SCardForgetReaderA); |
1140 | 0 | WINSCARD_LOAD_PROC(SCardForgetReaderW); |
1141 | 0 | WINSCARD_LOAD_PROC(SCardAddReaderToGroupA); |
1142 | 0 | WINSCARD_LOAD_PROC(SCardAddReaderToGroupW); |
1143 | 0 | WINSCARD_LOAD_PROC(SCardRemoveReaderFromGroupA); |
1144 | 0 | WINSCARD_LOAD_PROC(SCardRemoveReaderFromGroupW); |
1145 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceCardTypeA); |
1146 | 0 | WINSCARD_LOAD_PROC(SCardIntroduceCardTypeW); |
1147 | 0 | WINSCARD_LOAD_PROC(SCardSetCardTypeProviderNameA); |
1148 | 0 | WINSCARD_LOAD_PROC(SCardSetCardTypeProviderNameW); |
1149 | 0 | WINSCARD_LOAD_PROC(SCardForgetCardTypeA); |
1150 | 0 | WINSCARD_LOAD_PROC(SCardForgetCardTypeW); |
1151 | 0 | WINSCARD_LOAD_PROC(SCardFreeMemory); |
1152 | 0 | WINSCARD_LOAD_PROC(SCardAccessStartedEvent); |
1153 | 0 | WINSCARD_LOAD_PROC(SCardReleaseStartedEvent); |
1154 | 0 | WINSCARD_LOAD_PROC(SCardLocateCardsA); |
1155 | 0 | WINSCARD_LOAD_PROC(SCardLocateCardsW); |
1156 | 0 | WINSCARD_LOAD_PROC(SCardLocateCardsByATRA); |
1157 | 0 | WINSCARD_LOAD_PROC(SCardLocateCardsByATRW); |
1158 | 0 | WINSCARD_LOAD_PROC(SCardGetStatusChangeA); |
1159 | 0 | WINSCARD_LOAD_PROC(SCardGetStatusChangeW); |
1160 | 0 | WINSCARD_LOAD_PROC(SCardCancel); |
1161 | 0 | WINSCARD_LOAD_PROC(SCardConnectA); |
1162 | 0 | WINSCARD_LOAD_PROC(SCardConnectW); |
1163 | 0 | WINSCARD_LOAD_PROC(SCardReconnect); |
1164 | 0 | WINSCARD_LOAD_PROC(SCardDisconnect); |
1165 | 0 | WINSCARD_LOAD_PROC(SCardBeginTransaction); |
1166 | 0 | WINSCARD_LOAD_PROC(SCardEndTransaction); |
1167 | 0 | WINSCARD_LOAD_PROC(SCardCancelTransaction); |
1168 | 0 | WINSCARD_LOAD_PROC(SCardState); |
1169 | 0 | WINSCARD_LOAD_PROC(SCardStatusA); |
1170 | 0 | WINSCARD_LOAD_PROC(SCardStatusW); |
1171 | 0 | WINSCARD_LOAD_PROC(SCardTransmit); |
1172 | 0 | WINSCARD_LOAD_PROC(SCardGetTransmitCount); |
1173 | 0 | WINSCARD_LOAD_PROC(SCardControl); |
1174 | 0 | WINSCARD_LOAD_PROC(SCardGetAttrib); |
1175 | 0 | WINSCARD_LOAD_PROC(SCardSetAttrib); |
1176 | 0 | WINSCARD_LOAD_PROC(SCardUIDlgSelectCardA); |
1177 | 0 | WINSCARD_LOAD_PROC(SCardUIDlgSelectCardW); |
1178 | 0 | WINSCARD_LOAD_PROC(GetOpenCardNameA); |
1179 | 0 | WINSCARD_LOAD_PROC(GetOpenCardNameW); |
1180 | 0 | WINSCARD_LOAD_PROC(SCardDlgExtendedError); |
1181 | 0 | WINSCARD_LOAD_PROC(SCardReadCacheA); |
1182 | 0 | WINSCARD_LOAD_PROC(SCardReadCacheW); |
1183 | 0 | WINSCARD_LOAD_PROC(SCardWriteCacheA); |
1184 | 0 | WINSCARD_LOAD_PROC(SCardWriteCacheW); |
1185 | 0 | WINSCARD_LOAD_PROC(SCardGetReaderIconA); |
1186 | 0 | WINSCARD_LOAD_PROC(SCardGetReaderIconW); |
1187 | 0 | WINSCARD_LOAD_PROC(SCardGetDeviceTypeIdA); |
1188 | 0 | WINSCARD_LOAD_PROC(SCardGetDeviceTypeIdW); |
1189 | 0 | WINSCARD_LOAD_PROC(SCardGetReaderDeviceInstanceIdA); |
1190 | 0 | WINSCARD_LOAD_PROC(SCardGetReaderDeviceInstanceIdW); |
1191 | 0 | WINSCARD_LOAD_PROC(SCardListReadersWithDeviceInstanceIdA); |
1192 | 0 | WINSCARD_LOAD_PROC(SCardListReadersWithDeviceInstanceIdW); |
1193 | 0 | WINSCARD_LOAD_PROC(SCardAudit); |
1194 | |
|
1195 | 0 | return TRUE; |
1196 | 0 | } |
1197 | | |
1198 | | static const SCardApiFunctionTable WinPR_SCardApiFunctionTable = { |
1199 | | 0, /* dwVersion */ |
1200 | | 0, /* dwFlags */ |
1201 | | |
1202 | | SCardEstablishContext, /* SCardEstablishContext */ |
1203 | | SCardReleaseContext, /* SCardReleaseContext */ |
1204 | | SCardIsValidContext, /* SCardIsValidContext */ |
1205 | | SCardListReaderGroupsA, /* SCardListReaderGroupsA */ |
1206 | | SCardListReaderGroupsW, /* SCardListReaderGroupsW */ |
1207 | | SCardListReadersA, /* SCardListReadersA */ |
1208 | | SCardListReadersW, /* SCardListReadersW */ |
1209 | | SCardListCardsA, /* SCardListCardsA */ |
1210 | | SCardListCardsW, /* SCardListCardsW */ |
1211 | | SCardListInterfacesA, /* SCardListInterfacesA */ |
1212 | | SCardListInterfacesW, /* SCardListInterfacesW */ |
1213 | | SCardGetProviderIdA, /* SCardGetProviderIdA */ |
1214 | | SCardGetProviderIdW, /* SCardGetProviderIdW */ |
1215 | | SCardGetCardTypeProviderNameA, /* SCardGetCardTypeProviderNameA */ |
1216 | | SCardGetCardTypeProviderNameW, /* SCardGetCardTypeProviderNameW */ |
1217 | | SCardIntroduceReaderGroupA, /* SCardIntroduceReaderGroupA */ |
1218 | | SCardIntroduceReaderGroupW, /* SCardIntroduceReaderGroupW */ |
1219 | | SCardForgetReaderGroupA, /* SCardForgetReaderGroupA */ |
1220 | | SCardForgetReaderGroupW, /* SCardForgetReaderGroupW */ |
1221 | | SCardIntroduceReaderA, /* SCardIntroduceReaderA */ |
1222 | | SCardIntroduceReaderW, /* SCardIntroduceReaderW */ |
1223 | | SCardForgetReaderA, /* SCardForgetReaderA */ |
1224 | | SCardForgetReaderW, /* SCardForgetReaderW */ |
1225 | | SCardAddReaderToGroupA, /* SCardAddReaderToGroupA */ |
1226 | | SCardAddReaderToGroupW, /* SCardAddReaderToGroupW */ |
1227 | | SCardRemoveReaderFromGroupA, /* SCardRemoveReaderFromGroupA */ |
1228 | | SCardRemoveReaderFromGroupW, /* SCardRemoveReaderFromGroupW */ |
1229 | | SCardIntroduceCardTypeA, /* SCardIntroduceCardTypeA */ |
1230 | | SCardIntroduceCardTypeW, /* SCardIntroduceCardTypeW */ |
1231 | | SCardSetCardTypeProviderNameA, /* SCardSetCardTypeProviderNameA */ |
1232 | | SCardSetCardTypeProviderNameW, /* SCardSetCardTypeProviderNameW */ |
1233 | | SCardForgetCardTypeA, /* SCardForgetCardTypeA */ |
1234 | | SCardForgetCardTypeW, /* SCardForgetCardTypeW */ |
1235 | | SCardFreeMemory, /* SCardFreeMemory */ |
1236 | | SCardAccessStartedEvent, /* SCardAccessStartedEvent */ |
1237 | | SCardReleaseStartedEvent, /* SCardReleaseStartedEvent */ |
1238 | | SCardLocateCardsA, /* SCardLocateCardsA */ |
1239 | | SCardLocateCardsW, /* SCardLocateCardsW */ |
1240 | | SCardLocateCardsByATRA, /* SCardLocateCardsByATRA */ |
1241 | | SCardLocateCardsByATRW, /* SCardLocateCardsByATRW */ |
1242 | | SCardGetStatusChangeA, /* SCardGetStatusChangeA */ |
1243 | | SCardGetStatusChangeW, /* SCardGetStatusChangeW */ |
1244 | | SCardCancel, /* SCardCancel */ |
1245 | | SCardConnectA, /* SCardConnectA */ |
1246 | | SCardConnectW, /* SCardConnectW */ |
1247 | | SCardReconnect, /* SCardReconnect */ |
1248 | | SCardDisconnect, /* SCardDisconnect */ |
1249 | | SCardBeginTransaction, /* SCardBeginTransaction */ |
1250 | | SCardEndTransaction, /* SCardEndTransaction */ |
1251 | | SCardCancelTransaction, /* SCardCancelTransaction */ |
1252 | | SCardState, /* SCardState */ |
1253 | | SCardStatusA, /* SCardStatusA */ |
1254 | | SCardStatusW, /* SCardStatusW */ |
1255 | | SCardTransmit, /* SCardTransmit */ |
1256 | | SCardGetTransmitCount, /* SCardGetTransmitCount */ |
1257 | | SCardControl, /* SCardControl */ |
1258 | | SCardGetAttrib, /* SCardGetAttrib */ |
1259 | | SCardSetAttrib, /* SCardSetAttrib */ |
1260 | | SCardUIDlgSelectCardA, /* SCardUIDlgSelectCardA */ |
1261 | | SCardUIDlgSelectCardW, /* SCardUIDlgSelectCardW */ |
1262 | | GetOpenCardNameA, /* GetOpenCardNameA */ |
1263 | | GetOpenCardNameW, /* GetOpenCardNameW */ |
1264 | | SCardDlgExtendedError, /* SCardDlgExtendedError */ |
1265 | | SCardReadCacheA, /* SCardReadCacheA */ |
1266 | | SCardReadCacheW, /* SCardReadCacheW */ |
1267 | | SCardWriteCacheA, /* SCardWriteCacheA */ |
1268 | | SCardWriteCacheW, /* SCardWriteCacheW */ |
1269 | | SCardGetReaderIconA, /* SCardGetReaderIconA */ |
1270 | | SCardGetReaderIconW, /* SCardGetReaderIconW */ |
1271 | | SCardGetDeviceTypeIdA, /* SCardGetDeviceTypeIdA */ |
1272 | | SCardGetDeviceTypeIdW, /* SCardGetDeviceTypeIdW */ |
1273 | | SCardGetReaderDeviceInstanceIdA, /* SCardGetReaderDeviceInstanceIdA */ |
1274 | | SCardGetReaderDeviceInstanceIdW, /* SCardGetReaderDeviceInstanceIdW */ |
1275 | | SCardListReadersWithDeviceInstanceIdA, /* SCardListReadersWithDeviceInstanceIdA */ |
1276 | | SCardListReadersWithDeviceInstanceIdW, /* SCardListReadersWithDeviceInstanceIdW */ |
1277 | | SCardAudit /* SCardAudit */ |
1278 | | }; |
1279 | | |
1280 | | const SCardApiFunctionTable* WinPR_GetSCardApiFunctionTable(void) |
1281 | 0 | { |
1282 | 0 | return &WinPR_SCardApiFunctionTable; |
1283 | 0 | } |