Stream_Write(smartcard->device.data, "SCARD", 6);
- status = SCardAddReaderName(&smartcard->thread, (LPSTR) device->Name);
-
- if (status != SCARD_S_SUCCESS)
- {
- WLog_ERR(TAG, "Failed to add reader name!");
- goto error_device_data;
- }
-
smartcard->IrpQueue = MessageQueue_New(NULL);
if (!smartcard->IrpQueue)
WINSCARDAPI LONG WINAPI SCardAudit(SCARDCONTEXT hContext, DWORD dwEvent);
-WINSCARDAPI LONG WINAPI SCardAddReaderName(HANDLE* key, LPSTR readerName);
-
#ifdef UNICODE
#define SCardListReaderGroups SCardListReaderGroupsW
#define SCardListReaders SCardListReadersW
typedef LONG(WINAPI* fnSCardAudit)(SCARDCONTEXT hContext, DWORD dwEvent);
-typedef LONG(WINAPI* fnSCardAddReaderName)(HANDLE* key, LPSTR readerName);
-
struct _SCardApiFunctionTable
{
DWORD dwVersion;
fnSCardListReadersWithDeviceInstanceIdA pfnSCardListReadersWithDeviceInstanceIdA;
fnSCardListReadersWithDeviceInstanceIdW pfnSCardListReadersWithDeviceInstanceIdW;
fnSCardAudit pfnSCardAudit;
- fnSCardAddReaderName pfnSCardAddReaderName;
};
typedef struct _SCardApiFunctionTable SCardApiFunctionTable;
static wListDictionary* g_CardHandles = NULL;
static wListDictionary* g_CardContexts = NULL;
static wListDictionary* g_MemoryBlocks = NULL;
-static wListDictionary* g_ReadersNames = NULL;
char SMARTCARD_PNP_NOTIFICATION_A[] = "\\\\?PnP?\\Notification";
return nameWinSCard;
}
-int PCSC_RedirectReader(char* readerName)
-{
- char* name;
- ULONG_PTR* readers;
- int i, nbReaders;
- nbReaders = ListDictionary_GetKeys(g_ReadersNames, &readers);
-
- for (i = 0; i < nbReaders; i++)
- {
- name = ListDictionary_GetItemValue(g_ReadersNames, (void*) readers[i]);
-
- if (name)
- {
- if (strcmp(name, "") == 0)
- {
- return 1;
- }
-
- if (strncmp(readerName, name, strlen(readerName)) == 0)
- {
- return 1;
- }
- }
- else
- {
- return 2;
- }
- }
-
- return 0;
-}
-
char* PCSC_ConvertReaderNamesToWinSCard(const char* names, LPDWORD pcchReaders)
{
int ret = 0;
if (nameWinSCard)
{
length = strlen(nameWinSCard);
- ret = PCSC_RedirectReader(nameWinSCard);
-
- if (ret == 1)
- {
- CopyMemory(q, nameWinSCard, length);
- endReaderName = TRUE;
- }
- else if (ret == 2)
- {
- CopyMemory(q, nameWinSCard, length);
- allReaders = TRUE;
- }
+ CopyMemory(q, nameWinSCard, length);
+ allReaders = TRUE;
free(nameWinSCard);
}
return 0;
}
-WINSCARDAPI LONG WINAPI PCSC_SCardAddReaderName(HANDLE* key, LPSTR readerName)
-{
- LONG status = SCARD_S_SUCCESS;
- int count = 0;
-
- if (!g_ReadersNames)
- {
- g_ReadersNames = ListDictionary_New(TRUE);
-
- if (!g_ReadersNames)
- return SCARD_E_NO_SERVICE;
- }
-
- count = ListDictionary_Count(g_ReadersNames);
-
- if (!ListDictionary_Add(g_ReadersNames, key, readerName))
- return SCARD_E_NO_SERVICE;
-
- return status;
-}
-
#ifdef __MACOSX__
unsigned int determineMacOSXVersion(void)
{
PCSC_SCardGetReaderDeviceInstanceIdW, /* SCardGetReaderDeviceInstanceIdW */
PCSC_SCardListReadersWithDeviceInstanceIdA, /* SCardListReadersWithDeviceInstanceIdA */
PCSC_SCardListReadersWithDeviceInstanceIdW, /* SCardListReadersWithDeviceInstanceIdW */
- PCSC_SCardAudit, /* SCardAudit */
- PCSC_SCardAddReaderName /* SCardAddReaderName */
+ PCSC_SCardAudit /* SCardAudit */
};
PSCardApiFunctionTable PCSC_GetSCardApiFunctionTable(void)