1 
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <stdarg.h>
6 #include <windows.h>
7 
8 #include "winscard-funcs.h"
9 
10 #define LUNUSED(_param) (void) _param
11 
12 static tSCardEstablishContext aSCardEstablishContext;
13 static tSCardReleaseContext aSCardReleaseContext;
14 static tSCardIsValidContext aSCardIsValidContext;
15 static tSCardListReaderGroupsA aSCardListReaderGroupsA;
16 static tSCardListReaderGroupsW aSCardListReaderGroupsW;
17 static tSCardListReadersA aSCardListReadersA;
18 static tSCardListReadersW aSCardListReadersW;
19 static tSCardListCardsA aSCardListCardsA;
20 static tSCardListCardsW aSCardListCardsW;
21 static tSCardListInterfacesA aSCardListInterfacesA;
22 static tSCardListInterfacesW aSCardListInterfacesW;
23 static tSCardGetProviderIdA aSCardGetProviderIdA;
24 static tSCardGetProviderIdW aSCardGetProviderIdW;
25 static tSCardGetCardTypeProviderNameA aSCardGetCardTypeProviderNameA;
26 static tSCardGetCardTypeProviderNameW aSCardGetCardTypeProviderNameW;
27 static tSCardIntroduceReaderGroupA aSCardIntroduceReaderGroupA;
28 static tSCardIntroduceReaderGroupW aSCardIntroduceReaderGroupW;
29 static tSCardForgetReaderGroupA aSCardForgetReaderGroupA;
30 static tSCardForgetReaderGroupW aSCardForgetReaderGroupW;
31 static tSCardIntroduceReaderA aSCardIntroduceReaderA;
32 static tSCardIntroduceReaderW aSCardIntroduceReaderW;
33 static tSCardForgetReaderA aSCardForgetReaderA;
34 static tSCardForgetReaderW aSCardForgetReaderW;
35 static tSCardAddReaderToGroupA aSCardAddReaderToGroupA;
36 static tSCardAddReaderToGroupW aSCardAddReaderToGroupW;
37 static tSCardRemoveReaderFromGroupA aSCardRemoveReaderFromGroupA;
38 static tSCardRemoveReaderFromGroupW aSCardRemoveReaderFromGroupW;
39 static tSCardIntroduceCardTypeA aSCardIntroduceCardTypeA;
40 static tSCardIntroduceCardTypeW aSCardIntroduceCardTypeW;
41 static tSCardSetCardTypeProviderNameA aSCardSetCardTypeProviderNameA;
42 static tSCardSetCardTypeProviderNameW aSCardSetCardTypeProviderNameW;
43 static tSCardForgetCardTypeA aSCardForgetCardTypeA;
44 static tSCardForgetCardTypeW aSCardForgetCardTypeW;
45 static tSCardFreeMemory aSCardFreeMemory;
46 static tSCardLocateCardsA aSCardLocateCardsA;
47 static tSCardLocateCardsW aSCardLocateCardsW;
48 static tSCardGetStatusChangeA aSCardGetStatusChangeA;
49 static tSCardGetStatusChangeW aSCardGetStatusChangeW;
50 static tSCardCancel aSCardCancel;
51 static tSCardConnectA aSCardConnectA;
52 static tSCardConnectW aSCardConnectW;
53 static tSCardReconnect aSCardReconnect;
54 static tSCardDisconnect aSCardDisconnect;
55 static tSCardBeginTransaction aSCardBeginTransaction;
56 static tSCardEndTransaction aSCardEndTransaction;
57 static tSCardCancelTransaction aSCardCancelTransaction;
58 static tSCardState aSCardState;
59 static tSCardStatusA aSCardStatusA;
60 static tSCardStatusW aSCardStatusW;
61 static tSCardTransmit aSCardTransmit;
62 static tSCardControl aSCardControl;
63 static tSCardGetAttrib aSCardGetAttrib;
64 static tSCardSetAttrib aSCardSetAttrib;
65 
66 //__declspec(dllexport) const SCARD_IO_REQUEST g_rgSCardT0Pci = { 0 };
67 //__declspec(dllexport) const SCARD_IO_REQUEST g_rgSCardT1Pci = { 0 };
68 //__declspec(dllexport) const SCARD_IO_REQUEST g_rgSCardRawPci = { 0 };
69 
70 static int g_true = 1;
71 
72 #define LLOGLN(_level, _args) do { if ((_level < 11) && g_true) { writeln _args ; } } while (0)
73 
74 /*****************************************************************************/
75 static int
writeln(const char * format,...)76 writeln(const char *format, ...)
77 {
78     va_list ap;
79     char text[256];
80 
81     va_start(ap, format);
82     vsnprintf(text, 255, format, ap);
83     va_end(ap);
84     OutputDebugString(text);
85     return 0;
86 }
87 
88 #define LLOAD(_func, _type, _name) \
89     do { \
90         _func = (_type) GetProcAddress(lib, _name); \
91         if (_func == 0) \
92         { \
93             writeln("LLOAD error %s", _name); \
94         } \
95     } while (0)
96 
97 static int g_funcs_loaded = 0;
98 
99 /*****************************************************************************/
100 static int __fastcall
load_funcs(void)101 load_funcs(void)
102 {
103     HMODULE lib;
104 
105     if (g_funcs_loaded)
106     {
107         return 0;
108     }
109     g_funcs_loaded = 1;
110     lib = LoadLibrary("winscard-org.dll");
111     LLOGLN(0, ("load_funcs: lib %p", lib));
112     LLOAD(aSCardEstablishContext, tSCardEstablishContext, "SCardEstablishContext");
113     LLOAD(aSCardReleaseContext, tSCardReleaseContext, "SCardReleaseContext");
114     LLOAD(aSCardIsValidContext, tSCardIsValidContext, "SCardIsValidContext");
115     LLOAD(aSCardListReaderGroupsA, tSCardListReaderGroupsA, "SCardListReaderGroupsA");
116     LLOAD(aSCardListReaderGroupsW, tSCardListReaderGroupsW, "SCardListReaderGroupsW");
117     LLOAD(aSCardListReadersA, tSCardListReadersA, "SCardListReadersA");
118     LLOAD(aSCardListReadersW, tSCardListReadersW, "SCardListReadersW");
119     LLOAD(aSCardListCardsA, tSCardListCardsA, "SCardListCardsA");
120     LLOAD(aSCardListCardsW, tSCardListCardsW, "SCardListCardsW");
121     LLOAD(aSCardListInterfacesA, tSCardListInterfacesA, "SCardListInterfacesA");
122     LLOAD(aSCardListInterfacesW, tSCardListInterfacesW, "SCardListInterfacesW");
123     LLOAD(aSCardGetProviderIdA, tSCardGetProviderIdA, "SCardGetProviderIdA");
124     LLOAD(aSCardGetProviderIdW, tSCardGetProviderIdW, "SCardGetProviderIdW");
125     LLOAD(aSCardGetCardTypeProviderNameA, tSCardGetCardTypeProviderNameA, "SCardGetCardTypeProviderNameA");
126     LLOAD(aSCardGetCardTypeProviderNameW, tSCardGetCardTypeProviderNameW, "SCardGetCardTypeProviderNameW");
127     LLOAD(aSCardIntroduceReaderGroupA, tSCardIntroduceReaderGroupA, "SCardIntroduceReaderGroupA");
128     LLOAD(aSCardIntroduceReaderGroupW, tSCardIntroduceReaderGroupW, "SCardIntroduceReaderGroupW");
129     LLOAD(aSCardForgetReaderGroupA, tSCardForgetReaderGroupA, "SCardForgetReaderGroupA");
130     LLOAD(aSCardForgetReaderGroupW, tSCardForgetReaderGroupW, "SCardForgetReaderGroupW");
131     LLOAD(aSCardIntroduceReaderA, tSCardIntroduceReaderA, "SCardIntroduceReaderA");
132     LLOAD(aSCardIntroduceReaderW, tSCardIntroduceReaderW, "SCardIntroduceReaderW");
133     LLOAD(aSCardForgetReaderA, tSCardForgetReaderA, "SCardForgetReaderA");
134     LLOAD(aSCardForgetReaderW, tSCardForgetReaderW, "SCardForgetReaderW");
135     LLOAD(aSCardAddReaderToGroupA, tSCardAddReaderToGroupA, "SCardAddReaderToGroupA");
136     LLOAD(aSCardAddReaderToGroupW, tSCardAddReaderToGroupW, "SCardAddReaderToGroupW");
137     LLOAD(aSCardRemoveReaderFromGroupA, tSCardRemoveReaderFromGroupA, "SCardRemoveReaderFromGroupA");
138     LLOAD(aSCardRemoveReaderFromGroupW, tSCardRemoveReaderFromGroupW, "SCardRemoveReaderFromGroupW");
139     LLOAD(aSCardIntroduceCardTypeA, tSCardIntroduceCardTypeA, "SCardIntroduceCardTypeA");
140     LLOAD(aSCardIntroduceCardTypeW, tSCardIntroduceCardTypeW, "SCardIntroduceCardTypeW");
141     LLOAD(aSCardSetCardTypeProviderNameA, tSCardSetCardTypeProviderNameA, "SCardSetCardTypeProviderNameA");
142     LLOAD(aSCardSetCardTypeProviderNameW, tSCardSetCardTypeProviderNameW, "SCardSetCardTypeProviderNameW");
143     LLOAD(aSCardForgetCardTypeA, tSCardForgetCardTypeA, "SCardForgetCardTypeA");
144     LLOAD(aSCardForgetCardTypeW, tSCardForgetCardTypeW, "SCardForgetCardTypeW");
145     LLOAD(aSCardFreeMemory, tSCardFreeMemory, "SCardFreeMemory");
146     LLOAD(aSCardLocateCardsA, tSCardLocateCardsA, "SCardLocateCardsA");
147     LLOAD(aSCardLocateCardsW, tSCardLocateCardsW, "SCardLocateCardsW");
148     LLOAD(aSCardGetStatusChangeA, tSCardGetStatusChangeA, "SCardGetStatusChangeA");
149     LLOAD(aSCardGetStatusChangeW, tSCardGetStatusChangeW, "SCardGetStatusChangeW");
150     LLOAD(aSCardCancel, tSCardCancel, "SCardCancel");
151     LLOAD(aSCardConnectA, tSCardConnectA, "SCardConnectA");
152     LLOAD(aSCardConnectW, tSCardConnectW, "SCardConnectW");
153     LLOAD(aSCardReconnect, tSCardReconnect, "SCardReconnect");
154     LLOAD(aSCardDisconnect, tSCardDisconnect, "SCardDisconnect");
155     LLOAD(aSCardBeginTransaction, tSCardBeginTransaction, "SCardBeginTransaction");
156     LLOAD(aSCardEndTransaction, tSCardEndTransaction, "SCardEndTransaction");
157     LLOAD(aSCardCancelTransaction, tSCardCancelTransaction, "SCardCancelTransaction");
158     LLOAD(aSCardState, tSCardState, "SCardState");
159     LLOAD(aSCardStatusA, tSCardStatusA, "SCardStatusA");
160     LLOAD(aSCardStatusW, tSCardStatusW, "SCardStatusW");
161     LLOAD(aSCardTransmit, tSCardTransmit, "SCardTransmit");
162     LLOAD(aSCardControl, tSCardControl, "SCardControl");
163     LLOAD(aSCardGetAttrib, tSCardGetAttrib, "SCardGetAttrib");
164     LLOAD(aSCardSetAttrib, tSCardSetAttrib, "SCardSetAttrib");
165 
166     return 0;
167 }
168 
169 /*****************************************************************************/
170 BOOL WINAPI
DllEntryPoint(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)171 DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
172 {
173     BOOL rv;
174     LUNUSED(hinstDLL);
175     LUNUSED(lpvReserved);
176 
177     LLOGLN(10, ("DllEntryPoint: hinstDLL %p fdwReason %d", hinstDLL, fdwReason));
178     rv = FALSE;
179     switch (fdwReason)
180     {
181         case DLL_PROCESS_ATTACH:
182             LLOGLN(0, ("DllEntryPoint: DLL_PROCESS_ATTACH"));
183             load_funcs();
184             rv = TRUE;
185             break;
186         case DLL_THREAD_ATTACH:
187             LLOGLN(10, ("DllEntryPoint: DLL_THREAD_ATTACH"));
188             rv = TRUE;
189             break;
190         case DLL_THREAD_DETACH:
191             LLOGLN(10, ("DllEntryPoint: DLL_THREAD_DETACH"));
192             rv = TRUE;
193             break;
194         case DLL_PROCESS_DETACH:
195             LLOGLN(0, ("DllEntryPoint: DLL_PROCESS_DETACH"));
196             rv = TRUE;
197             break;
198         default:
199             LLOGLN(0, ("DllEntryPoint: unknown fdwReason %d", fdwReason));
200             break;
201 
202     }
203     return rv;
204 }
205 
206 /*****************************************************************************/
207 LONG WINAPI
SCardEstablishContext(DWORD dwScope,LPCVOID pvReserved1,LPCVOID pvReserved2,LPSCARDCONTEXT phContext)208 SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
209                       LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
210 {
211     LLOGLN(0, ("SCardEstablishContext:"));
212     return aSCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext);
213 }
214 
215 /*****************************************************************************/
216 LONG WINAPI
SCardReleaseContext(SCARDCONTEXT hContext)217 SCardReleaseContext(SCARDCONTEXT hContext)
218 {
219     LLOGLN(0, ("SCardReleaseContext:"));
220     return aSCardReleaseContext(hContext);
221 }
222 
223 /*****************************************************************************/
224 LONG WINAPI
SCardIsValidContext(SCARDCONTEXT hContext)225 SCardIsValidContext(SCARDCONTEXT hContext)
226 {
227     LLOGLN(0, ("SCardIsValidContext:"));
228     return aSCardIsValidContext(hContext);
229 }
230 
231 /*****************************************************************************/
232 LONG WINAPI
SCardListReaderGroupsA(SCARDCONTEXT hContext,LPSTR mszGroups,LPDWORD pcchGroups)233 SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups,
234                        LPDWORD pcchGroups)
235 {
236     LLOGLN(0, ("SCardListReaderGroupsA:"));
237     return aSCardListReaderGroupsA(hContext, mszGroups, pcchGroups);
238 }
239 
240 /*****************************************************************************/
241 LONG WINAPI
SCardListReaderGroupsW(SCARDCONTEXT hContext,LPWSTR mszGroups,LPDWORD pcchGroups)242 SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups,
243                        LPDWORD pcchGroups)
244 {
245     LLOGLN(0, ("SCardListReaderGroupsW:"));
246     return aSCardListReaderGroupsW(hContext, mszGroups, pcchGroups);
247 }
248 
249 /*****************************************************************************/
250 LONG WINAPI
SCardListReadersA(SCARDCONTEXT hContext,LPCSTR mszGroups,LPSTR mszReaders,LPDWORD pcchReaders)251 SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups,
252                   LPSTR mszReaders, LPDWORD pcchReaders)
253 {
254     LLOGLN(0, ("SCardListReadersA:"));
255     return aSCardListReadersA(hContext, mszGroups, mszReaders, pcchReaders);
256 }
257 
258 /*****************************************************************************/
259 LONG WINAPI
SCardListReadersW(SCARDCONTEXT hContext,LPCWSTR mszGroups,LPWSTR mszReaders,LPDWORD pcchReaders)260 SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups,
261                   LPWSTR mszReaders, LPDWORD pcchReaders)
262 {
263     char text[256];
264     LONG rv;
265     DWORD cchReaders;
266 
267     text[0] = 0;
268     if (mszGroups != 0)
269     {
270         wcstombs(text, mszGroups, 255);
271     }
272     cchReaders = *pcchReaders;
273     LLOGLN(0, ("SCardListReadersW: mszGroups [%s] cchReaders [%d]", text, *pcchReaders));
274     rv = aSCardListReadersW(hContext, mszGroups, mszReaders, pcchReaders);
275     text[0] = 0;
276     if (cchReaders > 0)
277     {
278         wcstombs(text, mszReaders, 255);
279     }
280     LLOGLN(0, ("  mszReaders [%s] cchReaders [%d]", text, *pcchReaders));
281     return rv;
282 }
283 
284 /*****************************************************************************/
285 LONG WINAPI
SCardListCardsA(SCARDCONTEXT hContext,LPCBYTE pbAtr,LPCGUID rgquidInterfaces,DWORD cguidInterfaceCount,LPSTR mszCards,LPDWORD pcchCards)286 SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr,
287                 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
288                 LPSTR mszCards, LPDWORD pcchCards)
289 {
290     LLOGLN(0, ("SCardListCardsA:"));
291     return aSCardListCardsA(hContext, pbAtr, rgquidInterfaces,
292                             cguidInterfaceCount, mszCards, pcchCards);
293 }
294 
295 /*****************************************************************************/
296 LONG WINAPI
SCardListCardsW(SCARDCONTEXT hContext,LPCBYTE pbAtr,LPCGUID rgquidInterfaces,DWORD cguidInterfaceCount,LPWSTR mszCards,LPDWORD pcchCards)297 SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr,
298                 LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
299                 LPWSTR mszCards, LPDWORD pcchCards)
300 {
301     LLOGLN(0, ("SCardListCardsW:"));
302     return aSCardListCardsW(hContext, pbAtr, rgquidInterfaces,
303                             cguidInterfaceCount, mszCards, pcchCards);
304 }
305 
306 /*****************************************************************************/
307 LONG WINAPI
SCardListInterfacesA(SCARDCONTEXT hContext,LPCSTR szCard,LPGUID pguidInterfaces,LPDWORD pcguidInterfaces)308 SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard,
309                      LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
310 {
311     LLOGLN(0, ("SCardListInterfacesA:"));
312     return aSCardListInterfacesA(hContext, szCard, pguidInterfaces,
313                                  pcguidInterfaces);
314 }
315 
316 /*****************************************************************************/
317 LONG WINAPI
SCardListInterfacesW(SCARDCONTEXT hContext,LPCWSTR szCard,LPGUID pguidInterfaces,LPDWORD pcguidInterfaces)318 SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard,
319                      LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
320 {
321     LLOGLN(0, ("SCardListInterfacesW:"));
322     return aSCardListInterfacesW(hContext, szCard, pguidInterfaces,
323                                  pcguidInterfaces);
324 }
325 
326 /*****************************************************************************/
327 LONG WINAPI
SCardGetProviderIdA(SCARDCONTEXT hContext,LPCSTR szCard,LPGUID pguidProviderId)328 SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard,
329                     LPGUID pguidProviderId)
330 {
331     LLOGLN(0, ("SCardGetProviderIdA:"));
332     return aSCardGetProviderIdA(hContext, szCard, pguidProviderId);
333 }
334 
335 /****************************************************************************/
336 LONG WINAPI
SCardGetProviderIdW(SCARDCONTEXT hContext,LPCWSTR szCard,LPGUID pguidProviderId)337 SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard,
338                     LPGUID pguidProviderId)
339 {
340     LLOGLN(0, ("SCardGetProviderIdW:"));
341     return aSCardGetProviderIdW(hContext, szCard, pguidProviderId);
342 }
343 
344 /****************************************************************************/
345 LONG WINAPI
SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext,LPCSTR szCardName,DWORD dwProviderId,LPSTR szProvider,LPDWORD pcchProvider)346 SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
347                               DWORD dwProviderId, LPSTR szProvider,
348                               LPDWORD pcchProvider)
349 {
350     LLOGLN(0, ("SCardGetCardTypeProviderNameA:"));
351     return aSCardGetCardTypeProviderNameA(hContext, szCardName, dwProviderId,
352                                           szProvider, pcchProvider);
353 }
354 
355 /*****************************************************************************/
356 LONG WINAPI
SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext,LPCWSTR szCardName,DWORD dwProviderId,LPWSTR szProvider,LPDWORD pcchProvider)357 SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
358                               DWORD dwProviderId, LPWSTR szProvider,
359                               LPDWORD pcchProvider)
360 {
361     LLOGLN(0, ("SCardGetCardTypeProviderNameW:"));
362     return aSCardGetCardTypeProviderNameW(hContext, szCardName, dwProviderId,
363                                           szProvider, pcchProvider);
364 }
365 
366 /*****************************************************************************/
367 LONG WINAPI
SCardIntroduceReaderGroupA(SCARDCONTEXT hContext,LPCSTR szGroupName)368 SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName)
369 {
370     LLOGLN(0, ("SCardIntroduceReaderGroupA:"));
371     return aSCardIntroduceReaderGroupA(hContext, szGroupName);
372 }
373 
374 /*****************************************************************************/
375 LONG WINAPI
SCardIntroduceReaderGroupW(SCARDCONTEXT hContext,LPCWSTR szGroupName)376 SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName)
377 {
378     LLOGLN(0, ("SCardIntroduceReaderGroupW:"));
379     return aSCardIntroduceReaderGroupW(hContext, szGroupName);
380 }
381 
382 /*****************************************************************************/
383 LONG WINAPI
SCardForgetReaderGroupA(SCARDCONTEXT hContext,LPCSTR szGroupName)384 SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName)
385 {
386     LLOGLN(0, ("SCardForgetReaderGroupA:"));
387     return aSCardForgetReaderGroupA(hContext, szGroupName);
388 }
389 
390 /*****************************************************************************/
391 LONG WINAPI
SCardForgetReaderGroupW(SCARDCONTEXT hContext,LPCWSTR szGroupName)392 SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName)
393 {
394     LLOGLN(0, ("SCardForgetReaderGroupW:"));
395     return aSCardForgetReaderGroupW(hContext, szGroupName);
396 }
397 
398 /*****************************************************************************/
399 LONG WINAPI
SCardIntroduceReaderA(SCARDCONTEXT hContext,LPCSTR szReaderName,LPCSTR szDeviceName)400 SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName,
401                       LPCSTR szDeviceName)
402 {
403     LLOGLN(0, ("SCardIntroduceReaderA:"));
404     return aSCardIntroduceReaderA(hContext, szReaderName, szDeviceName);
405 }
406 
407 /*****************************************************************************/
408 LONG WINAPI
SCardIntroduceReaderW(SCARDCONTEXT hContext,LPCWSTR szReaderName,LPCWSTR szDeviceName)409 SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
410                       LPCWSTR szDeviceName)
411 {
412     LLOGLN(0, ("SCardIntroduceReaderW:"));
413     return aSCardIntroduceReaderW(hContext, szReaderName, szDeviceName);
414 }
415 
416 /*****************************************************************************/
417 LONG WINAPI
SCardForgetReaderA(SCARDCONTEXT hContext,LPCSTR szReaderName)418 SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName)
419 {
420     LLOGLN(0, ("SCardForgetReaderA:"));
421     return aSCardForgetReaderA(hContext, szReaderName);
422 }
423 
424 /*****************************************************************************/
425 LONG WINAPI
SCardForgetReaderW(SCARDCONTEXT hContext,LPCWSTR szReaderName)426 SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName)
427 {
428     LLOGLN(0, ("SCardForgetReaderW:"));
429     return aSCardForgetReaderW(hContext, szReaderName);
430 }
431 
432 /*****************************************************************************/
433 LONG WINAPI
SCardAddReaderToGroupA(SCARDCONTEXT hContext,LPCSTR szReaderName,LPCSTR szGroupName)434 SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
435                        LPCSTR szGroupName)
436 {
437     LLOGLN(0, ("SCardAddReaderToGroupA:"));
438     return aSCardAddReaderToGroupA(hContext, szReaderName, szGroupName);
439 }
440 
441 /*****************************************************************************/
442 LONG WINAPI
SCardAddReaderToGroupW(SCARDCONTEXT hContext,LPCWSTR szReaderName,LPCWSTR szGroupName)443 SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
444                        LPCWSTR szGroupName)
445 {
446     LLOGLN(0, ("SCardAddReaderToGroupW:"));
447     return aSCardAddReaderToGroupW(hContext, szReaderName, szGroupName);
448 }
449 
450 /*****************************************************************************/
451 LONG WINAPI
SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext,LPCSTR szReaderName,LPCSTR szGroupName)452 SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
453                             LPCSTR szGroupName)
454 {
455     LLOGLN(0, ("SCardRemoveReaderFromGroupA:"));
456     return aSCardRemoveReaderFromGroupA(hContext, szReaderName, szGroupName);
457 }
458 
459 /*****************************************************************************/
460 LONG WINAPI
SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext,LPCWSTR szReaderName,LPCWSTR szGroupName)461 SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
462                             LPCWSTR szGroupName)
463 {
464     LLOGLN(0, ("SCardRemoveReaderFromGroupW:"));
465     return aSCardRemoveReaderFromGroupW(hContext, szReaderName, szGroupName);
466 }
467 
468 /*****************************************************************************/
469 LONG WINAPI
SCardIntroduceCardTypeA(SCARDCONTEXT hContext,LPCSTR szCardName,LPCGUID pguidPrimaryProvider,LPCGUID rgguidInterfaces,DWORD dwInterfaceCount,LPCBYTE pbAtr,LPCBYTE pbAtrMask,DWORD cbAtrLen)470 SCardIntroduceCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName,
471                         LPCGUID pguidPrimaryProvider,
472                         LPCGUID rgguidInterfaces,
473                         DWORD dwInterfaceCount, LPCBYTE pbAtr,
474                         LPCBYTE pbAtrMask, DWORD cbAtrLen)
475 {
476     LLOGLN(0, ("SCardIntroduceCardTypeA:"));
477     return aSCardIntroduceCardTypeA(hContext, szCardName, pguidPrimaryProvider,
478                                     rgguidInterfaces, dwInterfaceCount, pbAtr,
479                                     pbAtrMask, cbAtrLen);
480 }
481 
482 /*****************************************************************************/
483 LONG WINAPI
SCardIntroduceCardTypeW(SCARDCONTEXT hContext,LPCWSTR szCardName,LPCGUID pguidPrimaryProvider,LPCGUID rgguidInterfaces,DWORD dwInterfaceCount,LPCBYTE pbAtr,LPCBYTE pbAtrMask,DWORD cbAtrLen)484 SCardIntroduceCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName,
485                         LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces,
486                         DWORD dwInterfaceCount, LPCBYTE pbAtr,
487                         LPCBYTE pbAtrMask, DWORD cbAtrLen)
488 {
489     LLOGLN(0, ("SCardIntroduceCardTypeW:"));
490     return aSCardIntroduceCardTypeW(hContext, szCardName, pguidPrimaryProvider,
491                                     rgguidInterfaces, dwInterfaceCount, pbAtr,
492                                     pbAtrMask, cbAtrLen);
493 }
494 
495 /*****************************************************************************/
496 LONG WINAPI
SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext,LPCSTR szCardName,DWORD dwProviderId,LPCSTR szProvider)497 SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
498                               DWORD dwProviderId, LPCSTR szProvider)
499 {
500     LLOGLN(0, ("SCardSetCardTypeProviderNameA:"));
501     return aSCardSetCardTypeProviderNameA(hContext, szCardName,
502                                           dwProviderId, szProvider);
503 }
504 
505 /*****************************************************************************/
506 LONG WINAPI
SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext,LPCWSTR szCardName,DWORD dwProviderId,LPCWSTR szProvider)507 SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
508                               DWORD dwProviderId, LPCWSTR szProvider)
509 {
510     LLOGLN(0, ("SCardSetCardTypeProviderNameW:"));
511     return aSCardSetCardTypeProviderNameW(hContext, szCardName,
512                                           dwProviderId, szProvider);
513 }
514 
515 /*****************************************************************************/
516 LONG WINAPI
SCardForgetCardTypeA(SCARDCONTEXT hContext,LPCSTR szCardName)517 SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName)
518 {
519     LLOGLN(0, ("SCardForgetCardTypeA:"));
520     return aSCardForgetCardTypeA(hContext, szCardName);
521 }
522 
523 /*****************************************************************************/
524 LONG WINAPI
SCardForgetCardTypeW(SCARDCONTEXT hContext,LPCWSTR szCardName)525 SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName)
526 {
527     LLOGLN(0, ("SCardForgetCardTypeW:"));
528     return aSCardForgetCardTypeW(hContext, szCardName);
529 }
530 
531 /*****************************************************************************/
532 LONG WINAPI
SCardFreeMemory(SCARDCONTEXT hContext,LPCVOID pvMem)533 SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)
534 {
535     LLOGLN(0, ("SCardFreeMemory:"));
536     return aSCardFreeMemory(hContext, pvMem);
537 }
538 
539 /*****************************************************************************/
540 LONG WINAPI
SCardLocateCardsA(SCARDCONTEXT hContext,LPCSTR mszCards,LPSCARD_READERSTATEA rgReaderStates,DWORD cReaders)541 SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards,
542                   LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders)
543 {
544     LLOGLN(0, ("SCardLocateCardsA:"));
545     return aSCardLocateCardsA(hContext, mszCards, rgReaderStates, cReaders);
546 }
547 
548 /*****************************************************************************/
549 LONG WINAPI
SCardLocateCardsW(SCARDCONTEXT hContext,LPCWSTR mszCards,LPSCARD_READERSTATEW rgReaderStates,DWORD cReaders)550 SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards,
551                   LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders)
552 {
553     LLOGLN(0, ("SCardLocateCardsW:"));
554     return aSCardLocateCardsW(hContext, mszCards, rgReaderStates, cReaders);
555 }
556 
557 /*****************************************************************************/
558 LONG WINAPI
SCardGetStatusChangeA(SCARDCONTEXT hContext,DWORD dwTimeout,LPSCARD_READERSTATEA rgReaderStates,DWORD cReaders)559 SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout,
560                       LPSCARD_READERSTATEA rgReaderStates,
561                       DWORD cReaders)
562 {
563     LLOGLN(0, ("SCardGetStatusChangeA:"));
564     return aSCardGetStatusChangeA(hContext, dwTimeout, rgReaderStates, cReaders);
565 }
566 
567 /*****************************************************************************/
568 LONG WINAPI
SCardGetStatusChangeW(SCARDCONTEXT hContext,DWORD dwTimeout,LPSCARD_READERSTATEW rgReaderStates,DWORD cReaders)569 SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout,
570                       LPSCARD_READERSTATEW rgReaderStates,
571                       DWORD cReaders)
572 {
573     LLOGLN(0, ("SCardGetStatusChangeW:"));
574     return aSCardGetStatusChangeW(hContext, dwTimeout, rgReaderStates, cReaders);
575 }
576 
577 /*****************************************************************************/
578 LONG WINAPI
SCardCancel(SCARDCONTEXT hContext)579 SCardCancel(SCARDCONTEXT hContext)
580 {
581     LLOGLN(0, ("SCardCancel:"));
582     return aSCardCancel(hContext);
583 }
584 
585 /*****************************************************************************/
586 LONG WINAPI
SCardConnectA(SCARDCONTEXT hContext,LPCSTR szReader,DWORD dwShareMode,DWORD dwPreferredProtocols,LPSCARDHANDLE phCard,LPDWORD pdwActiveProtocol)587 SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
588               DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
589               LPDWORD pdwActiveProtocol)
590 {
591     LLOGLN(0, ("SCardConnectA:"));
592     return aSCardConnectA(hContext, szReader, dwShareMode,
593                           dwPreferredProtocols, phCard,
594                           pdwActiveProtocol);
595 }
596 
597 /*****************************************************************************/
598 LONG WINAPI
SCardConnectW(SCARDCONTEXT hContext,LPCWSTR szReader,DWORD dwShareMode,DWORD dwPreferredProtocols,LPSCARDHANDLE phCard,LPDWORD pdwActiveProtocol)599 SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode,
600               DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
601               LPDWORD pdwActiveProtocol)
602 {
603     LLOGLN(0, ("SCardConnectW:"));
604     return aSCardConnectW(hContext, szReader, dwShareMode,
605                           dwPreferredProtocols, phCard,
606                           pdwActiveProtocol);
607 }
608 
609 /*****************************************************************************/
610 LONG WINAPI
SCardReconnect(SCARDHANDLE hCard,DWORD dwShareMode,DWORD dwPreferredProtocols,DWORD dwInitialization,LPDWORD pdwActiveProtocol)611 SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode,
612                DWORD dwPreferredProtocols, DWORD dwInitialization,
613                LPDWORD pdwActiveProtocol)
614 {
615     LLOGLN(0, ("SCardReconnect:"));
616     return SCardReconnect(hCard, dwShareMode, dwPreferredProtocols,
617                           dwInitialization, pdwActiveProtocol);
618 }
619 
620 /*****************************************************************************/
621 LONG WINAPI
SCardDisconnect(SCARDHANDLE hCard,DWORD dwDisposition)622 SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)
623 {
624     LLOGLN(0, ("SCardDisconnect:"));
625     return aSCardDisconnect(hCard, dwDisposition);
626 }
627 
628 /*****************************************************************************/
629 LONG WINAPI
SCardBeginTransaction(SCARDHANDLE hCard)630 SCardBeginTransaction(SCARDHANDLE hCard)
631 {
632     LLOGLN(0, ("SCardBeginTransaction:"));
633     return aSCardBeginTransaction(hCard);
634 }
635 
636 /*****************************************************************************/
637 LONG WINAPI
SCardEndTransaction(SCARDHANDLE hCard,DWORD dwDisposition)638 SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition)
639 {
640     LLOGLN(0, ("SCardEndTransaction:"));
641     return aSCardEndTransaction(hCard, dwDisposition);
642 }
643 
644 /*****************************************************************************/
645 LONG WINAPI
SCardCancelTransaction(SCARDHANDLE hCard)646 SCardCancelTransaction(SCARDHANDLE hCard)
647 {
648     LLOGLN(0, ("SCardCancelTransaction:"));
649     return aSCardCancelTransaction(hCard);
650 }
651 
652 /*****************************************************************************/
653 LONG WINAPI
SCardState(SCARDHANDLE hCard,LPDWORD pdwState,LPDWORD pdwProtocol,LPBYTE pbAtr,LPDWORD pcbAtrLen)654 SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
655            LPBYTE pbAtr, LPDWORD pcbAtrLen)
656 {
657     LLOGLN(0, ("SCardState:"));
658     return aSCardState(hCard, pdwState, pdwProtocol, pbAtr, pcbAtrLen);
659 }
660 
661 /*****************************************************************************/
662 LONG WINAPI
SCardStatusA(SCARDHANDLE hCard,LPSTR szReaderName,LPDWORD pcchReaderLen,LPDWORD pdwState,LPDWORD pdwProtocol,LPBYTE pbAtr,LPDWORD pcbAtrLen)663 SCardStatusA(SCARDHANDLE hCard, LPSTR szReaderName, LPDWORD pcchReaderLen,
664              LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr,
665              LPDWORD pcbAtrLen)
666 {
667     LLOGLN(0, ("SCardStatusA:"));
668     return aSCardStatusA(hCard, szReaderName, pcchReaderLen,
669                          pdwState, pdwProtocol, pbAtr, pcbAtrLen);
670 }
671 
672 /*****************************************************************************/
673 LONG WINAPI
SCardStatusW(SCARDHANDLE hCard,LPWSTR szReaderName,LPDWORD pcchReaderLen,LPDWORD pdwState,LPDWORD pdwProtocol,LPBYTE pbAtr,LPDWORD pcbAtrLen)674 SCardStatusW(SCARDHANDLE hCard, LPWSTR szReaderName, LPDWORD pcchReaderLen,
675              LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr,
676              LPDWORD pcbAtrLen)
677 {
678     LONG rv;
679 
680     LLOGLN(0, ("SCardStatusW:"));
681     LLOGLN(0, ("  cchReaderLen %d", *pcchReaderLen));
682     LLOGLN(0, ("  cbAtrLen %d", *pcbAtrLen));
683     rv = aSCardStatusW(hCard, szReaderName, pcchReaderLen,
684                        pdwState, pdwProtocol, pbAtr, pcbAtrLen);
685     LLOGLN(0, ("  rv %d cchReaderLen %d", rv, *pcchReaderLen));
686     return rv;
687 }
688 
689 /*****************************************************************************/
690 LONG WINAPI
SCardTransmit(SCARDHANDLE hCard,LPCSCARD_IO_REQUEST pioSendPci,LPCBYTE pbSendBuffer,DWORD cbSendLength,LPSCARD_IO_REQUEST pioRecvPci,LPBYTE pbRecvBuffer,LPDWORD pcbRecvLength)691 SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci,
692               LPCBYTE pbSendBuffer, DWORD cbSendLength,
693               LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer,
694               LPDWORD pcbRecvLength)
695 {
696     LONG rv;
697 
698     LLOGLN(10, ("SCardTransmit:"));
699     LLOGLN(10, ("  hCard %p", hCard));
700     LLOGLN(10, ("  cbSendLength %d", cbSendLength));
701     LLOGLN(10, ("  cbRecvLength %d", *pcbRecvLength));
702     LLOGLN(10, ("  pioSendPci->dwProtocol %d", pioSendPci->dwProtocol));
703     LLOGLN(10, ("  pioSendPci->cbPciLength %d", pioSendPci->cbPciLength));
704     LLOGLN(10, ("  pioRecvPci %p", pioRecvPci));
705     if (pioRecvPci != NULL)
706     {
707         LLOGLN(10, ("    pioRecvPci->dwProtocol %d", pioRecvPci->dwProtocol));
708         LLOGLN(10, ("    pioRecvPci->cbPciLength %d", pioRecvPci->cbPciLength));
709     }
710     rv = aSCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength,
711                         pioRecvPci, pbRecvBuffer, pcbRecvLength);
712     LLOGLN(10, ("  rv %d cbRecvLength %d", rv, *pcbRecvLength));
713     return rv;
714 }
715 
716 /*****************************************************************************/
717 LONG WINAPI
SCardControl(SCARDHANDLE hCard,DWORD dwControlCode,LPCVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned)718 SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
719              DWORD nInBufferSize, LPVOID lpOutBuffer,
720              DWORD nOutBufferSize, LPDWORD lpBytesReturned)
721 {
722     LONG rv;
723     char text[8148];
724 
725     LLOGLN(10, ("SCardControl:"));
726     LLOGLN(10, ("  hCard %p", hCard));
727     LLOGLN(10, ("  dwControlCode 0x%8.8x", dwControlCode));
728     LLOGLN(10, ("  lpInBuffer %p", lpInBuffer));
729     LLOGLN(10, ("  nInBufferSize %d", nInBufferSize));
730     LLOGLN(10, ("  lpOutBuffer %p", lpOutBuffer));
731     LLOGLN(10, ("  nOutBufferSize %d", nOutBufferSize));
732     LLOGLN(10, ("  lpBytesReturned %p", lpBytesReturned));
733     rv = aSCardControl(hCard, dwControlCode,
734                        lpInBuffer, nInBufferSize,
735                        lpOutBuffer, nOutBufferSize,
736                        lpBytesReturned);
737     LLOGLN(10, ("  rv %d BytesReturned %d", rv, *lpBytesReturned));
738     return rv;
739 }
740 
741 /*****************************************************************************/
742 LONG WINAPI
SCardGetAttrib(SCARDHANDLE hCard,DWORD dwAttrId,LPBYTE pbAttr,LPDWORD pcbAttrLen)743 SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
744                LPDWORD pcbAttrLen)
745 {
746     LLOGLN(0, ("SCardGetAttrib:"));
747     return aSCardGetAttrib(hCard, dwAttrId, pbAttr, pcbAttrLen);
748 }
749 
750 /*****************************************************************************/
751 LONG WINAPI
SCardSetAttrib(SCARDHANDLE hCard,DWORD dwAttrId,LPCBYTE pbAttr,DWORD cbAttrLen)752 SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
753                DWORD cbAttrLen)
754 {
755     LLOGLN(0, ("SCardSetAttrib:"));
756     return aSCardSetAttrib(hCard, dwAttrId, pbAttr, cbAttrLen);
757 }
758