some more error checks in minidriver in regards to card ejects
This commit is contained in:
parent
492ffe0fd7
commit
6a6ef61d1a
|
@ -319,7 +319,7 @@ static void print_werror(PCARD_DATA pCardData, PSTR str)
|
||||||
static int
|
static int
|
||||||
check_reader_status(PCARD_DATA pCardData)
|
check_reader_status(PCARD_DATA pCardData)
|
||||||
{
|
{
|
||||||
int r;
|
int r = SCARD_S_SUCCESS;
|
||||||
VENDOR_SPECIFIC *vs = NULL;
|
VENDOR_SPECIFIC *vs = NULL;
|
||||||
|
|
||||||
logprintf(pCardData, 4, "check_reader_status\n");
|
logprintf(pCardData, 4, "check_reader_status\n");
|
||||||
|
@ -340,6 +340,8 @@ check_reader_status(PCARD_DATA pCardData)
|
||||||
r = disassociate_card(pCardData);
|
r = disassociate_card(pCardData);
|
||||||
logprintf(pCardData, 1, "disassociate_card r = 0x%08X\n", r);
|
logprintf(pCardData, 1, "disassociate_card r = 0x%08X\n", r);
|
||||||
r = associate_card(pCardData); /* need to check return codes */
|
r = associate_card(pCardData); /* need to check return codes */
|
||||||
|
if (r != SCARD_S_SUCCESS)
|
||||||
|
return r;
|
||||||
logprintf(pCardData, 1, "associate_card r = 0x%08X\n", r);
|
logprintf(pCardData, 1, "associate_card r = 0x%08X\n", r);
|
||||||
/* Rebuild 'soft' fs - in case changed */
|
/* Rebuild 'soft' fs - in case changed */
|
||||||
r = md_fs_init(pCardData);
|
r = md_fs_init(pCardData);
|
||||||
|
@ -351,7 +353,7 @@ check_reader_status(PCARD_DATA pCardData)
|
||||||
logprintf(pCardData, 2, "check_reader_status r=%d flags 0x%08X\n", r, vs->reader->flags);
|
logprintf(pCardData, 2, "check_reader_status r=%d flags 0x%08X\n", r, vs->reader->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SCARD_S_SUCCESS;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD
|
static DWORD
|
||||||
|
@ -1274,6 +1276,9 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file)
|
||||||
logprintf(pCardData, 2, "directory '%s' not found\n", parent ? parent : "<null>");
|
logprintf(pCardData, 2, "directory '%s' not found\n", parent ? parent : "<null>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (vs->p15card == NULL) {
|
||||||
|
return SCARD_F_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(dir->name, "mscp")) {
|
if (!strcmp(dir->name, "mscp")) {
|
||||||
int idx, rv;
|
int idx, rv;
|
||||||
|
@ -2585,6 +2590,10 @@ DWORD WINAPI CardGetContainerInfo(__in PCARD_DATA pCardData, __in BYTE bContaine
|
||||||
return SCARD_E_NO_KEY_CONTAINER;
|
return SCARD_E_NO_KEY_CONTAINER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vs->p15card == NULL) {
|
||||||
|
return SCARD_F_INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
check_reader_status(pCardData);
|
check_reader_status(pCardData);
|
||||||
pubkey_der.value = NULL;
|
pubkey_der.value = NULL;
|
||||||
pubkey_der.len = 0;
|
pubkey_der.len = 0;
|
||||||
|
@ -3667,7 +3676,10 @@ DWORD WINAPI CardAuthenticateEx(__in PCARD_DATA pCardData,
|
||||||
|
|
||||||
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
|
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
|
||||||
|
|
||||||
check_reader_status(pCardData);
|
r = check_reader_status(pCardData);
|
||||||
|
|
||||||
|
if ((vs->p15card) == NULL)
|
||||||
|
return SCARD_F_INTERNAL_ERROR;
|
||||||
|
|
||||||
if (dwFlags == CARD_AUTHENTICATE_GENERATE_SESSION_PIN || dwFlags == CARD_AUTHENTICATE_SESSION_PIN) {
|
if (dwFlags == CARD_AUTHENTICATE_GENERATE_SESSION_PIN || dwFlags == CARD_AUTHENTICATE_SESSION_PIN) {
|
||||||
if (! (vs->reader->capabilities & SC_READER_CAP_PIN_PAD))
|
if (! (vs->reader->capabilities & SC_READER_CAP_PIN_PAD))
|
||||||
|
|
Loading…
Reference in New Issue