diff --git a/opensc/src/libopensc/reader-pcsc.c b/opensc/src/libopensc/reader-pcsc.c index f41735076..c65d2c2e4 100644 --- a/opensc/src/libopensc/reader-pcsc.c +++ b/opensc/src/libopensc/reader-pcsc.c @@ -298,8 +298,17 @@ static int refresh_attributes(sc_reader_t *reader) reader->flags &= ~SC_READER_CARD_CHANGED; SC_FUNC_RETURN(reader->ctx, SC_LOG_DEBUG_VERBOSE, SC_SUCCESS); } - PCSC_TRACE(reader, "SCardGetStatusChange failed", rv); - return pcsc_to_opensc_error(rv); + else if (rv == (LONG)SCARD_E_UNKNOWN_READER) + { + /* No reader by requested name known to subsystem, lets consider the reader as detached */ + reader->flags &= ~(SC_READER_CARD_PRESENT); + SC_FUNC_RETURN(reader->ctx, SC_LOG_DEBUG_VERBOSE, SC_SUCCESS); + } + else + { + PCSC_TRACE(reader, "SCardGetStatusChange failed", rv); + return pcsc_to_opensc_error(rv); + } } state = priv->reader_state.dwEventState; prev_state = priv->reader_state.dwCurrentState;