Здравствуйте, iGNER, Вы писали:
GNE>Можешь прислать пример драйвера — фильтра для USB (который расположился в стеке над usbhub.sys и под AnyUSBDevice.sys и ловит запросы к AnyUSBDevice) на igner@mail.ru ?
GNE>С уважением, GNE>иГНЕР
Написав этот драйвер фильтр сталкнулся со следующей ситуацией.
Драйвер мой правильно расположился в стеке над usbhub.sys и под usbstore.sys,
т.е. все запросы к флешке я ловлю, но вот появилась проблема:
1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя)
2) Для того чтобы получить результат после обработки запроса IRP_MJ_INTERNAL_DEVICE_CONTROL я так понимаю мне нужно позвать драйвер синхронно. (??????) Ну я это пытаюсь сделать через событие и IoSetCompletionRoutine, причем вызов выполняется и возвращается STATUS_SUCCESS. Но почему-то все зависает, такое ощещение, что Usbstore.sys ждет STATUS_PENDING. Что делать?
Может кто сталкивался с такой проблемой, напишите?
Здравствуйте, Yarilo, Вы писали:
Y>т.е. все запросы к флешке я ловлю, но вот появилась проблема: Y>1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя)
А spin_lock не подходит?
естественно что при синхронизации spin-ом все данные должны располагаться в non-paged memory.
Y>1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя)
код драйверов очень часто выполняется на IRQL = DISPATCH by NT design
Interlocks, critical sections (KeSynchronizeExecution) вплоть до DIRQL,
spinlocks, мьютексы-семафоры-события и ERESOURCES — вполне можно
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valerio, Вы писали:
Y>>1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя)
V>код драйверов очень часто выполняется на IRQL = DISPATCH by NT design
V>мьютексы-семафоры-события и ERESOURCES — вполне можно
Ась? Ждать с ненулевым таймаутом на DISPATCH_LEVEL нельзя — deadlock будет сразу и безусловно. Кроме того, не помешало бы иметь non-arbitrary thread context, чтобы ждать.
Здравствуйте, Alex Fedotov, Вы писали:
AF>Здравствуйте, Valerio, Вы писали:
Y>>>1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя)
V>>код драйверов очень часто выполняется на IRQL = DISPATCH by NT design
V>>мьютексы-семафоры-события и ERESOURCES — вполне можно
AF>Ась? Ждать с ненулевым таймаутом на DISPATCH_LEVEL нельзя — deadlock будет сразу и безусловно. Кроме того, не помешало бы иметь non-arbitrary thread context, чтобы ждать.
ДА, конечно пользоваться нужно как прописано, я ответил на вопрос чем _можно_ пользоваться.
_как_ написано в документации и тут я с Вами полностью согласен — пользоваться надо аккуратно
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Yarilo, Вы писали:
Y>Написав этот драйвер фильтр сталкнулся со следующей ситуацией. Y>Драйвер мой правильно расположился в стеке над usbhub.sys и под usbstore.sys, Y>т.е. все запросы к флешке я ловлю, но вот появилась проблема: Y>1) код драйвера фильтра выполняется на IRQL = DISPATCH, почему? И какие объекты синхронизации можно применять в этом случае? (FastMutex точно нельзя) Y>2) Для того чтобы получить результат после обработки запроса IRP_MJ_INTERNAL_DEVICE_CONTROL я так понимаю мне нужно позвать драйвер синхронно. (??????) Ну я это пытаюсь сделать через событие и IoSetCompletionRoutine, причем вызов выполняется и возвращается STATUS_SUCCESS. Но почему-то все зависает, такое ощещение, что Usbstore.sys ждет STATUS_PENDING. Что делать? Y>Может кто сталкивался с такой проблемой, напишите?
Y>С уважением Ярослав.
Можешь прислать пример драйвера — фильтра для USB на exkurs@nm.ru ?
Осмысление бессмысленности имеет определенныей смысл !
Здравствуйте, Yarilo, Вы писали:
Y>Написав этот драйвер фильтр сталкнулся со следующей ситуацией. Y>Драйвер мой правильно расположился в стеке над usbhub.sys и под usbstore.sys, Y>т.е. все запросы к флешке я ловлю, но вот появилась проблема: Y>...
Можешь прислать пример драйвера — фильтра для USB (который расположился в стеке над usbhub.sys и под AnyUSBDevice.sys и ловит запросы к AnyUSBDevice) на igner@mail.ru ?