Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Зато что называется "System friendly" :-) 09.01.06 17:08 Число просмотров: 2225
Автор: amirul <Serge> Статус: The Elderman
|
Отдельный драйвер в System-е это правильно.
Предложу пару "неправильных" (но возможно более красивых) вариантов:
1. Стать upper фильтром у класса "Дисковые Устройства". К тому моменту, когда вызовут твой AddDevice, девайс HarddiskVolumeX будет уже создан. Создавать и пихать на стек что-то свое вовсе необязательно
2. Во время инициализации заменить AddDevice какому нибудь фильтру "Дисковых Устройств" (например PartMgr-у). Главное чтоб твой драйвер проинициализировался позже этого самого фильтра (легко настраивается при помощи тегов и зависимостей). При входе в AddDevice нижние устройства (те самые HarddiskVolumeX) уже созданы, а при выходе над ними еще и фильтр торчит.
3. При инициализации перехватить IRP_MJ_PNP у PartMgr-а. После завершения IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_RELATIONS устройства будут созданы.
4. Фильтровать IRP_MJ_INTERNAL_DEVICE_CONTROL на предмет IoControlCode == 0x00760000 (Partition Arrived)
В общем отловить момент создания стека нужного устройства. Создается оно уже с проинициализированным, но не примаунченным VPB и при первой же попытке открыть файл на этом устройстве маунтится в IoCheckVpbMounted (которая вызывается из Parse процедуры - IopParseDevice). Из всех способов рекомендую остановиться на тех, которые позволяют отловить создание ВСЕГО стека, а не только самого HarddiskVolume (как по мне, лучше всего первый вариант)
Еще интересно узнать, что именно ты хочешь получить. Может получится перепоставить задачу, чтоб таких извращений не требовалось?
|
|
|