FreeRDP
smartcard_emulate.c File Reference
#include <freerdp/config.h>
#include <freerdp/freerdp.h>
#include <winpr/crt.h>
#include <winpr/wlog.h>
#include <winpr/file.h>
#include <winpr/path.h>
#include <winpr/library.h>
#include <winpr/smartcard.h>
#include <winpr/collections.h>
#include <winpr/crypto.h>
#include <freerdp/emulate/scard/smartcard_emulate.h>
#include "FreeRDP.ico.h"
#include "smartcard_virtual_gids.h"

Macros

#define MAX_CACHE_ITEM_SIZE   4096
 
#define MAX_CACHE_ITEM_VALUES   4096
 
#define MAX_EMULATED_READERS   1
 

Functions

static BOOL CALLBACK g_ReaderNameWInit (PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context)
 
static SCardHandle * find_reader (SmartcardEmulationContext *smartcard, const void *szReader, BOOL unicode)
 
static BOOL scard_status_transition (SCardContext *context)
 
static UINT32 scard_copy_strings (SCardContext *ctx, void *dst, UINT32 dstSize, const void *src, UINT32 srcSize)
 
static void scard_context_free (void *context)
 
static BOOL char_compare (const void *a, const void *b)
 
static BOOL wchar_compare (const void *a, const void *b)
 
static SCardContext * scard_context_new (void)
 
static void scard_handle_free (void *handle)
 
static SCardHandle * scard_handle_new (SmartcardEmulationContext *smartcard, SCARDCONTEXT context, const void *name, BOOL unicode)
 
static LONG scard_handle_valid (SmartcardEmulationContext *smartcard, SCARDHANDLE handle)
 
static LONG scard_reader_name_valid_a (SmartcardEmulationContext *smartcard, SCARDCONTEXT context, const char *name)
 
static LONG scard_reader_name_valid_w (SmartcardEmulationContext *smartcard, SCARDCONTEXT context, const WCHAR *name)
 
LONG WINAPI Emulate_SCardEstablishContext (SmartcardEmulationContext *smartcard, DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
 
LONG WINAPI Emulate_SCardReleaseContext (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext)
 
LONG WINAPI Emulate_SCardIsValidContext (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext)
 
LONG WINAPI Emulate_SCardListReaderGroupsA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPSTR mszGroups, LPDWORD pcchGroups)
 
LONG WINAPI Emulate_SCardListReaderGroupsW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPWSTR mszGroups, LPDWORD pcchGroups)
 
LONG WINAPI Emulate_SCardListReadersA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)
 
LONG WINAPI Emulate_SCardListReadersW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR mszGroups, LPWSTR mszReaders, LPDWORD pcchReaders)
 
LONG WINAPI Emulate_SCardListCardsA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, CHAR *mszCards, LPDWORD pcchCards)
 
LONG WINAPI Emulate_SCardListCardsW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, WCHAR *mszCards, LPDWORD pcchCards)
 
LONG WINAPI Emulate_SCardListInterfacesA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCard, LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
 
LONG WINAPI Emulate_SCardListInterfacesW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCard, LPGUID pguidInterfaces, LPDWORD pcguidInterfaces)
 
LONG WINAPI Emulate_SCardGetProviderIdA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCard, LPGUID pguidProviderId)
 
LONG WINAPI Emulate_SCardGetProviderIdW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCard, LPGUID pguidProviderId)
 
LONG WINAPI Emulate_SCardGetCardTypeProviderNameA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, DWORD dwProviderId, CHAR *szProvider, LPDWORD pcchProvider)
 
LONG WINAPI Emulate_SCardGetCardTypeProviderNameW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, DWORD dwProviderId, WCHAR *szProvider, LPDWORD pcchProvider)
 
LONG WINAPI Emulate_SCardIntroduceReaderGroupA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szGroupName)
 
LONG WINAPI Emulate_SCardIntroduceReaderGroupW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szGroupName)
 
LONG WINAPI Emulate_SCardForgetReaderGroupA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szGroupName)
 
LONG WINAPI Emulate_SCardForgetReaderGroupW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szGroupName)
 
LONG WINAPI Emulate_SCardIntroduceReaderA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szDeviceName)
 
LONG WINAPI Emulate_SCardIntroduceReaderW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szDeviceName)
 
LONG WINAPI Emulate_SCardForgetReaderA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName)
 
LONG WINAPI Emulate_SCardForgetReaderW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName)
 
