21#ifndef WINPR_SMARTCARD_EMULATE_PRIVATE_H
22#define WINPR_SMARTCARD_EMULATE_PRIVATE_H
24#include <winpr/platform.h>
25#include <winpr/smartcard.h>
27#include <freerdp/api.h>
28#include <freerdp/settings.h>
35 typedef struct smartcard_emulation_context SmartcardEmulationContext;
37 FREERDP_API
void Emulate_Free(SmartcardEmulationContext* context);
39 WINPR_ATTR_MALLOC(Emulate_Free, 1)
40 FREERDP_API SmartcardEmulationContext* Emulate_New(const rdpSettings* settings);
43 FREERDP_API BOOL Emulate_IsConfigured(SmartcardEmulationContext* context);
46 FREERDP_API LONG WINAPI Emulate_SCardEstablishContext(SmartcardEmulationContext* smartcard,
47 DWORD dwScope, LPCVOID pvReserved1,
49 LPSCARDCONTEXT phContext);
52 FREERDP_API LONG WINAPI Emulate_SCardReleaseContext(SmartcardEmulationContext* smartcard,
53 SCARDCONTEXT hContext);
56 FREERDP_API LONG WINAPI Emulate_SCardIsValidContext(SmartcardEmulationContext* smartcard,
57 SCARDCONTEXT hContext);
60 FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsA(SmartcardEmulationContext* smartcard,
61 SCARDCONTEXT hContext, LPSTR mszGroups,
65 FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsW(SmartcardEmulationContext* smartcard,
66 SCARDCONTEXT hContext, LPWSTR mszGroups,
70 FREERDP_API LONG WINAPI Emulate_SCardListReadersA(SmartcardEmulationContext* smartcard,
71 SCARDCONTEXT hContext, LPCSTR mszGroups,
72 LPSTR mszReaders, LPDWORD pcchReaders);
75 FREERDP_API LONG WINAPI Emulate_SCardListReadersW(SmartcardEmulationContext* smartcard,
76 SCARDCONTEXT hContext, LPCWSTR mszGroups,
77 LPWSTR mszReaders, LPDWORD pcchReaders);
80 FREERDP_API LONG WINAPI Emulate_SCardListCardsA(SmartcardEmulationContext* smartcard,
81 SCARDCONTEXT hContext, LPCBYTE pbAtr,
82 LPCGUID rgquidInterfaces,
83 DWORD cguidInterfaceCount, CHAR* mszCards,
87 FREERDP_API LONG WINAPI Emulate_SCardListCardsW(SmartcardEmulationContext* smartcard,
88 SCARDCONTEXT hContext, LPCBYTE pbAtr,
89 LPCGUID rgquidInterfaces,
90 DWORD cguidInterfaceCount, WCHAR* mszCards,
94 FREERDP_API LONG WINAPI Emulate_SCardListInterfacesA(SmartcardEmulationContext* smartcard,
95 SCARDCONTEXT hContext, LPCSTR szCard,
96 LPGUID pguidInterfaces,
97 LPDWORD pcguidInterfaces);
100 FREERDP_API LONG WINAPI Emulate_SCardListInterfacesW(SmartcardEmulationContext* smartcard,
101 SCARDCONTEXT hContext, LPCWSTR szCard,
102 LPGUID pguidInterfaces,
103 LPDWORD pcguidInterfaces);
106 FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdA(SmartcardEmulationContext* smartcard,
107 SCARDCONTEXT hContext, LPCSTR szCard,
108 LPGUID pguidProviderId);
111 FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdW(SmartcardEmulationContext* smartcard,
112 SCARDCONTEXT hContext, LPCWSTR szCard,
113 LPGUID pguidProviderId);
116 FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameA(
117 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
118 DWORD dwProviderId, CHAR* szProvider, LPDWORD pcchProvider);
121 FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameW(
122 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
123 DWORD dwProviderId, WCHAR* szProvider, LPDWORD pcchProvider);
126 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupA(SmartcardEmulationContext* smartcard,
127 SCARDCONTEXT hContext,
131 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupW(SmartcardEmulationContext* smartcard,
132 SCARDCONTEXT hContext,
133 LPCWSTR szGroupName);
136 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupA(SmartcardEmulationContext* smartcard,
137 SCARDCONTEXT hContext,
141 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupW(SmartcardEmulationContext* smartcard,
142 SCARDCONTEXT hContext,
143 LPCWSTR szGroupName);
146 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderA(SmartcardEmulationContext* smartcard,
147 SCARDCONTEXT hContext,
148 LPCSTR szReaderName, LPCSTR szDeviceName);
151 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderW(SmartcardEmulationContext* smartcard,
152 SCARDCONTEXT hContext,
153 LPCWSTR szReaderName,
154 LPCWSTR szDeviceName);
157 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderA(SmartcardEmulationContext* smartcard,
158 SCARDCONTEXT hContext, LPCSTR szReaderName);
161 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderW(SmartcardEmulationContext* smartcard,
162 SCARDCONTEXT hContext, LPCWSTR szReaderName);
165 FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupA(SmartcardEmulationContext* smartcard,
166 SCARDCONTEXT hContext,
167 LPCSTR szReaderName, LPCSTR szGroupName);
170 FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupW(SmartcardEmulationContext* smartcard,
171 SCARDCONTEXT hContext,
172 LPCWSTR szReaderName,
173 LPCWSTR szGroupName);
176 FREERDP_API LONG WINAPI
177 Emulate_SCardRemoveReaderFromGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext,
178 LPCSTR szReaderName, LPCSTR szGroupName);
181 FREERDP_API LONG WINAPI
182 Emulate_SCardRemoveReaderFromGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext,
183 LPCWSTR szReaderName, LPCWSTR szGroupName);
186 FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeA(
187 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
188 LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
189 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
192 FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeW(
193 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
194 LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
195 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
198 FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameA(
199 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
200 DWORD dwProviderId, LPCSTR szProvider);
203 FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameW(
204 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
205 DWORD dwProviderId, LPCWSTR szProvider);
208 FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeA(SmartcardEmulationContext* smartcard,
209 SCARDCONTEXT hContext, LPCSTR szCardName);
212 FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeW(SmartcardEmulationContext* smartcard,
213 SCARDCONTEXT hContext, LPCWSTR szCardName);
215 FREERDP_API LONG WINAPI Emulate_SCardFreeMemory(SmartcardEmulationContext* smartcard,
216 SCARDCONTEXT hContext, LPVOID pvMem);
219 FREERDP_API HANDLE WINAPI Emulate_SCardAccessStartedEvent(SmartcardEmulationContext* smartcard);
221 FREERDP_API
void WINAPI Emulate_SCardReleaseStartedEvent(SmartcardEmulationContext* smartcard);
224 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsA(SmartcardEmulationContext* smartcard,
225 SCARDCONTEXT hContext, LPCSTR mszCards,
230 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsW(SmartcardEmulationContext* smartcard,
231 SCARDCONTEXT hContext, LPCWSTR mszCards,
236 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRA(SmartcardEmulationContext* smartcard,
237 SCARDCONTEXT hContext,
243 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRW(SmartcardEmulationContext* smartcard,
244 SCARDCONTEXT hContext,
250 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeA(SmartcardEmulationContext* smartcard,
251 SCARDCONTEXT hContext, DWORD dwTimeout,
256 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeW(SmartcardEmulationContext* smartcard,
257 SCARDCONTEXT hContext, DWORD dwTimeout,
261 FREERDP_API LONG WINAPI Emulate_SCardCancel(SmartcardEmulationContext* smartcard,
262 SCARDCONTEXT hContext);
265 FREERDP_API LONG WINAPI Emulate_SCardConnectA(SmartcardEmulationContext* smartcard,
266 SCARDCONTEXT hContext, LPCSTR szReader,
267 DWORD dwShareMode, DWORD dwPreferredProtocols,
268 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
271 FREERDP_API LONG WINAPI Emulate_SCardConnectW(SmartcardEmulationContext* smartcard,
272 SCARDCONTEXT hContext, LPCWSTR szReader,
273 DWORD dwShareMode, DWORD dwPreferredProtocols,
274 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
277 FREERDP_API LONG WINAPI Emulate_SCardReconnect(SmartcardEmulationContext* smartcard,
278 SCARDHANDLE hCard, DWORD dwShareMode,
279 DWORD dwPreferredProtocols,
280 DWORD dwInitialization,
281 LPDWORD pdwActiveProtocol);
284 FREERDP_API LONG WINAPI Emulate_SCardDisconnect(SmartcardEmulationContext* smartcard,
285 SCARDHANDLE hCard, DWORD dwDisposition);
288 FREERDP_API LONG WINAPI Emulate_SCardBeginTransaction(SmartcardEmulationContext* smartcard,
292 FREERDP_API LONG WINAPI Emulate_SCardEndTransaction(SmartcardEmulationContext* smartcard,
293 SCARDHANDLE hCard, DWORD dwDisposition);
296 FREERDP_API LONG WINAPI Emulate_SCardCancelTransaction(SmartcardEmulationContext* smartcard,
300 FREERDP_API LONG WINAPI Emulate_SCardState(SmartcardEmulationContext* smartcard,
301 SCARDHANDLE hCard, LPDWORD pdwState,
302 LPDWORD pdwProtocol, LPBYTE pbAtr,
306 FREERDP_API LONG WINAPI Emulate_SCardStatusA(SmartcardEmulationContext* smartcard,
307 SCARDHANDLE hCard, LPSTR mszReaderNames,
308 LPDWORD pcchReaderLen, LPDWORD pdwState,
309 LPDWORD pdwProtocol, LPBYTE pbAtr,
313 FREERDP_API LONG WINAPI Emulate_SCardStatusW(SmartcardEmulationContext* smartcard,
314 SCARDHANDLE hCard, LPWSTR mszReaderNames,
315 LPDWORD pcchReaderLen, LPDWORD pdwState,
316 LPDWORD pdwProtocol, LPBYTE pbAtr,
320 FREERDP_API LONG WINAPI Emulate_SCardTransmit(SmartcardEmulationContext* smartcard,
322 LPCBYTE pbSendBuffer, DWORD cbSendLength,
324 LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
327 FREERDP_API LONG WINAPI Emulate_SCardGetTransmitCount(SmartcardEmulationContext* smartcard,
329 LPDWORD pcTransmitCount);
332 FREERDP_API LONG WINAPI Emulate_SCardControl(SmartcardEmulationContext* smartcard,
333 SCARDHANDLE hCard, DWORD dwControlCode,
334 LPCVOID lpInBuffer, DWORD cbInBufferSize,
335 LPVOID lpOutBuffer, DWORD cbOutBufferSize,
336 LPDWORD lpBytesReturned);
339 FREERDP_API LONG WINAPI Emulate_SCardGetAttrib(SmartcardEmulationContext* smartcard,
340 SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
344 FREERDP_API LONG WINAPI Emulate_SCardSetAttrib(SmartcardEmulationContext* smartcard,
345 SCARDHANDLE hCard, DWORD dwAttrId,
346 LPCBYTE pbAttr, DWORD cbAttrLen);
349 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardA(SmartcardEmulationContext* smartcard,
350 LPOPENCARDNAMEA_EX pDlgStruc);
353 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardW(SmartcardEmulationContext* smartcard,
354 LPOPENCARDNAMEW_EX pDlgStruc);
357 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameA(SmartcardEmulationContext* smartcard,
361 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameW(SmartcardEmulationContext* smartcard,
365 FREERDP_API LONG WINAPI Emulate_SCardDlgExtendedError(SmartcardEmulationContext* smartcard);
368 FREERDP_API LONG WINAPI Emulate_SCardReadCacheA(SmartcardEmulationContext* smartcard,
369 SCARDCONTEXT hContext,
UUID* CardIdentifier,
370 DWORD FreshnessCounter, LPSTR LookupName,
371 PBYTE Data, DWORD* DataLen);
374 FREERDP_API LONG WINAPI Emulate_SCardReadCacheW(SmartcardEmulationContext* smartcard,
375 SCARDCONTEXT hContext,
UUID* CardIdentifier,
376 DWORD FreshnessCounter, LPWSTR LookupName,
377 PBYTE Data, DWORD* DataLen);
380 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheA(SmartcardEmulationContext* smartcard,
381 SCARDCONTEXT hContext,
UUID* CardIdentifier,
382 DWORD FreshnessCounter, LPSTR LookupName,
383 PBYTE Data, DWORD DataLen);
386 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheW(SmartcardEmulationContext* smartcard,
387 SCARDCONTEXT hContext,
UUID* CardIdentifier,
388 DWORD FreshnessCounter, LPWSTR LookupName,
389 PBYTE Data, DWORD DataLen);
392 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconA(SmartcardEmulationContext* smartcard,
393 SCARDCONTEXT hContext, LPCSTR szReaderName,
394 LPBYTE pbIcon, LPDWORD pcbIcon);
397 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconW(SmartcardEmulationContext* smartcard,
398 SCARDCONTEXT hContext, LPCWSTR szReaderName,
399 LPBYTE pbIcon, LPDWORD pcbIcon);
402 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdA(SmartcardEmulationContext* smartcard,
403 SCARDCONTEXT hContext,
405 LPDWORD pdwDeviceTypeId);
408 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdW(SmartcardEmulationContext* smartcard,
409 SCARDCONTEXT hContext,
410 LPCWSTR szReaderName,
411 LPDWORD pdwDeviceTypeId);
414 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA(
415 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName,
416 LPSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
419 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW(
420 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName,
421 LPWSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
424 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA(
425 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szDeviceInstanceId,
426 LPSTR mszReaders, LPDWORD pcchReaders);
429 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW(
430 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szDeviceInstanceId,
431 LPWSTR mszReaders, LPDWORD pcchReaders);
434 FREERDP_API LONG WINAPI Emulate_SCardAudit(SmartcardEmulationContext* smartcard,
435 SCARDCONTEXT hContext, DWORD dwEvent);