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);
216 FREERDP_API LONG WINAPI Emulate_SCardFreeMemory(SmartcardEmulationContext* smartcard,
217 SCARDCONTEXT hContext, LPVOID pvMem);
220 FREERDP_API HANDLE WINAPI Emulate_SCardAccessStartedEvent(SmartcardEmulationContext* smartcard);
222 FREERDP_API
void WINAPI Emulate_SCardReleaseStartedEvent(SmartcardEmulationContext* smartcard);
225 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsA(SmartcardEmulationContext* smartcard,
226 SCARDCONTEXT hContext, LPCSTR mszCards,
231 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsW(SmartcardEmulationContext* smartcard,
232 SCARDCONTEXT hContext, LPCWSTR mszCards,
237 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRA(SmartcardEmulationContext* smartcard,
238 SCARDCONTEXT hContext,
244 FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRW(SmartcardEmulationContext* smartcard,
245 SCARDCONTEXT hContext,
251 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeA(SmartcardEmulationContext* smartcard,
252 SCARDCONTEXT hContext, DWORD dwTimeout,
257 FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeW(SmartcardEmulationContext* smartcard,
258 SCARDCONTEXT hContext, DWORD dwTimeout,
262 FREERDP_API LONG WINAPI Emulate_SCardCancel(SmartcardEmulationContext* smartcard,
263 SCARDCONTEXT hContext);
266 FREERDP_API LONG WINAPI Emulate_SCardConnectA(SmartcardEmulationContext* smartcard,
267 SCARDCONTEXT hContext, LPCSTR szReader,
268 DWORD dwShareMode, DWORD dwPreferredProtocols,
269 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
272 FREERDP_API LONG WINAPI Emulate_SCardConnectW(SmartcardEmulationContext* smartcard,
273 SCARDCONTEXT hContext, LPCWSTR szReader,
274 DWORD dwShareMode, DWORD dwPreferredProtocols,
275 LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol);
278 FREERDP_API LONG WINAPI Emulate_SCardReconnect(SmartcardEmulationContext* smartcard,
279 SCARDHANDLE hCard, DWORD dwShareMode,
280 DWORD dwPreferredProtocols,
281 DWORD dwInitialization,
282 LPDWORD pdwActiveProtocol);
285 FREERDP_API LONG WINAPI Emulate_SCardDisconnect(SmartcardEmulationContext* smartcard,
286 SCARDHANDLE hCard, DWORD dwDisposition);
289 FREERDP_API LONG WINAPI Emulate_SCardBeginTransaction(SmartcardEmulationContext* smartcard,
293 FREERDP_API LONG WINAPI Emulate_SCardEndTransaction(SmartcardEmulationContext* smartcard,
294 SCARDHANDLE hCard, DWORD dwDisposition);
297 FREERDP_API LONG WINAPI Emulate_SCardCancelTransaction(SmartcardEmulationContext* smartcard,
301 FREERDP_API LONG WINAPI Emulate_SCardState(SmartcardEmulationContext* smartcard,
302 SCARDHANDLE hCard, LPDWORD pdwState,
303 LPDWORD pdwProtocol, LPBYTE pbAtr,
307 FREERDP_API LONG WINAPI Emulate_SCardStatusA(SmartcardEmulationContext* smartcard,
308 SCARDHANDLE hCard, LPSTR mszReaderNames,
309 LPDWORD pcchReaderLen, LPDWORD pdwState,
310 LPDWORD pdwProtocol, LPBYTE pbAtr,
314 FREERDP_API LONG WINAPI Emulate_SCardStatusW(SmartcardEmulationContext* smartcard,
315 SCARDHANDLE hCard, LPWSTR mszReaderNames,
316 LPDWORD pcchReaderLen, LPDWORD pdwState,
317 LPDWORD pdwProtocol, LPBYTE pbAtr,
321 FREERDP_API LONG WINAPI Emulate_SCardTransmit(SmartcardEmulationContext* smartcard,
323 LPCBYTE pbSendBuffer, DWORD cbSendLength,
325 LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
328 FREERDP_API LONG WINAPI Emulate_SCardGetTransmitCount(SmartcardEmulationContext* smartcard,
330 LPDWORD pcTransmitCount);
333 FREERDP_API LONG WINAPI Emulate_SCardControl(SmartcardEmulationContext* smartcard,
334 SCARDHANDLE hCard, DWORD dwControlCode,
335 LPCVOID lpInBuffer, DWORD cbInBufferSize,
336 LPVOID lpOutBuffer, DWORD cbOutBufferSize,
337 LPDWORD lpBytesReturned);
340 FREERDP_API LONG WINAPI Emulate_SCardGetAttrib(SmartcardEmulationContext* smartcard,
341 SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr,
345 FREERDP_API LONG WINAPI Emulate_SCardSetAttrib(SmartcardEmulationContext* smartcard,
346 SCARDHANDLE hCard, DWORD dwAttrId,
347 LPCBYTE pbAttr, DWORD cbAttrLen);
350 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardA(SmartcardEmulationContext* smartcard,
351 LPOPENCARDNAMEA_EX pDlgStruc);
354 FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardW(SmartcardEmulationContext* smartcard,
355 LPOPENCARDNAMEW_EX pDlgStruc);
358 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameA(SmartcardEmulationContext* smartcard,
362 FREERDP_API LONG WINAPI Emulate_GetOpenCardNameW(SmartcardEmulationContext* smartcard,
366 FREERDP_API LONG WINAPI Emulate_SCardDlgExtendedError(SmartcardEmulationContext* smartcard);
369 FREERDP_API LONG WINAPI Emulate_SCardReadCacheA(SmartcardEmulationContext* smartcard,
370 SCARDCONTEXT hContext,
UUID* CardIdentifier,
371 DWORD FreshnessCounter, LPSTR LookupName,
372 PBYTE Data, DWORD* DataLen);
375 FREERDP_API LONG WINAPI Emulate_SCardReadCacheW(SmartcardEmulationContext* smartcard,
376 SCARDCONTEXT hContext,
UUID* CardIdentifier,
377 DWORD FreshnessCounter, LPWSTR LookupName,
378 PBYTE Data, DWORD* DataLen);
381 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheA(SmartcardEmulationContext* smartcard,
382 SCARDCONTEXT hContext,
UUID* CardIdentifier,
383 DWORD FreshnessCounter, LPSTR LookupName,
384 PBYTE Data, DWORD DataLen);
387 FREERDP_API LONG WINAPI Emulate_SCardWriteCacheW(SmartcardEmulationContext* smartcard,
388 SCARDCONTEXT hContext,
UUID* CardIdentifier,
389 DWORD FreshnessCounter, LPWSTR LookupName,
390 PBYTE Data, DWORD DataLen);
393 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconA(SmartcardEmulationContext* smartcard,
394 SCARDCONTEXT hContext, LPCSTR szReaderName,
395 LPBYTE pbIcon, LPDWORD pcbIcon);
398 FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconW(SmartcardEmulationContext* smartcard,
399 SCARDCONTEXT hContext, LPCWSTR szReaderName,
400 LPBYTE pbIcon, LPDWORD pcbIcon);
403 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdA(SmartcardEmulationContext* smartcard,
404 SCARDCONTEXT hContext,
406 LPDWORD pdwDeviceTypeId);
409 FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdW(SmartcardEmulationContext* smartcard,
410 SCARDCONTEXT hContext,
411 LPCWSTR szReaderName,
412 LPDWORD pdwDeviceTypeId);
415 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA(
416 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName,
417 LPSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
420 FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW(
421 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName,
422 LPWSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId);
425 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA(
426 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szDeviceInstanceId,
427 LPSTR mszReaders, LPDWORD pcchReaders);
430 FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW(
431 SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szDeviceInstanceId,
432 LPWSTR mszReaders, LPDWORD pcchReaders);
435 FREERDP_API LONG WINAPI Emulate_SCardAudit(SmartcardEmulationContext* smartcard,
436 SCARDCONTEXT hContext, DWORD dwEvent);