LONG WINAPI Emulate_SCardAddReaderToGroupA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szGroupName)
 
LONG WINAPI Emulate_SCardAddReaderToGroupW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szGroupName)
 
LONG WINAPI Emulate_SCardRemoveReaderFromGroupA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szGroupName)
 
LONG WINAPI Emulate_SCardRemoveReaderFromGroupW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szGroupName)
 
LONG WINAPI Emulate_SCardIntroduceCardTypeA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen)
 
LONG WINAPI Emulate_SCardIntroduceCardTypeW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen)
 
LONG WINAPI Emulate_SCardSetCardTypeProviderNameA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, DWORD dwProviderId, LPCSTR szProvider)
 
LONG WINAPI Emulate_SCardSetCardTypeProviderNameW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, DWORD dwProviderId, LPCWSTR szProvider)
 
LONG WINAPI Emulate_SCardForgetCardTypeA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szCardName)
 
LONG WINAPI Emulate_SCardForgetCardTypeW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName)
 
LONG WINAPI Emulate_SCardFreeMemory (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPVOID pvMem)
 
HANDLE WINAPI Emulate_SCardAccessStartedEvent (SmartcardEmulationContext *smartcard)
 
void WINAPI Emulate_SCardReleaseStartedEvent (SmartcardEmulationContext *smartcard)
 
LONG WINAPI Emulate_SCardLocateCardsA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR mszCards, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardLocateCardsW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR mszCards, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardLocateCardsByATRA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardLocateCardsByATRW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardGetStatusChangeA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardGetStatusChangeW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders)
 
LONG WINAPI Emulate_SCardCancel (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext)
 
static SCardHandle * reader2handle (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, const void *szReader, BOOL unicode, DWORD dwShareMode, SCARDHANDLE *phCard, DWORD dwPreferredProtocols, LPDWORD pdwActiveProtocol)
 
LONG WINAPI Emulate_SCardConnectA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
 
LONG WINAPI Emulate_SCardConnectW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
 
LONG WINAPI Emulate_SCardReconnect (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwShareMode, DWORD dwPreferredProtocols, DWORD dwInitialization, LPDWORD pdwActiveProtocol)
 
LONG WINAPI Emulate_SCardDisconnect (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwDisposition)
 
LONG WINAPI Emulate_SCardBeginTransaction (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard)
 
LONG WINAPI Emulate_SCardEndTransaction (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwDisposition)
 
LONG WINAPI Emulate_SCardCancelTransaction (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard)
 
LONG WINAPI Emulate_SCardState (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
 
LONG WINAPI Emulate_SCardStatusA (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
 
LONG WINAPI Emulate_SCardStatusW (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, LPWSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
 
LONG WINAPI Emulate_SCardTransmit (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)
 
LONG WINAPI Emulate_SCardGetTransmitCount (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, LPDWORD pcTransmitCount)
 
LONG WINAPI Emulate_SCardControl (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer, DWORD cbInBufferSize, LPVOID lpOutBuffer, DWORD cbOutBufferSize, LPDWORD lpBytesReturned)
 
LONG WINAPI Emulate_SCardGetAttrib (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr, LPDWORD pcbAttrLen)
 
LONG WINAPI Emulate_SCardSetAttrib (SmartcardEmulationContext *smartcard, SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, DWORD cbAttrLen)
 
LONG WINAPI Emulate_SCardUIDlgSelectCardA (SmartcardEmulationContext *smartcard, LPOPENCARDNAMEA_EX pDlgStruc)
 
LONG WINAPI Emulate_SCardUIDlgSelectCardW (SmartcardEmulationContext *smartcard, LPOPENCARDNAMEW_EX pDlgStruc)
 
LONG WINAPI Emulate_GetOpenCardNameA (SmartcardEmulationContext *smartcard, LPOPENCARDNAMEA pDlgStruc)
 
LONG WINAPI Emulate_GetOpenCardNameW (SmartcardEmulationContext *smartcard, LPOPENCARDNAMEW pDlgStruc)
 
LONG WINAPI Emulate_SCardDlgExtendedError (SmartcardEmulationContext *smartcard)
 
LONG WINAPI Emulate_SCardReadCacheA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, UUID *CardIdentifier, DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, DWORD *DataLen)
 
LONG WINAPI Emulate_SCardReadCacheW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, UUID *CardIdentifier, DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, DWORD *DataLen)
 
static LONG insert_data (wHashTable *table, DWORD FreshnessCounter, const void *key, const PBYTE Data, DWORD DataLen)
 
LONG WINAPI Emulate_SCardWriteCacheA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, UUID *CardIdentifier, DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, DWORD DataLen)
 
