Microsoft KB Archive/230031

{|
 * width="100%"|

BUG: SCardBeginTransaction May Fail to Detect a Reset Card

 * }

Q230031

-

The information in this article applies to:


 * Microsoft Win32 Application Programming Interface (API), included with:
 * Microsoft Windows 98
 * Microsoft Windows 95
 * the operating system: Microsoft Windows NT

-

SYMPTOMS
For Smart Card Resource Manager version 1.0, when a blocked SCardBeginTransaction call returns after another thread or process reset the card, the return code is still set to SCARD_S_SUCCESS, instead of SCARD_W_RESET_CARD.

CAUSE
The problem is caused by an anomaly in this API.

RESOLUTION
Call SCardStatus immediately after SCardBeginTransaction to make sure the card has not been reset.

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.

MORE INFORMATION
The following scenario produces the described problem:

Thread1                        Thread2 ---                        ---  SCardBeginTransaction(...); ... ---> A switch to Thread2 occurs here.

ret = SCardBeginTransaction; //Blocking <--- A switch to Thread1 occurs here.

ret =SCardEndTransaction(hCard, SCARD_RESET_CARD) ... ---> A switch to Thread2 occurs here. // Thread2 transaction is started here // and return value is SCARD_S_SUCCESS. // No warning that the card was reset!