Re: Не выполняется CreateFile для моего драйвера...
От: ns2005  
Дата: 28.03.06 08:16
Оценка:
Здравствуйте, Aerina, Вы писали:

A>Переделала пример RamDisk — перенесла создание в DriverEntry. Загружаю его с помощью SCManager... диск появляется, форматируется (в FAT) корректно, с ним можно работать. Но когда я пытаюсь отгрузить диск – ничего не происходит. То есть не вызывается DriverUnload. Если, например, убрать форматирование, то DriverUnload вызывается нормально. И я потом снова могу подключить диск. Подскажите, почему я не могу корректно подключать и отключать диск? Реализованы: IRP_MJ_CLEANUP, IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_DEVICE_CONTROL, DriverUnload.


A>И еще, если я пытаюсь в своем тестовом приложении послать сообщение своему драйверу, то функция CreateFile("\\\\.\\Z:", GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL) возвращает не нулевой хендл только в том случае, когда я не работаю с диском (например, закрываю проводник, открываю его на других дисках…), а так вообще не хочет давать мне возможность обратиться к драйверу…


Начну с того, что фильтрами файловых систем пока плотно не занимался. Но, возможно здесь решение аналогичное используемому в моем драйвере контроля доступа к некоторому устройству.
Ситуация следующая: в драйвере-фильтре с возможностью управления должно быть 2 устройства (как минимум).
Одно — в стеке устройств, другое — устройство управления.
Z-устройство у Вас находится в стеке устройства (виртуального диска), а управляющие коды необходимо посылать устройству управления, для которого должны быть созданы свое устройство (IoCreateDevice) и символическая ссылка (IoCreateSymbolicLink). Все запросы к обоим устройствам идут в одну диспетчерскую функцию, которая, если DeviceObject указывает на устройство управления, вызывает функцию обработки кодов управления (IOCTL)(по-моему, у Вас они не определены).
Если же объект не является устройством управления, то обрабатываем как дисковые запросы.
Вроде бы так.
Для лучшего понимания темы желательно скачать KmdKit и KmdTut by Four-F.
Есть тут:http://four-f.narod.ru/ и тут:http://www.wasm.ru. Там есть фильтр клавиатуры (и мыши) с управлением.
Если что — пишите.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.