LONG WINAPI Emulate_SCardWriteCacheW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, UUID *CardIdentifier, DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, DWORD DataLen)
 
LONG WINAPI Emulate_SCardGetReaderIconA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPBYTE pbIcon, LPDWORD pcbIcon)
 
LONG WINAPI Emulate_SCardGetReaderIconW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPBYTE pbIcon, LPDWORD pcbIcon)
 
LONG WINAPI Emulate_SCardGetDeviceTypeIdA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPDWORD pdwDeviceTypeId)
 
LONG WINAPI Emulate_SCardGetDeviceTypeIdW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPDWORD pdwDeviceTypeId)
 
LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId)
 
LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPWSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId)
 
LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCSTR szDeviceInstanceId, LPSTR mszReaders, LPDWORD pcchReaders)
 
LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, LPCWSTR szDeviceInstanceId, LPWSTR mszReaders, LPDWORD pcchReaders)
 
LONG WINAPI Emulate_SCardAudit (SmartcardEmulationContext *smartcard, SCARDCONTEXT hContext, DWORD dwEvent)
 
static BOOL context_equals (const void *pva, const void *pvb)
 
static BOOL handle_equals (const void *pva, const void *pvb)
 
SmartcardEmulationContext * Emulate_New (const rdpSettings *settings)
 
void Emulate_Free (SmartcardEmulationContext *context)
 
BOOL Emulate_IsConfigured (SmartcardEmulationContext *context)
 

Variables

static CHAR g_ReaderNameA []
 
static INIT_ONCE g_ReaderNameWGuard = INIT_ONCE_STATIC_INIT
 
static WCHAR g_ReaderNameW [32] = { 0 }
 
static size_t g_ReaderNameWLen = 0
 
static const BYTE ATR []
 

Macro Definition Documentation

◆ MAX_CACHE_ITEM_SIZE

#define MAX_CACHE_ITEM_SIZE   4096

WinPR: Windows Portable Runtime Smart Card API emulation

Copyright 2021 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2021 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

◆ MAX_CACHE_ITEM_VALUES

#define MAX_CACHE_ITEM_VALUES   4096

◆ MAX_EMULATED_READERS

#define MAX_EMULATED_READERS   1

Function Documentation

◆ char_compare()

static BOOL char_compare ( const void *  a,
const void *  b 
)
static
Here is the caller graph for this function:

◆ context_equals()

static BOOL context_equals ( const void *  pva,
const void *  pvb 
)
static
Here is the caller graph for this function:

◆ Emulate_Free()

void Emulate_Free ( SmartcardEmulationContext *  context)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Emulate_GetOpenCardNameA()

LONG WINAPI Emulate_GetOpenCardNameA ( SmartcardEmulationContext *  smartcard,
LPOPENCARDNAMEA  pDlgStruc 
)
Here is the call graph for this function:

◆ Emulate_GetOpenCardNameW()

LONG WINAPI Emulate_GetOpenCardNameW ( SmartcardEmulationContext *  smartcard,
LPOPENCARDNAMEW  pDlgStruc 
)
Here is the call graph for this function:

◆ Emulate_IsConfigured()

BOOL Emulate_IsConfigured ( SmartcardEmulationContext *  context)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Emulate_New()

SmartcardEmulationContext* Emulate_New ( const rdpSettings *  settings)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Emulate_SCardAccessStartedEvent()

HANDLE WINAPI Emulate_SCardAccessStartedEvent ( SmartcardEmulationContext *  smartcard)
Here is the call graph for this function:

◆ Emulate_SCardAddReaderToGroupA()

LONG WINAPI Emulate_SCardAddReaderToGroupA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPCSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardAddReaderToGroupW()

LONG WINAPI Emulate_SCardAddReaderToGroupW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPCWSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardAudit()

LONG WINAPI Emulate_SCardAudit ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
DWORD  dwEvent 
)
Here is the call graph for this function:

◆ Emulate_SCardBeginTransaction()

LONG WINAPI Emulate_SCardBeginTransaction ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard 
)
Here is the call graph for this function:

◆ Emulate_SCardCancel()

LONG WINAPI Emulate_SCardCancel ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:

