2011/8/11 Viktor Tarasov <viktor.tara...@gmail.com>:
> Le 08/08/2011 16:31, Ludovic Rousseau a écrit :
>>
>> 2011/7/19 Viktor Tarasov<viktor.tara...@gmail.com>:
>>>
>>> Le 18/07/2011 14:52, Ludovic Rousseau a écrit :
>>>>
>>>> 2011/7/10 Viktor Tarasov<viktor.tara...@gmail.com>:
>>>>>
>>>>> Hi,
>>>>
>>>> Hello,
>>>>
>>>>> there is patch proposal to treat properly the 'detach token(reader)'
>>>>> event
>>>>> and to remove the slots associated to the removed token.
>>>>>
>>>>> Tested in Linux and windows.
>>>>> 'SCardGetStatusChange' have different behavior in Linux and Windows.
>>>>> Needs to be studied and validated for Mac.
>>>>>
>>>>>
>>>>>
>>>>> https://github.com/viktorTarasov/OpenSC/commit/62bda63bd66c4849c0ca4303a9682fb6f6bacd7d
>>>>
>>>>  /* When token is hot-unplugged:
>>>>   * - in Linux (pcsc-lite)
>>>>   * -- SCardGetStatusChange returns OK;
>>>>   * -- current reader state is 'UNKNOWN';
>>>>   * -- 'Refresh-attributes' returns 'SC_ERROR_READER_DETACHED'.
>>>>   *
>>>>   * - in Windows (WinSCard):
>>>>   * -- SCardGetStatusChange failes with SCARD_E_NO_READERS_AVAILABLE;
>>>>   * -- 'Refresh-attributes' returns 'SC_ERROR_NO_READERS_FOUND'.
>>>>   *
>>>>   * - FIXME: Mac?
>>>>   */
>>>>
>>>> I just checked on Mac OS X 10.6.8 (Snow Leopard) and I have nearly the
>>>> same result as on GNU/Linux.
>>>> On GNU/Linux : new state is 14 =>    ['Changed', 'Unknown',
>>>> 'Unavailable']
>>>> On Mac OS X : new state is 6 =>    ['Changed', 'Unknown]
>>>>
>>>> On Windows, do you also get the error SCARD_E_NO_READERS_AVAILABLE
>>>> when you use TWO readers in the SCardGetStatusChange() call?
>>>
>>> I do not completely follow.
>>>
>>> SCardGetStatusChange is called by refresh_attributes(sc_reader_t
>>> *reader).
>>> In this context there is only one reader.
>>>
>>> When this reader is unplugged in Windows the SCardGetStatusChange returns
>>> 8010002E -- SCARD_E_NO_READERS_AVAILABLE.
>>> In Linux SCardGetStatusChange returns OK and properly sets a new reader
>>> status.
>>> Imho both have a reason.
>>
>> I can't reproduce the "problem" on my Windows XP using my Python sample.
>>
>> If SCardGetStatusChange() is called with a removed/unknown reader then
>> Windows SCardGetStatusChange() returns with SCARD_E_UNKNOWN_READER. I
>> just changed pcsc-lite in revision 5881 to also return
>> SCARD_E_UNKNOWN_READER when called with unknown reader(s).
>>
>> If I unplug a reader while SCardGetStatusChange() is running I get
>> SCARD_S_SUCCESS and the new reader state is ['Ignore', 'Changed',
>> 'Unavailable']
>>
>> Viktor, are you using Windows XP? or a newer version?
>
> I use WindowsXP SP2 in VM and pkcs11-tool from OpenSC to make the tests .
> I will experiment with more debugs to get know the details of the calling
> context .

I used my Python sample test
http://anonscm.debian.org/viewvc/pcsclite/trunk/PCSC/UnitaryTests/SCardGetStatusChange.py?view=markup

> For you the 'normal' behavior of SCardGetStatusChange() is to return
> SCARD_S_SUCCESS and appropriate reader status,
> is it so?

Yes. Unless the reader is unknown (has been removed) _before_
SCardGetStatusChange() is called.

>From your log opensc-debug.win32.detach-unique-token.log I interpret it as:
- OpenSC gets a card removed event
2011-07-22 11:34:45.763 'Aktiv Rutoken ECP 0' before=0x00010122 now=0x0000000B
2011-07-22 11:34:45.763 card removed event

- OpenSC calls SCardGetStatusChange() and get SCARD_E_NO_READERS_AVAILABLE
2011-07-22 11:34:45.950 [opensc-pkcs11]
reader-pcsc.c:361:pcsc_detect_card_presence: called
2011-07-22 11:34:45.950 Aktiv Rutoken ECP 0 check
2011-07-22 11:34:45.950 Aktiv Rutoken ECP 0:SCardGetStatusChange
failed: 0x8010002e
2011-07-22 11:34:45.950 [opensc-pkcs11]
reader-pcsc.c:365:pcsc_detect_card_presence: returning with: -1101 (No
readers found)

Since this is a token, a card removed event is also a reader removed event.
So it is normal to get an error from SCardGetStatusChange(). pcsc-lite
will return SCARD_E_UNKNOWN_READER instead of
SCARD_E_NO_READERS_AVAILABLE returned by Windows XP.
Windows XP also returns SCARD_E_UNKNOWN_READER (with my sample). So I
guess my Python sample does not do exactly what OpenSC is doing.

I will do more testing and try to find in which cases Windows returns
SCARD_E_NO_READERS_AVAILABLE.

Bye

-- 
 Dr. Ludovic Rousseau
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to