smartcard_inspect.c 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348
  1. /**
  2. * WinPR: Windows Portable Runtime
  3. * Smart Card API
  4. *
  5. * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. */
  19. #ifdef HAVE_CONFIG_H
  20. #include "config.h"
  21. #endif
  22. #include <winpr/crt.h>
  23. #include <winpr/wlog.h>
  24. #include <winpr/file.h>
  25. #include <winpr/path.h>
  26. #include <winpr/library.h>
  27. #include <winpr/smartcard.h>
  28. #include "smartcard_inspect.h"
  29. static wLog* g_Log = NULL;
  30. static PSCardApiFunctionTable g_SCardApi = NULL;
  31. /**
  32. * Standard Windows Smart Card API
  33. */
  34. static LONG WINAPI Inspect_SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
  35. LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
  36. {
  37. LONG status;
  38. WLog_Print(g_Log, WLOG_DEBUG, "SCardEstablishContext { dwScope: %s (0x%08" PRIX32 ")",
  39. SCardGetScopeString(dwScope), dwScope);
  40. status = g_SCardApi->pfnSCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext);
  41. WLog_Print(g_Log, WLOG_DEBUG, "SCardEstablishContext } status: %s (0x%08" PRIX32 ")",
  42. SCardGetErrorString(status), status);
  43. return status;
  44. }
  45. static LONG WINAPI Inspect_SCardReleaseContext(SCARDCONTEXT hContext)
  46. {
  47. LONG status;
  48. WLog_Print(g_Log, WLOG_DEBUG, "SCardReleaseContext { hContext: %p", (void*)hContext);
  49. status = g_SCardApi->pfnSCardReleaseContext(hContext);
  50. WLog_Print(g_Log, WLOG_DEBUG, "SCardReleaseContext } status: %s (0x%08" PRIX32 ")",
  51. SCardGetErrorString(status), status);
  52. return status;
  53. }
  54. static LONG WINAPI Inspect_SCardIsValidContext(SCARDCONTEXT hContext)
  55. {
  56. LONG status;
  57. WLog_Print(g_Log, WLOG_DEBUG, "SCardIsValidContext { hContext: %p", (void*)hContext);
  58. status = g_SCardApi->pfnSCardIsValidContext(hContext);
  59. WLog_Print(g_Log, WLOG_DEBUG, "SCardIsValidContext } status: %s (0x%08" PRIX32 ")",
  60. SCardGetErrorString(status), status);
  61. return status;
  62. }
  63. static LONG WINAPI Inspect_SCardListReaderGroupsA(SCARDCONTEXT hContext, LPSTR mszGroups,
  64. LPDWORD pcchGroups)
  65. {
  66. LONG status;
  67. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReaderGroupsA { hContext: %p", (void*)hContext);
  68. status = g_SCardApi->pfnSCardListReaderGroupsA(hContext, mszGroups, pcchGroups);
  69. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReaderGroupsA } status: %s (0x%08" PRIX32 ")",
  70. SCardGetErrorString(status), status);
  71. return status;
  72. }
  73. static LONG WINAPI Inspect_SCardListReaderGroupsW(SCARDCONTEXT hContext, LPWSTR mszGroups,
  74. LPDWORD pcchGroups)
  75. {
  76. LONG status;
  77. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReaderGroupsW { hContext: %p", (void*)hContext);
  78. status = g_SCardApi->pfnSCardListReaderGroupsW(hContext, mszGroups, pcchGroups);
  79. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReaderGroupsW } status: %s (0x%08" PRIX32 ")",
  80. SCardGetErrorString(status), status);
  81. return status;
  82. }
  83. static LONG WINAPI Inspect_SCardListReadersA(SCARDCONTEXT hContext, LPCSTR mszGroups,
  84. LPSTR mszReaders, LPDWORD pcchReaders)
  85. {
  86. LONG status;
  87. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersA { hContext: %p", (void*)hContext);
  88. status = g_SCardApi->pfnSCardListReadersA(hContext, mszGroups, mszReaders, pcchReaders);
  89. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersA } status: %s (0x%08" PRIX32 ")",
  90. SCardGetErrorString(status), status);
  91. return status;
  92. }
  93. static LONG WINAPI Inspect_SCardListReadersW(SCARDCONTEXT hContext, LPCWSTR mszGroups,
  94. LPWSTR mszReaders, LPDWORD pcchReaders)
  95. {
  96. LONG status;
  97. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersW { hContext: %p", (void*)hContext);
  98. status = g_SCardApi->pfnSCardListReadersW(hContext, mszGroups, mszReaders, pcchReaders);
  99. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersW } status: %s (0x%08" PRIX32 ")",
  100. SCardGetErrorString(status), status);
  101. return status;
  102. }
  103. static LONG WINAPI Inspect_SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr,
  104. LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
  105. CHAR* mszCards, LPDWORD pcchCards)
  106. {
  107. LONG status;
  108. WLog_Print(g_Log, WLOG_DEBUG, "SCardListCardsA { hContext: %p", (void*)hContext);
  109. status = g_SCardApi->pfnSCardListCardsA(hContext, pbAtr, rgquidInterfaces, cguidInterfaceCount,
  110. mszCards, pcchCards);
  111. WLog_Print(g_Log, WLOG_DEBUG, "SCardListCardsA } status: %s (0x%08" PRIX32 ")",
  112. SCardGetErrorString(status), status);
  113. return status;
  114. }
  115. static LONG WINAPI Inspect_SCardListCardsW(SCARDCONTEXT hContext, LPCBYTE pbAtr,
  116. LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount,
  117. WCHAR* mszCards, LPDWORD pcchCards)
  118. {
  119. LONG status;
  120. WLog_Print(g_Log, WLOG_DEBUG, "SCardListCardsW { hContext: %p", (void*)hContext);
  121. status = g_SCardApi->pfnSCardListCardsW(hContext, pbAtr, rgquidInterfaces, cguidInterfaceCount,
  122. mszCards, pcchCards);
  123. WLog_Print(g_Log, WLOG_DEBUG, "SCardListCardsW } status: %s (0x%08" PRIX32 ")",
  124. SCardGetErrorString(status), status);
  125. return status;
  126. }
  127. static LONG WINAPI Inspect_SCardListInterfacesA(SCARDCONTEXT hContext, LPCSTR szCard,
  128. LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
  129. {
  130. LONG status;
  131. WLog_Print(g_Log, WLOG_DEBUG, "SCardListInterfacesA { hContext: %p", (void*)hContext);
  132. status =
  133. g_SCardApi->pfnSCardListInterfacesA(hContext, szCard, pguidInterfaces, pcguidInterfaces);
  134. WLog_Print(g_Log, WLOG_DEBUG, "SCardListInterfacesA } status: %s (0x%08" PRIX32 ")",
  135. SCardGetErrorString(status), status);
  136. return status;
  137. }
  138. static LONG WINAPI Inspect_SCardListInterfacesW(SCARDCONTEXT hContext, LPCWSTR szCard,
  139. LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
  140. {
  141. LONG status;
  142. WLog_Print(g_Log, WLOG_DEBUG, "SCardListInterfacesW { hContext: %p", (void*)hContext);
  143. status =
  144. g_SCardApi->pfnSCardListInterfacesW(hContext, szCard, pguidInterfaces, pcguidInterfaces);
  145. WLog_Print(g_Log, WLOG_DEBUG, "SCardListInterfacesW } status: %s (0x%08" PRIX32 ")",
  146. SCardGetErrorString(status), status);
  147. return status;
  148. }
  149. static LONG WINAPI Inspect_SCardGetProviderIdA(SCARDCONTEXT hContext, LPCSTR szCard,
  150. LPGUID pguidProviderId)
  151. {
  152. LONG status;
  153. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetProviderIdA { hContext: %p", (void*)hContext);
  154. status = g_SCardApi->pfnSCardGetProviderIdA(hContext, szCard, pguidProviderId);
  155. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetProviderIdA } status: %s (0x%08" PRIX32 ")",
  156. SCardGetErrorString(status), status);
  157. return status;
  158. }
  159. static LONG WINAPI Inspect_SCardGetProviderIdW(SCARDCONTEXT hContext, LPCWSTR szCard,
  160. LPGUID pguidProviderId)
  161. {
  162. LONG status;
  163. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetProviderIdW { hContext: %p", (void*)hContext);
  164. status = g_SCardApi->pfnSCardGetProviderIdW(hContext, szCard, pguidProviderId);
  165. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetProviderIdW } status: %s (0x%08" PRIX32 ")",
  166. SCardGetErrorString(status), status);
  167. return status;
  168. }
  169. static LONG WINAPI Inspect_SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
  170. DWORD dwProviderId, CHAR* szProvider,
  171. LPDWORD pcchProvider)
  172. {
  173. LONG status;
  174. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetCardTypeProviderNameA { hContext: %p", (void*)hContext);
  175. status = g_SCardApi->pfnSCardGetCardTypeProviderNameA(hContext, szCardName, dwProviderId,
  176. szProvider, pcchProvider);
  177. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetCardTypeProviderNameA } status: %s (0x%08" PRIX32 ")",
  178. SCardGetErrorString(status), status);
  179. return status;
  180. }
  181. static LONG WINAPI Inspect_SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
  182. DWORD dwProviderId, WCHAR* szProvider,
  183. LPDWORD pcchProvider)
  184. {
  185. LONG status;
  186. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetCardTypeProviderNameW { hContext: %p", (void*)hContext);
  187. status = g_SCardApi->pfnSCardGetCardTypeProviderNameW(hContext, szCardName, dwProviderId,
  188. szProvider, pcchProvider);
  189. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetCardTypeProviderNameW } status: %s (0x%08" PRIX32 ")",
  190. SCardGetErrorString(status), status);
  191. return status;
  192. }
  193. static LONG WINAPI Inspect_SCardIntroduceReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName)
  194. {
  195. LONG status;
  196. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderGroupA { hContext: %p", (void*)hContext);
  197. status = g_SCardApi->pfnSCardIntroduceReaderGroupA(hContext, szGroupName);
  198. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderGroupA } status: %s (0x%08" PRIX32 ")",
  199. SCardGetErrorString(status), status);
  200. return status;
  201. }
  202. static LONG WINAPI Inspect_SCardIntroduceReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName)
  203. {
  204. LONG status;
  205. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderGroupW { hContext: %p", (void*)hContext);
  206. status = g_SCardApi->pfnSCardIntroduceReaderGroupW(hContext, szGroupName);
  207. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderGroupW } status: %s (0x%08" PRIX32 ")",
  208. SCardGetErrorString(status), status);
  209. return status;
  210. }
  211. static LONG WINAPI Inspect_SCardForgetReaderGroupA(SCARDCONTEXT hContext, LPCSTR szGroupName)
  212. {
  213. LONG status;
  214. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderGroupA { hContext: %p", (void*)hContext);
  215. status = g_SCardApi->pfnSCardForgetReaderGroupA(hContext, szGroupName);
  216. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderGroupA } status: %s (0x%08" PRIX32 ")",
  217. SCardGetErrorString(status), status);
  218. return status;
  219. }
  220. static LONG WINAPI Inspect_SCardForgetReaderGroupW(SCARDCONTEXT hContext, LPCWSTR szGroupName)
  221. {
  222. LONG status;
  223. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderGroupW { hContext: %p", (void*)hContext);
  224. status = g_SCardApi->pfnSCardForgetReaderGroupW(hContext, szGroupName);
  225. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderGroupW } status: %s (0x%08" PRIX32 ")",
  226. SCardGetErrorString(status), status);
  227. return status;
  228. }
  229. static LONG WINAPI Inspect_SCardIntroduceReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName,
  230. LPCSTR szDeviceName)
  231. {
  232. LONG status;
  233. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderA { hContext: %p", (void*)hContext);
  234. status = g_SCardApi->pfnSCardIntroduceReaderA(hContext, szReaderName, szDeviceName);
  235. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderA } status: %s (0x%08" PRIX32 ")",
  236. SCardGetErrorString(status), status);
  237. return status;
  238. }
  239. static LONG WINAPI Inspect_SCardIntroduceReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
  240. LPCWSTR szDeviceName)
  241. {
  242. LONG status;
  243. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderW { hContext: %p", (void*)hContext);
  244. status = g_SCardApi->pfnSCardIntroduceReaderW(hContext, szReaderName, szDeviceName);
  245. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceReaderW } status: %s (0x%08" PRIX32 ")",
  246. SCardGetErrorString(status), status);
  247. return status;
  248. }
  249. static LONG WINAPI Inspect_SCardForgetReaderA(SCARDCONTEXT hContext, LPCSTR szReaderName)
  250. {
  251. LONG status;
  252. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderA { hContext: %p", (void*)hContext);
  253. status = g_SCardApi->pfnSCardForgetReaderA(hContext, szReaderName);
  254. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderA } status: %s (0x%08" PRIX32 ")",
  255. SCardGetErrorString(status), status);
  256. return status;
  257. }
  258. static LONG WINAPI Inspect_SCardForgetReaderW(SCARDCONTEXT hContext, LPCWSTR szReaderName)
  259. {
  260. LONG status;
  261. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderW { hContext: %p", (void*)hContext);
  262. status = g_SCardApi->pfnSCardForgetReaderW(hContext, szReaderName);
  263. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetReaderW } status: %s (0x%08" PRIX32 ")",
  264. SCardGetErrorString(status), status);
  265. return status;
  266. }
  267. static LONG WINAPI Inspect_SCardAddReaderToGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
  268. LPCSTR szGroupName)
  269. {
  270. LONG status;
  271. WLog_Print(g_Log, WLOG_DEBUG, "SCardAddReaderToGroupA { hContext: %p", (void*)hContext);
  272. status = g_SCardApi->pfnSCardAddReaderToGroupA(hContext, szReaderName, szGroupName);
  273. WLog_Print(g_Log, WLOG_DEBUG, "SCardAddReaderToGroupA } status: %s (0x%08" PRIX32 ")",
  274. SCardGetErrorString(status), status);
  275. return status;
  276. }
  277. static LONG WINAPI Inspect_SCardAddReaderToGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
  278. LPCWSTR szGroupName)
  279. {
  280. LONG status;
  281. WLog_Print(g_Log, WLOG_DEBUG, "SCardAddReaderToGroupW { hContext: %p", (void*)hContext);
  282. status = g_SCardApi->pfnSCardAddReaderToGroupW(hContext, szReaderName, szGroupName);
  283. WLog_Print(g_Log, WLOG_DEBUG, "SCardAddReaderToGroupW } status: %s (0x%08" PRIX32 ")",
  284. SCardGetErrorString(status), status);
  285. return status;
  286. }
  287. static LONG WINAPI Inspect_SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext, LPCSTR szReaderName,
  288. LPCSTR szGroupName)
  289. {
  290. LONG status;
  291. WLog_Print(g_Log, WLOG_DEBUG, "SCardRemoveReaderFromGroupA { hContext: %p", (void*)hContext);
  292. status = g_SCardApi->pfnSCardRemoveReaderFromGroupA(hContext, szReaderName, szGroupName);
  293. WLog_Print(g_Log, WLOG_DEBUG, "SCardRemoveReaderFromGroupA } status: %s (0x%08" PRIX32 ")",
  294. SCardGetErrorString(status), status);
  295. return status;
  296. }
  297. static LONG WINAPI Inspect_SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
  298. LPCWSTR szGroupName)
  299. {
  300. LONG status;
  301. WLog_Print(g_Log, WLOG_DEBUG, "SCardRemoveReaderFromGroupW { hContext: %p", (void*)hContext);
  302. status = g_SCardApi->pfnSCardRemoveReaderFromGroupW(hContext, szReaderName, szGroupName);
  303. WLog_Print(g_Log, WLOG_DEBUG, "SCardRemoveReaderFromGroupW } status: %s (0x%08" PRIX32 ")",
  304. SCardGetErrorString(status), status);
  305. return status;
  306. }
  307. static LONG WINAPI Inspect_SCardIntroduceCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName,
  308. LPCGUID pguidPrimaryProvider,
  309. LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
  310. LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen)
  311. {
  312. LONG status;
  313. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceCardTypeA { hContext: %p", (void*)hContext);
  314. status = g_SCardApi->pfnSCardIntroduceCardTypeA(hContext, szCardName, pguidPrimaryProvider,
  315. rgguidInterfaces, dwInterfaceCount, pbAtr,
  316. pbAtrMask, cbAtrLen);
  317. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceCardTypeA } status: %s (0x%08" PRIX32 ")",
  318. SCardGetErrorString(status), status);
  319. return status;
  320. }
  321. static LONG WINAPI Inspect_SCardIntroduceCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName,
  322. LPCGUID pguidPrimaryProvider,
  323. LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
  324. LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen)
  325. {
  326. LONG status;
  327. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceCardTypeW { hContext: %p", (void*)hContext);
  328. status = g_SCardApi->pfnSCardIntroduceCardTypeW(hContext, szCardName, pguidPrimaryProvider,
  329. rgguidInterfaces, dwInterfaceCount, pbAtr,
  330. pbAtrMask, cbAtrLen);
  331. WLog_Print(g_Log, WLOG_DEBUG, "SCardIntroduceCardTypeW } status: %s (0x%08" PRIX32 ")",
  332. SCardGetErrorString(status), status);
  333. return status;
  334. }
  335. static LONG WINAPI Inspect_SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext, LPCSTR szCardName,
  336. DWORD dwProviderId, LPCSTR szProvider)
  337. {
  338. LONG status;
  339. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetCardTypeProviderNameA { hContext: %p", (void*)hContext);
  340. status = g_SCardApi->pfnSCardSetCardTypeProviderNameA(hContext, szCardName, dwProviderId,
  341. szProvider);
  342. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetCardTypeProviderNameA } status: %s (0x%08" PRIX32 ")",
  343. SCardGetErrorString(status), status);
  344. return status;
  345. }
  346. static LONG WINAPI Inspect_SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext, LPCWSTR szCardName,
  347. DWORD dwProviderId, LPCWSTR szProvider)
  348. {
  349. LONG status;
  350. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetCardTypeProviderNameA { hContext: %p", (void*)hContext);
  351. status = g_SCardApi->pfnSCardSetCardTypeProviderNameW(hContext, szCardName, dwProviderId,
  352. szProvider);
  353. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetCardTypeProviderNameW } status: %s (0x%08" PRIX32 ")",
  354. SCardGetErrorString(status), status);
  355. return status;
  356. }
  357. static LONG WINAPI Inspect_SCardForgetCardTypeA(SCARDCONTEXT hContext, LPCSTR szCardName)
  358. {
  359. LONG status;
  360. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetCardTypeA { hContext: %p", (void*)hContext);
  361. status = g_SCardApi->pfnSCardForgetCardTypeA(hContext, szCardName);
  362. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetCardTypeA } status: %s (0x%08" PRIX32 ")",
  363. SCardGetErrorString(status), status);
  364. return status;
  365. }
  366. static LONG WINAPI Inspect_SCardForgetCardTypeW(SCARDCONTEXT hContext, LPCWSTR szCardName)
  367. {
  368. LONG status;
  369. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetCardTypeW { hContext: %p", (void*)hContext);
  370. status = g_SCardApi->pfnSCardForgetCardTypeW(hContext, szCardName);
  371. WLog_Print(g_Log, WLOG_DEBUG, "SCardForgetCardTypeW } status: %s (0x%08" PRIX32 ")",
  372. SCardGetErrorString(status), status);
  373. return status;
  374. }
  375. static LONG WINAPI Inspect_SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)
  376. {
  377. LONG status;
  378. WLog_Print(g_Log, WLOG_DEBUG, "SCardFreeMemory { hContext: %p", (void*)hContext);
  379. status = g_SCardApi->pfnSCardFreeMemory(hContext, pvMem);
  380. WLog_Print(g_Log, WLOG_DEBUG, "SCardFreeMemory } status: %s (0x%08" PRIX32 ")",
  381. SCardGetErrorString(status), status);
  382. return status;
  383. }
  384. static HANDLE WINAPI Inspect_SCardAccessStartedEvent(void)
  385. {
  386. HANDLE hEvent;
  387. WLog_Print(g_Log, WLOG_DEBUG, "SCardAccessStartedEvent {");
  388. hEvent = g_SCardApi->pfnSCardAccessStartedEvent();
  389. WLog_Print(g_Log, WLOG_DEBUG, "SCardAccessStartedEvent } hEvent: %p", hEvent);
  390. return hEvent;
  391. }
  392. static void WINAPI Inspect_SCardReleaseStartedEvent(void)
  393. {
  394. WLog_Print(g_Log, WLOG_DEBUG, "SCardReleaseStartedEvent {");
  395. g_SCardApi->pfnSCardReleaseStartedEvent();
  396. WLog_Print(g_Log, WLOG_DEBUG, "SCardReleaseStartedEvent }");
  397. }
  398. static LONG WINAPI Inspect_SCardLocateCardsA(SCARDCONTEXT hContext, LPCSTR mszCards,
  399. LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders)
  400. {
  401. LONG status;
  402. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsA { hContext: %p", (void*)hContext);
  403. status = g_SCardApi->pfnSCardLocateCardsA(hContext, mszCards, rgReaderStates, cReaders);
  404. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsA } status: %s (0x%08" PRIX32 ")",
  405. SCardGetErrorString(status), status);
  406. return status;
  407. }
  408. static LONG WINAPI Inspect_SCardLocateCardsW(SCARDCONTEXT hContext, LPCWSTR mszCards,
  409. LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders)
  410. {
  411. LONG status;
  412. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsW { hContext: %p", (void*)hContext);
  413. status = g_SCardApi->pfnSCardLocateCardsW(hContext, mszCards, rgReaderStates, cReaders);
  414. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsW } status: %s (0x%08" PRIX32 ")",
  415. SCardGetErrorString(status), status);
  416. return status;
  417. }
  418. static LONG WINAPI Inspect_SCardLocateCardsByATRA(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks,
  419. DWORD cAtrs, LPSCARD_READERSTATEA rgReaderStates,
  420. DWORD cReaders)
  421. {
  422. LONG status;
  423. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsByATRA { hContext: %p", (void*)hContext);
  424. status = g_SCardApi->pfnSCardLocateCardsByATRA(hContext, rgAtrMasks, cAtrs, rgReaderStates,
  425. cReaders);
  426. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsByATRA } status: %s (0x%08" PRIX32 ")",
  427. SCardGetErrorString(status), status);
  428. return status;
  429. }
  430. static LONG WINAPI Inspect_SCardLocateCardsByATRW(SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks,
  431. DWORD cAtrs, LPSCARD_READERSTATEW rgReaderStates,
  432. DWORD cReaders)
  433. {
  434. LONG status;
  435. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsByATRW { hContext: %p", (void*)hContext);
  436. status = g_SCardApi->pfnSCardLocateCardsByATRW(hContext, rgAtrMasks, cAtrs, rgReaderStates,
  437. cReaders);
  438. WLog_Print(g_Log, WLOG_DEBUG, "SCardLocateCardsByATRW } status: %s (0x%08" PRIX32 ")",
  439. SCardGetErrorString(status), status);
  440. return status;
  441. }
  442. static LONG WINAPI Inspect_SCardGetStatusChangeA(SCARDCONTEXT hContext, DWORD dwTimeout,
  443. LPSCARD_READERSTATEA rgReaderStates,
  444. DWORD cReaders)
  445. {
  446. LONG status;
  447. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetStatusChangeA { hContext: %p", (void*)hContext);
  448. status = g_SCardApi->pfnSCardGetStatusChangeA(hContext, dwTimeout, rgReaderStates, cReaders);
  449. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetStatusChangeA } status: %s (0x%08" PRIX32 ")",
  450. SCardGetErrorString(status), status);
  451. return status;
  452. }
  453. static LONG WINAPI Inspect_SCardGetStatusChangeW(SCARDCONTEXT hContext, DWORD dwTimeout,
  454. LPSCARD_READERSTATEW rgReaderStates,
  455. DWORD cReaders)
  456. {
  457. LONG status;
  458. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetStatusChangeW { hContext: %p", (void*)hContext);
  459. status = g_SCardApi->pfnSCardGetStatusChangeW(hContext, dwTimeout, rgReaderStates, cReaders);
  460. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetStatusChangeW } status: %s (0x%08" PRIX32 ")",
  461. SCardGetErrorString(status), status);
  462. return status;
  463. }
  464. static LONG WINAPI Inspect_SCardCancel(SCARDCONTEXT hContext)
  465. {
  466. LONG status;
  467. WLog_Print(g_Log, WLOG_DEBUG, "SCardCancel { hContext: %p", (void*)hContext);
  468. status = g_SCardApi->pfnSCardCancel(hContext);
  469. WLog_Print(g_Log, WLOG_DEBUG, "SCardCancel } status: %s (0x%08" PRIX32 ")",
  470. SCardGetErrorString(status), status);
  471. return status;
  472. }
  473. static LONG WINAPI Inspect_SCardConnectA(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
  474. DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
  475. LPDWORD pdwActiveProtocol)
  476. {
  477. LONG status;
  478. WLog_Print(g_Log, WLOG_DEBUG, "SCardConnectA { hContext: %p", (void*)hContext);
  479. status = g_SCardApi->pfnSCardConnectA(hContext, szReader, dwShareMode, dwPreferredProtocols,
  480. phCard, pdwActiveProtocol);
  481. WLog_Print(g_Log, WLOG_DEBUG, "SCardConnectA } status: %s (0x%08" PRIX32 ")",
  482. SCardGetErrorString(status), status);
  483. return status;
  484. }
  485. static LONG WINAPI Inspect_SCardConnectW(SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode,
  486. DWORD dwPreferredProtocols, LPSCARDHANDLE phCard,
  487. LPDWORD pdwActiveProtocol)
  488. {
  489. LONG status;
  490. WLog_Print(g_Log, WLOG_DEBUG, "SCardConnectW { hContext: %p", (void*)hContext);
  491. status = g_SCardApi->pfnSCardConnectW(hContext, szReader, dwShareMode, dwPreferredProtocols,
  492. phCard, pdwActiveProtocol);
  493. WLog_Print(g_Log, WLOG_DEBUG, "SCardConnectW } status: %s (0x%08" PRIX32 ")",
  494. SCardGetErrorString(status), status);
  495. return status;
  496. }
  497. static LONG WINAPI Inspect_SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode,
  498. DWORD dwPreferredProtocols, DWORD dwInitialization,
  499. LPDWORD pdwActiveProtocol)
  500. {
  501. LONG status;
  502. WLog_Print(g_Log, WLOG_DEBUG, "SCardReconnect { hCard: %p", (void*)hCard);
  503. status = g_SCardApi->pfnSCardReconnect(hCard, dwShareMode, dwPreferredProtocols,
  504. dwInitialization, pdwActiveProtocol);
  505. WLog_Print(g_Log, WLOG_DEBUG, "SCardReconnect } status: %s (0x%08" PRIX32 ")",
  506. SCardGetErrorString(status), status);
  507. return status;
  508. }
  509. static LONG WINAPI Inspect_SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)
  510. {
  511. LONG status;
  512. WLog_Print(g_Log, WLOG_DEBUG, "SCardDisconnect { hCard: %p", (void*)hCard);
  513. status = g_SCardApi->pfnSCardDisconnect(hCard, dwDisposition);
  514. WLog_Print(g_Log, WLOG_DEBUG, "SCardDisconnect } status: %s (0x%08" PRIX32 ")",
  515. SCardGetErrorString(status), status);
  516. return status;
  517. }
  518. static LONG WINAPI Inspect_SCardBeginTransaction(SCARDHANDLE hCard)
  519. {
  520. LONG status;
  521. WLog_Print(g_Log, WLOG_DEBUG, "SCardBeginTransaction { hCard: %p", (void*)hCard);
  522. status = g_SCardApi->pfnSCardBeginTransaction(hCard);
  523. WLog_Print(g_Log, WLOG_DEBUG, "SCardBeginTransaction } status: %s (0x%08" PRIX32 ")",
  524. SCardGetErrorString(status), status);
  525. return status;
  526. }
  527. static LONG WINAPI Inspect_SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition)
  528. {
  529. LONG status;
  530. WLog_Print(g_Log, WLOG_DEBUG, "SCardEndTransaction { hCard: %p", (void*)hCard);
  531. status = g_SCardApi->pfnSCardEndTransaction(hCard, dwDisposition);
  532. WLog_Print(g_Log, WLOG_DEBUG, "SCardEndTransaction } status: %s (0x%08" PRIX32 ")",
  533. SCardGetErrorString(status), status);
  534. return status;
  535. }
  536. static LONG WINAPI Inspect_SCardCancelTransaction(SCARDHANDLE hCard)
  537. {
  538. LONG status;
  539. WLog_Print(g_Log, WLOG_DEBUG, "SCardCancelTransaction { hCard: %p", (void*)hCard);
  540. status = g_SCardApi->pfnSCardCancelTransaction(hCard);
  541. WLog_Print(g_Log, WLOG_DEBUG, "SCardCancelTransaction } status: %s (0x%08" PRIX32 ")",
  542. SCardGetErrorString(status), status);
  543. return status;
  544. }
  545. static LONG WINAPI Inspect_SCardState(SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol,
  546. LPBYTE pbAtr, LPDWORD pcbAtrLen)
  547. {
  548. LONG status;
  549. WLog_Print(g_Log, WLOG_DEBUG, "SCardState { hCard: %p", (void*)hCard);
  550. status = g_SCardApi->pfnSCardState(hCard, pdwState, pdwProtocol, pbAtr, pcbAtrLen);
  551. WLog_Print(g_Log, WLOG_DEBUG, "SCardState } status: %s (0x%08" PRIX32 ")",
  552. SCardGetErrorString(status), status);
  553. return status;
  554. }
  555. static LONG WINAPI Inspect_SCardStatusA(SCARDHANDLE hCard, LPSTR mszReaderNames,
  556. LPDWORD pcchReaderLen, LPDWORD pdwState,
  557. LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
  558. {
  559. LONG status;
  560. WLog_Print(g_Log, WLOG_DEBUG, "SCardStatusA { hCard: %p", (void*)hCard);
  561. status = g_SCardApi->pfnSCardStatusA(hCard, mszReaderNames, pcchReaderLen, pdwState,
  562. pdwProtocol, pbAtr, pcbAtrLen);
  563. WLog_Print(g_Log, WLOG_DEBUG, "SCardStatusA } status: %s (0x%08" PRIX32 ")",
  564. SCardGetErrorString(status), status);
  565. return status;
  566. }
  567. static LONG WINAPI Inspect_SCardStatusW(SCARDHANDLE hCard, LPWSTR mszReaderNames,
  568. LPDWORD pcchReaderLen, LPDWORD pdwState,
  569. LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
  570. {
  571. LONG status;
  572. WLog_Print(g_Log, WLOG_DEBUG, "SCardStatusW { hCard: %p", (void*)hCard);
  573. status = g_SCardApi->pfnSCardStatusW(hCard, mszReaderNames, pcchReaderLen, pdwState,
  574. pdwProtocol, pbAtr, pcbAtrLen);
  575. WLog_Print(g_Log, WLOG_DEBUG, "SCardStatusW } status: %s (0x%08" PRIX32 ")",
  576. SCardGetErrorString(status), status);
  577. return status;
  578. }
  579. static LONG WINAPI Inspect_SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci,
  580. LPCBYTE pbSendBuffer, DWORD cbSendLength,
  581. LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer,
  582. LPDWORD pcbRecvLength)
  583. {
  584. LONG status;
  585. WLog_Print(g_Log, WLOG_DEBUG, "SCardTransmit { hCard: %p", (void*)hCard);
  586. status = g_SCardApi->pfnSCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, pioRecvPci,
  587. pbRecvBuffer, pcbRecvLength);
  588. WLog_Print(g_Log, WLOG_DEBUG, "SCardTransmit } status: %s (0x%08" PRIX32 ")",
  589. SCardGetErrorString(status), status);
  590. return status;
  591. }
  592. static LONG WINAPI Inspect_SCardGetTransmitCount(SCARDHANDLE hCard, LPDWORD pcTransmitCount)
  593. {
  594. LONG status;
  595. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetTransmitCount { hCard: %p", (void*)hCard);
  596. status = g_SCardApi->pfnSCardGetTransmitCount(hCard, pcTransmitCount);
  597. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetTransmitCount } status: %s (0x%08" PRIX32 ")",
  598. SCardGetErrorString(status), status);
  599. return status;
  600. }
  601. static LONG WINAPI Inspect_SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer,
  602. DWORD cbInBufferSize, LPVOID lpOutBuffer,
  603. DWORD cbOutBufferSize, LPDWORD lpBytesReturned)
  604. {
  605. LONG status;
  606. WLog_Print(g_Log, WLOG_DEBUG, "SCardControl { hCard: %p", (void*)hCard);
  607. status = g_SCardApi->pfnSCardControl(hCard, dwControlCode, lpInBuffer, cbInBufferSize,
  608. lpOutBuffer, cbOutBufferSize, lpBytesReturned);
  609. WLog_Print(g_Log, WLOG_DEBUG, "SCardControl } status: %s (0x%08" PRIX32 ")",
  610. SCardGetErrorString(status), status);
  611. return status;
  612. }
  613. static LONG WINAPI Inspect_SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
  614. LPDWORD pcbAttrLen)
  615. {
  616. LONG status;
  617. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetAttrib { hCard: %p", (void*)hCard);
  618. status = g_SCardApi->pfnSCardGetAttrib(hCard, dwAttrId, pbAttr, pcbAttrLen);
  619. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetAttrib } status: %s (0x%08" PRIX32 ")",
  620. SCardGetErrorString(status), status);
  621. return status;
  622. }
  623. static LONG WINAPI Inspect_SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr,
  624. DWORD cbAttrLen)
  625. {
  626. LONG status;
  627. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetAttrib { hCard: %p", (void*)hCard);
  628. status = g_SCardApi->pfnSCardSetAttrib(hCard, dwAttrId, pbAttr, cbAttrLen);
  629. WLog_Print(g_Log, WLOG_DEBUG, "SCardSetAttrib } status: %s (0x%08" PRIX32 ")",
  630. SCardGetErrorString(status), status);
  631. return status;
  632. }
  633. static LONG WINAPI Inspect_SCardUIDlgSelectCardA(LPOPENCARDNAMEA_EX pDlgStruc)
  634. {
  635. LONG status;
  636. WLog_Print(g_Log, WLOG_DEBUG, "SCardUIDlgSelectCardA {");
  637. status = g_SCardApi->pfnSCardUIDlgSelectCardA(pDlgStruc);
  638. WLog_Print(g_Log, WLOG_DEBUG, "SCardUIDlgSelectCardA } status: %s (0x%08" PRIX32 ")",
  639. SCardGetErrorString(status), status);
  640. return status;
  641. }
  642. static LONG WINAPI Inspect_SCardUIDlgSelectCardW(LPOPENCARDNAMEW_EX pDlgStruc)
  643. {
  644. LONG status;
  645. WLog_Print(g_Log, WLOG_DEBUG, "SCardUIDlgSelectCardW {");
  646. status = g_SCardApi->pfnSCardUIDlgSelectCardW(pDlgStruc);
  647. WLog_Print(g_Log, WLOG_DEBUG, "SCardUIDlgSelectCardW } status: %s (0x%08" PRIX32 ")",
  648. SCardGetErrorString(status), status);
  649. return status;
  650. }
  651. static LONG WINAPI Inspect_GetOpenCardNameA(LPOPENCARDNAMEA pDlgStruc)
  652. {
  653. LONG status;
  654. WLog_Print(g_Log, WLOG_DEBUG, "GetOpenCardNameA {");
  655. status = g_SCardApi->pfnGetOpenCardNameA(pDlgStruc);
  656. WLog_Print(g_Log, WLOG_DEBUG, "GetOpenCardNameA } status: %s (0x%08" PRIX32 ")",
  657. SCardGetErrorString(status), status);
  658. return status;
  659. }
  660. static LONG WINAPI Inspect_GetOpenCardNameW(LPOPENCARDNAMEW pDlgStruc)
  661. {
  662. LONG status;
  663. WLog_Print(g_Log, WLOG_DEBUG, "GetOpenCardNameW {");
  664. status = g_SCardApi->pfnGetOpenCardNameW(pDlgStruc);
  665. WLog_Print(g_Log, WLOG_DEBUG, "GetOpenCardNameW } status: %s (0x%08" PRIX32 ")",
  666. SCardGetErrorString(status), status);
  667. return status;
  668. }
  669. static LONG WINAPI Inspect_SCardDlgExtendedError(void)
  670. {
  671. LONG status;
  672. WLog_Print(g_Log, WLOG_DEBUG, "SCardDlgExtendedError {");
  673. status = g_SCardApi->pfnSCardDlgExtendedError();
  674. WLog_Print(g_Log, WLOG_DEBUG, "SCardDlgExtendedError } status: %s (0x%08" PRIX32 ")",
  675. SCardGetErrorString(status), status);
  676. return status;
  677. }
  678. static LONG WINAPI Inspect_SCardReadCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier,
  679. DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
  680. DWORD* DataLen)
  681. {
  682. LONG status;
  683. WLog_Print(g_Log, WLOG_DEBUG, "SCardReadCacheA { hContext: %p", (void*)hContext);
  684. status = g_SCardApi->pfnSCardReadCacheA(hContext, CardIdentifier, FreshnessCounter, LookupName,
  685. Data, DataLen);
  686. WLog_Print(g_Log, WLOG_DEBUG, "SCardReadCacheA } status: %s (0x%08" PRIX32 ")",
  687. SCardGetErrorString(status), status);
  688. return status;
  689. }
  690. static LONG WINAPI Inspect_SCardReadCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier,
  691. DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
  692. DWORD* DataLen)
  693. {
  694. LONG status;
  695. WLog_Print(g_Log, WLOG_DEBUG, "SCardReadCacheW { hContext: %p", (void*)hContext);
  696. status = g_SCardApi->pfnSCardReadCacheW(hContext, CardIdentifier, FreshnessCounter, LookupName,
  697. Data, DataLen);
  698. WLog_Print(g_Log, WLOG_DEBUG, "SCardReadCacheW } status: %s (0x%08" PRIX32 ")",
  699. SCardGetErrorString(status), status);
  700. return status;
  701. }
  702. static LONG WINAPI Inspect_SCardWriteCacheA(SCARDCONTEXT hContext, UUID* CardIdentifier,
  703. DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data,
  704. DWORD DataLen)
  705. {
  706. LONG status;
  707. WLog_Print(g_Log, WLOG_DEBUG, "SCardWriteCacheA { hContext: %p", (void*)hContext);
  708. status = g_SCardApi->pfnSCardWriteCacheA(hContext, CardIdentifier, FreshnessCounter, LookupName,
  709. Data, DataLen);
  710. WLog_Print(g_Log, WLOG_DEBUG, "SCardWriteCacheA } status: %s (0x%08" PRIX32 ")",
  711. SCardGetErrorString(status), status);
  712. return status;
  713. }
  714. static LONG WINAPI Inspect_SCardWriteCacheW(SCARDCONTEXT hContext, UUID* CardIdentifier,
  715. DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data,
  716. DWORD DataLen)
  717. {
  718. LONG status;
  719. WLog_Print(g_Log, WLOG_DEBUG, "SCardWriteCacheW { hContext: %p", (void*)hContext);
  720. status = g_SCardApi->pfnSCardWriteCacheW(hContext, CardIdentifier, FreshnessCounter, LookupName,
  721. Data, DataLen);
  722. WLog_Print(g_Log, WLOG_DEBUG, "SCardWriteCacheW } status: %s (0x%08" PRIX32 ")",
  723. SCardGetErrorString(status), status);
  724. return status;
  725. }
  726. static LONG WINAPI Inspect_SCardGetReaderIconA(SCARDCONTEXT hContext, LPCSTR szReaderName,
  727. LPBYTE pbIcon, LPDWORD pcbIcon)
  728. {
  729. LONG status;
  730. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderIconA { hContext: %p", (void*)hContext);
  731. status = g_SCardApi->pfnSCardGetReaderIconA(hContext, szReaderName, pbIcon, pcbIcon);
  732. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderIconA } status: %s (0x%08" PRIX32 ")",
  733. SCardGetErrorString(status), status);
  734. return status;
  735. }
  736. static LONG WINAPI Inspect_SCardGetReaderIconW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
  737. LPBYTE pbIcon, LPDWORD pcbIcon)
  738. {
  739. LONG status;
  740. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderIconW { hContext: %p", (void*)hContext);
  741. status = g_SCardApi->pfnSCardGetReaderIconW(hContext, szReaderName, pbIcon, pcbIcon);
  742. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderIconW } status: %s (0x%08" PRIX32 ")",
  743. SCardGetErrorString(status), status);
  744. return status;
  745. }
  746. static LONG WINAPI Inspect_SCardGetDeviceTypeIdA(SCARDCONTEXT hContext, LPCSTR szReaderName,
  747. LPDWORD pdwDeviceTypeId)
  748. {
  749. LONG status;
  750. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetDeviceTypeIdA { hContext: %p", (void*)hContext);
  751. status = g_SCardApi->pfnSCardGetDeviceTypeIdA(hContext, szReaderName, pdwDeviceTypeId);
  752. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetDeviceTypeIdA } status: %s (0x%08" PRIX32 ")",
  753. SCardGetErrorString(status), status);
  754. return status;
  755. }
  756. static LONG WINAPI Inspect_SCardGetDeviceTypeIdW(SCARDCONTEXT hContext, LPCWSTR szReaderName,
  757. LPDWORD pdwDeviceTypeId)
  758. {
  759. LONG status;
  760. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetDeviceTypeIdW { hContext: %p", (void*)hContext);
  761. status = g_SCardApi->pfnSCardGetDeviceTypeIdW(hContext, szReaderName, pdwDeviceTypeId);
  762. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetDeviceTypeIdW } status: %s (0x%08" PRIX32 ")",
  763. SCardGetErrorString(status), status);
  764. return status;
  765. }
  766. static LONG WINAPI Inspect_SCardGetReaderDeviceInstanceIdA(SCARDCONTEXT hContext,
  767. LPCSTR szReaderName,
  768. LPSTR szDeviceInstanceId,
  769. LPDWORD pcchDeviceInstanceId)
  770. {
  771. LONG status;
  772. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderDeviceInstanceIdA { hContext: %p",
  773. (void*)hContext);
  774. status = g_SCardApi->pfnSCardGetReaderDeviceInstanceIdA(
  775. hContext, szReaderName, szDeviceInstanceId, pcchDeviceInstanceId);
  776. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderDeviceInstanceIdA } status: %s (0x%08" PRIX32 ")",
  777. SCardGetErrorString(status), status);
  778. return status;
  779. }
  780. static LONG WINAPI Inspect_SCardGetReaderDeviceInstanceIdW(SCARDCONTEXT hContext,
  781. LPCWSTR szReaderName,
  782. LPWSTR szDeviceInstanceId,
  783. LPDWORD pcchDeviceInstanceId)
  784. {
  785. LONG status;
  786. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderDeviceInstanceIdW { hContext: %p",
  787. (void*)hContext);
  788. status = g_SCardApi->pfnSCardGetReaderDeviceInstanceIdW(
  789. hContext, szReaderName, szDeviceInstanceId, pcchDeviceInstanceId);
  790. WLog_Print(g_Log, WLOG_DEBUG, "SCardGetReaderDeviceInstanceIdW } status: %s (0x%08" PRIX32 ")",
  791. SCardGetErrorString(status), status);
  792. return status;
  793. }
  794. static LONG WINAPI Inspect_SCardListReadersWithDeviceInstanceIdA(SCARDCONTEXT hContext,
  795. LPCSTR szDeviceInstanceId,
  796. LPSTR mszReaders,
  797. LPDWORD pcchReaders)
  798. {
  799. LONG status;
  800. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersWithDeviceInstanceIdA { hContext: %p",
  801. (void*)hContext);
  802. status = g_SCardApi->pfnSCardListReadersWithDeviceInstanceIdA(hContext, szDeviceInstanceId,
  803. mszReaders, pcchReaders);
  804. WLog_Print(g_Log, WLOG_DEBUG,
  805. "SCardListReadersWithDeviceInstanceIdA } status: %s (0x%08" PRIX32 ")",
  806. SCardGetErrorString(status), status);
  807. return status;
  808. }
  809. static LONG WINAPI Inspect_SCardListReadersWithDeviceInstanceIdW(SCARDCONTEXT hContext,
  810. LPCWSTR szDeviceInstanceId,
  811. LPWSTR mszReaders,
  812. LPDWORD pcchReaders)
  813. {
  814. LONG status;
  815. WLog_Print(g_Log, WLOG_DEBUG, "SCardListReadersWithDeviceInstanceIdW { hContext: %p",
  816. (void*)hContext);
  817. status = g_SCardApi->pfnSCardListReadersWithDeviceInstanceIdW(hContext, szDeviceInstanceId,
  818. mszReaders, pcchReaders);
  819. WLog_Print(g_Log, WLOG_DEBUG,
  820. "SCardListReadersWithDeviceInstanceIdW } status: %s (0x%08" PRIX32 ")",
  821. SCardGetErrorString(status), status);
  822. return status;
  823. }
  824. static LONG WINAPI Inspect_SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent)
  825. {
  826. LONG status;
  827. WLog_Print(g_Log, WLOG_DEBUG, "SCardAudit { hContext: %p", (void*)hContext);
  828. status = g_SCardApi->pfnSCardAudit(hContext, dwEvent);
  829. WLog_Print(g_Log, WLOG_DEBUG, "SCardAudit } status: %s (0x%08" PRIX32 ")",
  830. SCardGetErrorString(status), status);
  831. return status;
  832. }
  833. /**
  834. * Extended API
  835. */
  836. SCardApiFunctionTable Inspect_SCardApiFunctionTable = {
  837. 0, /* dwVersion */
  838. 0, /* dwFlags */
  839. Inspect_SCardEstablishContext, /* SCardEstablishContext */
  840. Inspect_SCardReleaseContext, /* SCardReleaseContext */
  841. Inspect_SCardIsValidContext, /* SCardIsValidContext */
  842. Inspect_SCardListReaderGroupsA, /* SCardListReaderGroupsA */
  843. Inspect_SCardListReaderGroupsW, /* SCardListReaderGroupsW */
  844. Inspect_SCardListReadersA, /* SCardListReadersA */
  845. Inspect_SCardListReadersW, /* SCardListReadersW */
  846. Inspect_SCardListCardsA, /* SCardListCardsA */
  847. Inspect_SCardListCardsW, /* SCardListCardsW */
  848. Inspect_SCardListInterfacesA, /* SCardListInterfacesA */
  849. Inspect_SCardListInterfacesW, /* SCardListInterfacesW */
  850. Inspect_SCardGetProviderIdA, /* SCardGetProviderIdA */
  851. Inspect_SCardGetProviderIdW, /* SCardGetProviderIdW */
  852. Inspect_SCardGetCardTypeProviderNameA, /* SCardGetCardTypeProviderNameA */
  853. Inspect_SCardGetCardTypeProviderNameW, /* SCardGetCardTypeProviderNameW */
  854. Inspect_SCardIntroduceReaderGroupA, /* SCardIntroduceReaderGroupA */
  855. Inspect_SCardIntroduceReaderGroupW, /* SCardIntroduceReaderGroupW */
  856. Inspect_SCardForgetReaderGroupA, /* SCardForgetReaderGroupA */
  857. Inspect_SCardForgetReaderGroupW, /* SCardForgetReaderGroupW */
  858. Inspect_SCardIntroduceReaderA, /* SCardIntroduceReaderA */
  859. Inspect_SCardIntroduceReaderW, /* SCardIntroduceReaderW */
  860. Inspect_SCardForgetReaderA, /* SCardForgetReaderA */
  861. Inspect_SCardForgetReaderW, /* SCardForgetReaderW */
  862. Inspect_SCardAddReaderToGroupA, /* SCardAddReaderToGroupA */
  863. Inspect_SCardAddReaderToGroupW, /* SCardAddReaderToGroupW */
  864. Inspect_SCardRemoveReaderFromGroupA, /* SCardRemoveReaderFromGroupA */
  865. Inspect_SCardRemoveReaderFromGroupW, /* SCardRemoveReaderFromGroupW */
  866. Inspect_SCardIntroduceCardTypeA, /* SCardIntroduceCardTypeA */
  867. Inspect_SCardIntroduceCardTypeW, /* SCardIntroduceCardTypeW */
  868. Inspect_SCardSetCardTypeProviderNameA, /* SCardSetCardTypeProviderNameA */
  869. Inspect_SCardSetCardTypeProviderNameW, /* SCardSetCardTypeProviderNameW */
  870. Inspect_SCardForgetCardTypeA, /* SCardForgetCardTypeA */
  871. Inspect_SCardForgetCardTypeW, /* SCardForgetCardTypeW */
  872. Inspect_SCardFreeMemory, /* SCardFreeMemory */
  873. Inspect_SCardAccessStartedEvent, /* SCardAccessStartedEvent */
  874. Inspect_SCardReleaseStartedEvent, /* SCardReleaseStartedEvent */
  875. Inspect_SCardLocateCardsA, /* SCardLocateCardsA */
  876. Inspect_SCardLocateCardsW, /* SCardLocateCardsW */
  877. Inspect_SCardLocateCardsByATRA, /* SCardLocateCardsByATRA */
  878. Inspect_SCardLocateCardsByATRW, /* SCardLocateCardsByATRW */
  879. Inspect_SCardGetStatusChangeA, /* SCardGetStatusChangeA */
  880. Inspect_SCardGetStatusChangeW, /* SCardGetStatusChangeW */
  881. Inspect_SCardCancel, /* SCardCancel */
  882. Inspect_SCardConnectA, /* SCardConnectA */
  883. Inspect_SCardConnectW, /* SCardConnectW */
  884. Inspect_SCardReconnect, /* SCardReconnect */
  885. Inspect_SCardDisconnect, /* SCardDisconnect */
  886. Inspect_SCardBeginTransaction, /* SCardBeginTransaction */
  887. Inspect_SCardEndTransaction, /* SCardEndTransaction */
  888. Inspect_SCardCancelTransaction, /* SCardCancelTransaction */
  889. Inspect_SCardState, /* SCardState */
  890. Inspect_SCardStatusA, /* SCardStatusA */
  891. Inspect_SCardStatusW, /* SCardStatusW */
  892. Inspect_SCardTransmit, /* SCardTransmit */
  893. Inspect_SCardGetTransmitCount, /* SCardGetTransmitCount */
  894. Inspect_SCardControl, /* SCardControl */
  895. Inspect_SCardGetAttrib, /* SCardGetAttrib */
  896. Inspect_SCardSetAttrib, /* SCardSetAttrib */
  897. Inspect_SCardUIDlgSelectCardA, /* SCardUIDlgSelectCardA */
  898. Inspect_SCardUIDlgSelectCardW, /* SCardUIDlgSelectCardW */
  899. Inspect_GetOpenCardNameA, /* GetOpenCardNameA */
  900. Inspect_GetOpenCardNameW, /* GetOpenCardNameW */
  901. Inspect_SCardDlgExtendedError, /* SCardDlgExtendedError */
  902. Inspect_SCardReadCacheA, /* SCardReadCacheA */
  903. Inspect_SCardReadCacheW, /* SCardReadCacheW */
  904. Inspect_SCardWriteCacheA, /* SCardWriteCacheA */
  905. Inspect_SCardWriteCacheW, /* SCardWriteCacheW */
  906. Inspect_SCardGetReaderIconA, /* SCardGetReaderIconA */
  907. Inspect_SCardGetReaderIconW, /* SCardGetReaderIconW */
  908. Inspect_SCardGetDeviceTypeIdA, /* SCardGetDeviceTypeIdA */
  909. Inspect_SCardGetDeviceTypeIdW, /* SCardGetDeviceTypeIdW */
  910. Inspect_SCardGetReaderDeviceInstanceIdA, /* SCardGetReaderDeviceInstanceIdA */
  911. Inspect_SCardGetReaderDeviceInstanceIdW, /* SCardGetReaderDeviceInstanceIdW */
  912. Inspect_SCardListReadersWithDeviceInstanceIdA, /* SCardListReadersWithDeviceInstanceIdA */
  913. Inspect_SCardListReadersWithDeviceInstanceIdW, /* SCardListReadersWithDeviceInstanceIdW */
  914. Inspect_SCardAudit /* SCardAudit */
  915. };
  916. #ifndef _WIN32
  917. #define SMARTCARD_INSPECT_FILEPATH "/tmp"
  918. #else
  919. #define SMARTCARD_INSPECT_FILEPATH "C:\\Windows\\Temp"
  920. #endif
  921. static void Inspect_InitLog(void)
  922. {
  923. wLogLayout* layout;
  924. wLogAppender* appender;
  925. const char* filepath = SMARTCARD_INSPECT_FILEPATH;
  926. if (g_Log)
  927. return;
  928. if (!PathFileExistsA(filepath))
  929. if (!PathMakePathA(filepath, NULL))
  930. return;
  931. if (!(g_Log = WLog_Get("WinSCard")))
  932. return;
  933. WLog_SetLogLevel(g_Log, WLOG_DEBUG);
  934. WLog_SetLogAppenderType(g_Log, WLOG_APPENDER_FILE);
  935. appender = WLog_GetLogAppender(g_Log);
  936. if (!appender)
  937. return;
  938. WLog_ConfigureAppender(appender, "outputfilename", "WinSCard.txt");
  939. WLog_ConfigureAppender(appender, "outputfilepath", (void*)filepath);
  940. layout = WLog_GetLogLayout(g_Log);
  941. WLog_Layout_SetPrefixFormat(g_Log, layout, "[%mn] ");
  942. WLog_OpenAppender(g_Log);
  943. }
  944. PSCardApiFunctionTable Inspect_RegisterSCardApi(PSCardApiFunctionTable pSCardApi)
  945. {
  946. g_SCardApi = pSCardApi;
  947. Inspect_InitLog();
  948. return &Inspect_SCardApiFunctionTable;
  949. }