◆ Emulate_SCardCancelTransaction()

LONG WINAPI Emulate_SCardCancelTransaction ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard 
)
Here is the call graph for this function:

◆ Emulate_SCardConnectA()

LONG WINAPI Emulate_SCardConnectA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReader,
DWORD  dwShareMode,
DWORD  dwPreferredProtocols,
LPSCARDHANDLE  phCard,
LPDWORD  pdwActiveProtocol 
)
Here is the call graph for this function:

◆ Emulate_SCardConnectW()

LONG WINAPI Emulate_SCardConnectW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReader,
DWORD  dwShareMode,
DWORD  dwPreferredProtocols,
LPSCARDHANDLE  phCard,
LPDWORD  pdwActiveProtocol 
)
Here is the call graph for this function:

◆ Emulate_SCardControl()

LONG WINAPI Emulate_SCardControl ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwControlCode,
LPCVOID  lpInBuffer,
DWORD  cbInBufferSize,
LPVOID  lpOutBuffer,
DWORD  cbOutBufferSize,
LPDWORD  lpBytesReturned 
)
Here is the call graph for this function:

◆ Emulate_SCardDisconnect()

LONG WINAPI Emulate_SCardDisconnect ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwDisposition 
)
Here is the call graph for this function:

◆ Emulate_SCardDlgExtendedError()

LONG WINAPI Emulate_SCardDlgExtendedError ( SmartcardEmulationContext *  smartcard)
Here is the call graph for this function:

◆ Emulate_SCardEndTransaction()

LONG WINAPI Emulate_SCardEndTransaction ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwDisposition 
)
Here is the call graph for this function:

◆ Emulate_SCardEstablishContext()

LONG WINAPI Emulate_SCardEstablishContext ( SmartcardEmulationContext *  smartcard,
DWORD  dwScope,
LPCVOID  pvReserved1,
LPCVOID  pvReserved2,
LPSCARDCONTEXT  phContext 
)

Standard Windows Smart Card API

Here is the call graph for this function:

◆ Emulate_SCardForgetCardTypeA()

LONG WINAPI Emulate_SCardForgetCardTypeA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCardName 
)
Here is the call graph for this function:

◆ Emulate_SCardForgetCardTypeW()

LONG WINAPI Emulate_SCardForgetCardTypeW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCardName 
)
Here is the call graph for this function:

◆ Emulate_SCardForgetReaderA()

LONG WINAPI Emulate_SCardForgetReaderA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName 
)
Here is the call graph for this function:

◆ Emulate_SCardForgetReaderGroupA()

LONG WINAPI Emulate_SCardForgetReaderGroupA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardForgetReaderGroupW()

LONG WINAPI Emulate_SCardForgetReaderGroupW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardForgetReaderW()

LONG WINAPI Emulate_SCardForgetReaderW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName 
)
Here is the call graph for this function:

◆ Emulate_SCardFreeMemory()

LONG WINAPI Emulate_SCardFreeMemory ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPVOID  pvMem 
)
Here is the call graph for this function:

◆ Emulate_SCardGetAttrib()

LONG WINAPI Emulate_SCardGetAttrib ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwAttrId,
LPBYTE  pbAttr,
LPDWORD  pcbAttrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardGetCardTypeProviderNameA()

LONG WINAPI Emulate_SCardGetCardTypeProviderNameA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCardName,
DWORD  dwProviderId,
CHAR *  szProvider,
LPDWORD  pcchProvider 
)
Here is the call graph for this function:

◆ Emulate_SCardGetCardTypeProviderNameW()

LONG WINAPI Emulate_SCardGetCardTypeProviderNameW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCardName,
DWORD  dwProviderId,
WCHAR *  szProvider,
LPDWORD  pcchProvider 
)
Here is the call graph for this function:

◆ Emulate_SCardGetDeviceTypeIdA()

LONG WINAPI Emulate_SCardGetDeviceTypeIdA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPDWORD  pdwDeviceTypeId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetDeviceTypeIdW()

LONG WINAPI Emulate_SCardGetDeviceTypeIdW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPDWORD  pdwDeviceTypeId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetProviderIdA()

LONG WINAPI Emulate_SCardGetProviderIdA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCard,
LPGUID  pguidProviderId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetProviderIdW()

LONG WINAPI Emulate_SCardGetProviderIdW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCard,
LPGUID  pguidProviderId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetReaderDeviceInstanceIdA()

LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPSTR  szDeviceInstanceId,
LPDWORD  pcchDeviceInstanceId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetReaderDeviceInstanceIdW()

LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPWSTR  szDeviceInstanceId,
LPDWORD  pcchDeviceInstanceId 
)
Here is the call graph for this function:

◆ Emulate_SCardGetReaderIconA()

LONG WINAPI Emulate_SCardGetReaderIconA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPBYTE  pbIcon,
LPDWORD  pcbIcon 
)
Here is the call graph for this function:

◆ Emulate_SCardGetReaderIconW()

LONG WINAPI Emulate_SCardGetReaderIconW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPBYTE  pbIcon,
LPDWORD  pcbIcon 
)
Here is the call graph for this function:

◆ Emulate_SCardGetStatusChangeA()

LONG WINAPI Emulate_SCardGetStatusChangeA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
DWORD  dwTimeout,
LPSCARD_READERSTATEA  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardGetStatusChangeW()

LONG WINAPI Emulate_SCardGetStatusChangeW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
DWORD  dwTimeout,
LPSCARD_READERSTATEW  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardGetTransmitCount()

LONG WINAPI Emulate_SCardGetTransmitCount ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
LPDWORD  pcTransmitCount 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceCardTypeA()

LONG WINAPI Emulate_SCardIntroduceCardTypeA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCardName,
LPCGUID  pguidPrimaryProvider,
LPCGUID  rgguidInterfaces,
DWORD  dwInterfaceCount,
LPCBYTE  pbAtr,
LPCBYTE  pbAtrMask,
DWORD  cbAtrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceCardTypeW()

LONG WINAPI Emulate_SCardIntroduceCardTypeW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCardName,
LPCGUID  pguidPrimaryProvider,
LPCGUID  rgguidInterfaces,
DWORD  dwInterfaceCount,
LPCBYTE  pbAtr,
LPCBYTE  pbAtrMask,
DWORD  cbAtrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceReaderA()

LONG WINAPI Emulate_SCardIntroduceReaderA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPCSTR  szDeviceName 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceReaderGroupA()

LONG WINAPI Emulate_SCardIntroduceReaderGroupA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceReaderGroupW()

LONG WINAPI Emulate_SCardIntroduceReaderGroupW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardIntroduceReaderW()

LONG WINAPI Emulate_SCardIntroduceReaderW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPCWSTR  szDeviceName 
)
Here is the call graph for this function:

◆ Emulate_SCardIsValidContext()

LONG WINAPI Emulate_SCardIsValidContext ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:

◆ Emulate_SCardListCardsA()

LONG WINAPI Emulate_SCardListCardsA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCBYTE  pbAtr,
LPCGUID  rgquidInterfaces,
DWORD  cguidInterfaceCount,
CHAR *  mszCards,
LPDWORD  pcchCards 
)
Here is the call graph for this function:

◆ Emulate_SCardListCardsW()

LONG WINAPI Emulate_SCardListCardsW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCBYTE  pbAtr,
LPCGUID  rgquidInterfaces,
DWORD  cguidInterfaceCount,
WCHAR *  mszCards,
LPDWORD  pcchCards 
)
Here is the call graph for this function:

◆ Emulate_SCardListInterfacesA()

LONG WINAPI Emulate_SCardListInterfacesA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCard,
LPGUID  pguidInterfaces,
LPDWORD  pcguidInterfaces 
)
Here is the call graph for this function:

◆ Emulate_SCardListInterfacesW()

LONG WINAPI Emulate_SCardListInterfacesW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCard,
LPGUID  pguidInterfaces,
LPDWORD  pcguidInterfaces 
)
Here is the call graph for this function:

◆ Emulate_SCardListReaderGroupsA()

LONG WINAPI Emulate_SCardListReaderGroupsA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPSTR  mszGroups,
LPDWORD  pcchGroups 
)
Here is the call graph for this function:

◆ Emulate_SCardListReaderGroupsW()

LONG WINAPI Emulate_SCardListReaderGroupsW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPWSTR  mszGroups,
LPDWORD  pcchGroups 
)
Here is the call graph for this function:

◆ Emulate_SCardListReadersA()

LONG WINAPI Emulate_SCardListReadersA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  mszGroups,
LPSTR  mszReaders,
LPDWORD  pcchReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardListReadersW()

LONG WINAPI Emulate_SCardListReadersW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  mszGroups,
LPWSTR  mszReaders,
LPDWORD  pcchReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardListReadersWithDeviceInstanceIdA()

LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szDeviceInstanceId,
LPSTR  mszReaders,
LPDWORD  pcchReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardListReadersWithDeviceInstanceIdW()

LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szDeviceInstanceId,
LPWSTR  mszReaders,
LPDWORD  pcchReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardLocateCardsA()

LONG WINAPI Emulate_SCardLocateCardsA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  mszCards,
LPSCARD_READERSTATEA  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardLocateCardsByATRA()

LONG WINAPI Emulate_SCardLocateCardsByATRA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPSCARD_ATRMASK  rgAtrMasks,
DWORD  cAtrs,
LPSCARD_READERSTATEA  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardLocateCardsByATRW()

LONG WINAPI Emulate_SCardLocateCardsByATRW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPSCARD_ATRMASK  rgAtrMasks,
DWORD  cAtrs,
LPSCARD_READERSTATEW  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardLocateCardsW()

LONG WINAPI Emulate_SCardLocateCardsW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  mszCards,
LPSCARD_READERSTATEW  rgReaderStates,
DWORD  cReaders 
)
Here is the call graph for this function:

◆ Emulate_SCardReadCacheA()

LONG WINAPI Emulate_SCardReadCacheA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
UUID *  CardIdentifier,
DWORD  FreshnessCounter,
LPSTR  LookupName,
PBYTE  Data,
DWORD *  DataLen 
)
Here is the call graph for this function:

◆ Emulate_SCardReadCacheW()

LONG WINAPI Emulate_SCardReadCacheW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
UUID *  CardIdentifier,
DWORD  FreshnessCounter,
LPWSTR  LookupName,
PBYTE  Data,
DWORD *  DataLen 
)
Here is the call graph for this function:

◆ Emulate_SCardReconnect()

LONG WINAPI Emulate_SCardReconnect ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwShareMode,
DWORD  dwPreferredProtocols,
DWORD  dwInitialization,
LPDWORD  pdwActiveProtocol 
)
Here is the call graph for this function:

◆ Emulate_SCardReleaseContext()

LONG WINAPI Emulate_SCardReleaseContext ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:

◆ Emulate_SCardReleaseStartedEvent()

void WINAPI Emulate_SCardReleaseStartedEvent ( SmartcardEmulationContext *  smartcard)

◆ Emulate_SCardRemoveReaderFromGroupA()

LONG WINAPI Emulate_SCardRemoveReaderFromGroupA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szReaderName,
LPCSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardRemoveReaderFromGroupW()

LONG WINAPI Emulate_SCardRemoveReaderFromGroupW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szReaderName,
LPCWSTR  szGroupName 
)
Here is the call graph for this function:

◆ Emulate_SCardSetAttrib()

LONG WINAPI Emulate_SCardSetAttrib ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
DWORD  dwAttrId,
LPCBYTE  pbAttr,
DWORD  cbAttrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardSetCardTypeProviderNameA()

LONG WINAPI Emulate_SCardSetCardTypeProviderNameA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCSTR  szCardName,
DWORD  dwProviderId,
LPCSTR  szProvider 
)
Here is the call graph for this function:

◆ Emulate_SCardSetCardTypeProviderNameW()

LONG WINAPI Emulate_SCardSetCardTypeProviderNameW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
LPCWSTR  szCardName,
DWORD  dwProviderId,
LPCWSTR  szProvider 
)
Here is the call graph for this function:

◆ Emulate_SCardState()

LONG WINAPI Emulate_SCardState ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
LPDWORD  pdwState,
LPDWORD  pdwProtocol,
LPBYTE  pbAtr,
LPDWORD  pcbAtrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardStatusA()

LONG WINAPI Emulate_SCardStatusA ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
LPSTR  mszReaderNames,
LPDWORD  pcchReaderLen,
LPDWORD  pdwState,
LPDWORD  pdwProtocol,
LPBYTE  pbAtr,
LPDWORD  pcbAtrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardStatusW()

LONG WINAPI Emulate_SCardStatusW ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
LPWSTR  mszReaderNames,
LPDWORD  pcchReaderLen,
LPDWORD  pdwState,
LPDWORD  pdwProtocol,
LPBYTE  pbAtr,
LPDWORD  pcbAtrLen 
)
Here is the call graph for this function:

◆ Emulate_SCardTransmit()

