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