Кто-нибудь знает какая !!точно!! последовательность действий
Resource Manager при вызове с него SCardListReaders.
Интересует:
1) какие точно узлы регистри опрашиваются, что из низ извлекается
2) продолжает ли работу функция (SCardListReaders)при неудачном поиске по регистри.
3) обращается ли функция (SCardListReaders) к I/O Manager-у?
4) Если да, обращается ли I/O Manager к драйверам считок? (если да, то с какими именно с какими IRP ?)
Проблема то собственно в чем: Пишу драйвер для виртуальной смарт-считки. Шина — busenum.sys (от Toaster-a из exampl-ов DDK).
В FDO заполняю все структуры (по образу и подобию — как это сделано в bulltlp3 и pscr), все callback-и
(SmartcardExtension->ReaderFunction[RDF_CARD_POWER], SmartcardExtension->ReaderFunction[RDF_TRANSMIT] , .. и т.д.)
Регистрирую toaster.sys как драйвер,
относящийся к классу SmartCard:
...
Class=SmartCardReader
ClassGuid={50DD5230-BA8A-11D1-BF5D-0000F805F530}
...
В IoCreateDevice указываю:
status = IoCreateDevice (DriverObject,
sizeof (FDO_DATA),
NULL,
FILE_DEVICE_SMARTCARD,
0, //FILE_DEVICE_SECURE_OPEN,
FALSE, //TRUE
&deviceObject);
Драйвер загружается/выгружается (через enum.exe), работает.. Но как драйвер смарт-кард ридера не определяется —
SCardListReaders возвращает SCARD_E_NO_READERS_AVAILABLE.
Пользуюсь: Dbgview.exe, Regmon.exe
Но все-равно не могу понять как все-таки работает SCardListReaders — чего ему надо, чтобы драйвер
определялся как драйвер смарт-кард ридера??