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)
41 FREERDP_API SmartcardEmulationContext* Emulate_New(const rdpSettings* settings);
44 FREERDP_API BOOL Emulate_IsConfigured(SmartcardEmulationContext* context);
47 FREERDP_API LONG WINAPI Emulate_SCardEstablishContext(SmartcardEmulationContext* smartcard,
48 DWORD dwScope, LPCVOID pvReserved1,
50 LPSCARDCONTEXT phContext);
53 FREERDP_API LONG WINAPI Emulate_SCardReleaseContext(SmartcardEmulationContext* smartcard,
54 SCARDCONTEXT hContext);
57 FREERDP_API LONG WINAPI Emulate_SCardIsValidContext(SmartcardEmulationContext* smartcard,
58 SCARDCONTEXT hContext);
61 FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsA(SmartcardEmulationContext* smartcard,
62 SCARDCONTEXT hContext, LPSTR mszGroups,
66 FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsW(SmartcardEmulationContext* smartcard,
67 SCARDCONTEXT hContext, LPWSTR mszGroups,
71 FREERDP_API LONG WINAPI Emulate_SCardListReadersA(SmartcardEmulationContext* smartcard,
72 SCARDCONTEXT hContext, LPCSTR mszGroups,
73 LPSTR mszReaders, LPDWORD pcchReaders);
76 FREERDP_API LONG WINAPI Emulate_SCardListReadersW(SmartcardEmulationContext* smartcard,
77 SCARDCONTEXT hContext, LPCWSTR mszGroups,
78 LPWSTR mszReaders, LPDWORD pcchReaders);
81 FREERDP_API LONG WINAPI Emulate_SCardListCardsA(SmartcardEmulationContext* smartcard,
82 SCARDCONTEXT hContext, LPCBYTE pbAtr,
83 LPCGUID rgquidInterfaces,
84 DWORD cguidInterfaceCount, CHAR* mszCards,
88 FREERDP_API LONG WINAPI Emulate_SCardListCardsW(SmartcardEmulationContext* smartcard,
89 SCARDCONTEXT hContext, LPCBYTE pbAtr,
90 LPCGUID rgquidInterfaces,
91 DWORD cguidInterfaceCount, WCHAR* mszCards,
95 FREERDP_API LONG WINAPI Emulate_SCardListInterfacesA(SmartcardEmulationContext* smartcard,
96 SCARDCONTEXT hContext, LPCSTR szCard,
97 LPGUID pguidInterfaces,
98 LPDWORD pcguidInterfaces);
101 FREERDP_API LONG WINAPI Emulate_SCardListInterfacesW(SmartcardEmulationContext* smartcard,
102 SCARDCONTEXT hContext, LPCWSTR szCard,
103 LPGUID pguidInterfaces,
104 LPDWORD pcguidInterfaces);
107 FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdA(SmartcardEmulationContext* smartcard,
108 SCARDCONTEXT hContext, LPCSTR szCard,
109 LPGUID pguidProviderId);
112 FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdW(SmartcardEmulationContext* smartcard,
113 SCARDCONTEXT hContext, LPCWSTR szCard,
114 LPGUID pguidProviderId);
117 FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameA(
118 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
119 DWORD dwProviderId, CHAR* szProvider, LPDWORD pcchProvider);
122 FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameW(
123 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
124 DWORD dwProviderId, WCHAR* szProvider, LPDWORD pcchProvider);
127 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupA(SmartcardEmulationContext* smartcard,
128 SCARDCONTEXT hContext,
132 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupW(SmartcardEmulationContext* smartcard,
133 SCARDCONTEXT hContext,
134 LPCWSTR szGroupName);
137 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupA(SmartcardEmulationContext* smartcard,
138 SCARDCONTEXT hContext,
142 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupW(SmartcardEmulationContext* smartcard,
143 SCARDCONTEXT hContext,
144 LPCWSTR szGroupName);
147 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderA(SmartcardEmulationContext* smartcard,
148 SCARDCONTEXT hContext,
149 LPCSTR szReaderName, LPCSTR szDeviceName);
152 FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderW(SmartcardEmulationContext* smartcard,
153 SCARDCONTEXT hContext,
154 LPCWSTR szReaderName,
155 LPCWSTR szDeviceName);
158 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderA(SmartcardEmulationContext* smartcard,
159 SCARDCONTEXT hContext, LPCSTR szReaderName);
162 FREERDP_API LONG WINAPI Emulate_SCardForgetReaderW(SmartcardEmulationContext* smartcard,
163 SCARDCONTEXT hContext, LPCWSTR szReaderName);
166 FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupA(SmartcardEmulationContext* smartcard,
167 SCARDCONTEXT hContext,
168 LPCSTR szReaderName, LPCSTR szGroupName);
171 FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupW(SmartcardEmulationContext* smartcard,
172 SCARDCONTEXT hContext,
173 LPCWSTR szReaderName,
174 LPCWSTR szGroupName);
177 FREERDP_API LONG WINAPI
178 Emulate_SCardRemoveReaderFromGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext,
179 LPCSTR szReaderName, LPCSTR szGroupName);
182 FREERDP_API LONG WINAPI
183 Emulate_SCardRemoveReaderFromGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext,
184 LPCWSTR szReaderName, LPCWSTR szGroupName);
187 FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeA(
188 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
189 LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
190 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
193 FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeW(
194 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
195 LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount,
196 LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen);
199 FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameA(
200 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName,
201 DWORD dwProviderId, LPCSTR szProvider);
204 FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameW(
205 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName,
206 DWORD dwProviderId, LPCWSTR szProvider);
209 FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeA(SmartcardEmulationContext* smartcard,
210 SCARDCONTEXT hContext, LPCSTR szCardName);
213 FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeW(SmartcardEmulationContext* smartcard,
214 SCARDCONTEXT hContext, LPCWSTR szCardName);
217 FREERDP_API LONG WINAPI Emulate_SCardFreeMemory(SmartcardEmulationContext* smartcard,
218 SCARDCONTEXT hContext, LPVOID pvMem);
221 FREERDP_API HANDLE WINAPI Emulate_SCardAccessStartedEvent(SmartcardEmulationContext* smartcard);
223 FREERDP_API
void WINAPI Emulate_SCardReleaseStartedEvent(SmartcardEmulationContext* smartcard);
226 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsA(SmartcardEmulationContext* smartcard,
227 SCARDCONTEXT hContext, LPCSTR mszCards,
232 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsW(SmartcardEmulationContext* smartcard,
233 SCARDCONTEXT hContext, LPCWSTR mszCards,
238 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRA(SmartcardEmulationContext* smartcard,
239 SCARDCONTEXT hContext,
245 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRW(SmartcardEmulationContext* smartcard,
246 SCARDCONTEXT hContext,
252 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeA(SmartcardEmulationContext* smartcard,
253 SCARDCONTEXT hContext, DWORD dwTimeout,
258 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeW(SmartcardEmulationContext* smartcard,
259 SCARDCONTEXT hContext, DWORD dwTimeout,
264 FREERDP_API LONG WINAPI Emulate_SCardCancel(SmartcardEmulationContext* smartcard,
265 SCARDCONTEXT hContext);
268 FREERDP_API LONG WINAPI Emulate_SCardConnectA(SmartcardEmulationContext* smartcard,
269 SCARDCONTEXT hContext, LPCSTR szReader,
270 DWORD dwShareMode, DWORD dwPreferredProtocols,
271 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
274 FREERDP_API LONG WINAPI Emulate_SCardConnectW(SmartcardEmulationContext* smartcard,
275 SCARDCONTEXT hContext, LPCWSTR szReader,
276 DWORD dwShareMode, DWORD dwPreferredProtocols,
277 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
280 FREERDP_API LONG WINAPI Emulate_SCardReconnect(SmartcardEmulationContext* smartcard,
281 SCARDHANDLE hCard, DWORD dwShareMode,
282 DWORD dwPreferredProtocols,
283 DWORD dwInitialization,
284 LPDWORD pdwActiveProtocol);
287 FREERDP_API LONG WINAPI Emulate_SCardDisconnect(SmartcardEmulationContext* smartcard,
288 SCARDHANDLE hCard, DWORD dwDisposition);
291 FREERDP_API LONG WINAPI Emulate_SCardBeginTransaction(SmartcardEmulationContext* smartcard,
295 FREERDP_API LONG WINAPI Emulate_SCardEndTransaction(SmartcardEmulationContext* smartcard,
296 SCARDHANDLE hCard, DWORD dwDisposition);
299 FREERDP_API LONG WINAPI Emulate_SCardCancelTransaction(SmartcardEmulationContext* smartcard,
303 FREERDP_API LONG WINAPI Emulate_SCardState(SmartcardEmulationContext* smartcard,
304 SCARDHANDLE hCard, LPDWORD pdwState,
305 LPDWORD pdwProtocol, LPBYTE pbAtr,
309 FREERDP_API LONG WINAPI Emulate_SCardStatusA(SmartcardEmulationContext* smartcard,
310 SCARDHANDLE hCard, LPSTR mszReaderNames,
311 LPDWORD pcchReaderLen, LPDWORD pdwState,
312 LPDWORD pdwProtocol, LPBYTE pbAtr,
316 FREERDP_API LONG WINAPI Emulate_SCardStatusW(SmartcardEmulationContext* smartcard,
317 SCARDHANDLE hCard, LPWSTR mszReaderNames,
318 LPDWORD pcchReaderLen, LPDWORD pdwState,
319 LPDWORD pdwProtocol, LPBYTE pbAtr,
323 FREERDP_API LONG WINAPI Emulate_SCardTransmit(SmartcardEmulationContext* smartcard,
325 LPCBYTE pbSendBuffer, DWORD cbSendLength,
327 LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
330 FREERDP_API LONG WINAPI Emulate_SCardGetTransmitCount(SmartcardEmulationContext* smartcard,
332 LPDWORD pcTransmitCount);
335 FREERDP_API LONG WINAPI Emulate_SCardControl(SmartcardEmulationContext* smartcard,
336 SCARDHANDLE hCard, DWORD dwControlCode,
337 LPCVOID lpInBuffer, DWORD cbInBufferSize,
338 LPVOID lpOutBuffer, DWORD cbOutBufferSize,
339 LPDWORD lpBytesReturned);
342 FREERDP_API LONG WINAPI Emulate_SCardGetAttrib(SmartcardEmulationContext* smartcard,
343 SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
347 FREERDP_API LONG WINAPI Emulate_SCardSetAttrib(SmartcardEmulationContext* smartcard,
348 SCARDHANDLE hCard, DWORD dwAttrId,
349 LPCBYTE pbAttr, DWORD cbAttrLen);
352 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardA(SmartcardEmulationContext* smartcard,
353 LPOPENCARDNAMEA_EX pDlgStruc);
356 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardW(SmartcardEmulationContext* smartcard,
357 LPOPENCARDNAMEW_EX pDlgStruc);
360 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameA(SmartcardEmulationContext* smartcard,
364 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameW(SmartcardEmulationContext* smartcard,
368 FREERDP_API LONG WINAPI Emulate_SCardDlgExtendedError(SmartcardEmulationContext* smartcard);
371 FREERDP_API LONG WINAPI Emulate_SCardReadCacheA(SmartcardEmulationContext* smartcard,
372 SCARDCONTEXT hContext,
UUID* CardIdentifier,
373 DWORD FreshnessCounter, LPSTR LookupName,
374 PBYTE Data, DWORD* DataLen);
377 FREERDP_API LONG WINAPI Emulate_SCardReadCacheW(SmartcardEmulationContext* smartcard,
378 SCARDCONTEXT hContext,
UUID* CardIdentifier,
379 DWORD FreshnessCounter, LPWSTR LookupName,
380 PBYTE Data, DWORD* DataLen);
383 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheA(SmartcardEmulationContext* smartcard,
384 SCARDCONTEXT hContext,
UUID* CardIdentifier,
385 DWORD FreshnessCounter, LPSTR LookupName,
386 PBYTE Data, DWORD DataLen);
389 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheW(SmartcardEmulationContext* smartcard,
390 SCARDCONTEXT hContext,
UUID* CardIdentifier,
391 DWORD FreshnessCounter, LPWSTR LookupName,
392 PBYTE Data, DWORD DataLen);
395 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconA(SmartcardEmulationContext* smartcard,
396 SCARDCONTEXT hContext, LPCSTR szReaderName,
397 LPBYTE pbIcon, LPDWORD pcbIcon);
400 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconW(SmartcardEmulationContext* smartcard,
401 SCARDCONTEXT hContext, LPCWSTR szReaderName,
402 LPBYTE pbIcon, LPDWORD pcbIcon);
405 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdA(SmartcardEmulationContext* smartcard,
406 SCARDCONTEXT hContext,
408 LPDWORD pdwDeviceTypeId);
411 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdW(SmartcardEmulationContext* smartcard,
412 SCARDCONTEXT hContext,
413 LPCWSTR szReaderName,
414 LPDWORD pdwDeviceTypeId);
417 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA(
418 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName,
419 LPSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
422 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW(
423 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName,
424 LPWSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
427 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA(
428 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szDeviceInstanceId,
429 LPSTR mszReaders, LPDWORD pcchReaders);
432 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW(
433 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szDeviceInstanceId,
434 LPWSTR mszReaders, LPDWORD pcchReaders);
437 FREERDP_API LONG WINAPI Emulate_SCardAudit(SmartcardEmulationContext* smartcard,
438 SCARDCONTEXT hContext, DWORD dwEvent);