LONG WINAPI Emulate_SCardTransmit ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  hCard,
LPCSCARD_IO_REQUEST  pioSendPci,
LPCBYTE  pbSendBuffer,
DWORD  cbSendLength,
LPSCARD_IO_REQUEST  pioRecvPci,
LPBYTE  pbRecvBuffer,
LPDWORD  pcbRecvLength 
)
Here is the call graph for this function:

◆ Emulate_SCardUIDlgSelectCardA()

LONG WINAPI Emulate_SCardUIDlgSelectCardA ( SmartcardEmulationContext *  smartcard,
LPOPENCARDNAMEA_EX  pDlgStruc 
)
Here is the call graph for this function:

◆ Emulate_SCardUIDlgSelectCardW()

LONG WINAPI Emulate_SCardUIDlgSelectCardW ( SmartcardEmulationContext *  smartcard,
LPOPENCARDNAMEW_EX  pDlgStruc 
)
Here is the call graph for this function:

◆ Emulate_SCardWriteCacheA()

LONG WINAPI Emulate_SCardWriteCacheA ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
UUID *  CardIdentifier,
DWORD  FreshnessCounter,
LPSTR  LookupName,
PBYTE  Data,
DWORD  DataLen 
)
Here is the call graph for this function:

◆ Emulate_SCardWriteCacheW()

LONG WINAPI Emulate_SCardWriteCacheW ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
UUID *  CardIdentifier,
DWORD  FreshnessCounter,
LPWSTR  LookupName,
PBYTE  Data,
DWORD  DataLen 
)
Here is the call graph for this function:

◆ find_reader()

SCardHandle * find_reader ( SmartcardEmulationContext *  smartcard,
const void *  szReader,
BOOL  unicode 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ g_ReaderNameWInit()

static BOOL CALLBACK g_ReaderNameWInit ( PINIT_ONCE  InitOnce,
PVOID  Parameter,
PVOID *  Context 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_equals()

static BOOL handle_equals ( const void *  pva,
const void *  pvb 
)
static
Here is the caller graph for this function:

◆ insert_data()

static LONG insert_data ( wHashTable *  table,
DWORD  FreshnessCounter,
const void *  key,
const PBYTE  Data,
DWORD  DataLen 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reader2handle()

static SCardHandle* reader2handle ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  hContext,
const void *  szReader,
BOOL  unicode,
DWORD  dwShareMode,
SCARDHANDLE phCard,
DWORD  dwPreferredProtocols,
LPDWORD  pdwActiveProtocol 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_context_free()

static void scard_context_free ( void *  context)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_context_new()

static SCardContext* scard_context_new ( void  )
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_copy_strings()

static UINT32 scard_copy_strings ( SCardContext *  ctx,
void *  dst,
UINT32  dstSize,
const void *  src,
UINT32  srcSize 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_handle_free()

static void scard_handle_free ( void *  handle)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_handle_new()

static SCardHandle* scard_handle_new ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  context,
const void *  name,
BOOL  unicode 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_handle_valid()

static LONG scard_handle_valid ( SmartcardEmulationContext *  smartcard,
SCARDHANDLE  handle 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_reader_name_valid_a()

static LONG scard_reader_name_valid_a ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  context,
const char *  name 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_reader_name_valid_w()

static LONG scard_reader_name_valid_w ( SmartcardEmulationContext *  smartcard,
SCARDCONTEXT  context,
const WCHAR *  name 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scard_status_transition()

static BOOL scard_status_transition ( SCardContext *  context)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ wchar_compare()

static BOOL wchar_compare ( const void *  a,
const void *  b 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ ATR

const BYTE ATR[]
static
Initial value:
= { 0x3b, 0xf7, 0x18, 0x00, 0x00, 0x80, 0x31, 0xfe, 0x45,
0x73, 0x66, 0x74, 0x65, 0x2d, 0x6e, 0x66, 0xc4 }

◆ g_ReaderNameA

CHAR g_ReaderNameA[]
static
Initial value:
= { 'F', 'r', 'e', 'e', 'R', 'D', 'P', ' ', 'E',
'm', 'u', 'l', 'a', 't', 'o', 'r', '\0', '\0' }

◆ g_ReaderNameW

WCHAR g_ReaderNameW[32] = { 0 }
static

◆ g_ReaderNameWGuard

INIT_ONCE g_ReaderNameWGuard = INIT_ONCE_STATIC_INIT
static

◆ g_ReaderNameWLen

size_t g_ReaderNameWLen = 0
static