· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ZEN —› Написал драйвер, но есть проблемы (непонятка)

Посл.отвђт Сообщенiе


Дата: Мар 30, 2004 13:07:22

Написал простенький драйвер, работаю с ним исключительно через DeviceIoControl и соотв-но через коды действия.
Проблема(непонятка): после загрузки драйвера делаю первый вызов DeviceIoControl (SoftIce-ом ловлю этот вызов - всё Ок), жму Ctrl-D и снова влетаю в SoftIce на IRP_MJ_DEVICE_CONTROL (уже второй раз, хотя DeviceIoControl только одна).
Т.е. получается на один вызов DeviceIoControl два входа в драйвер.


Дата: Мар 30, 2004 15:03:17

Прочитал несколько раз - ничего не понял. Что значит "SoftIce-ом ловлю этот вызов". Что конкретно ты ловишь и как: вызов DeviceIoControl в юзере или функцию диспетчеризации IRP_MJ_DEVICE_CONTROL в ядре?


Дата: Мар 31, 2004 14:02:56

Извеняюсь за кривое описание проблемы.

1. "SoftIce-ом ловлю этот вызов" - брекпоинт на функции диспетчеризации IRP_MJ_DEVICE_CONTROL в ядре.
2. "жму Ctrl-D" - прохожу по коду до вызова функции IoCompleteRequest и закрываю SoftIce.
3. "снова влетаю в SoftIce на IRP_MJ_DEVICE_CONTROL" - тут же опять попадаю (в SoftIce-е см.п.1) на IRP_MJ_DEVICE_CONTROL в ядре но с другим кодом действия (при этом я DeviceIoControl с этом кодом не вызывал).
Т.е. получается на один вызов DeviceIoControl два входа в драйвер.


Дата: Мар 31, 2004 14:57:56

Что-то ты не так делаешь. Возьми у мя в KmdKit пример examples\simple\Skeleton и проделай с ним то же самое. Должно быть одно вхождение в функцию диспетчеризации IRP_MJ_DEVICE_CONTROL.


Дата: Мар 31, 2004 15:16:39

Извени Fou-F, я тут новенький...

как мне взять у тебя в KmdKit примерexamples\simple\Skeleton?


Дата: Мар 31, 2004 17:04:29


Дата: Апр 2, 2004 11:04:50

Да Four-F если интересно, драйвер к меня всётаки заработл....
я просто поменял местами две строчки.
Было:
InitData = irp->AssociatedIrp.SystemBuffer;
KeInitializeEvent(&DeviceExtension->WaitEvent, NotificationEvent, FALSE);

стало:
KeInitializeEvent(&DeviceExtension->WaitEvent, NotificationEvent, FALSE);
InitData = irp->AssociatedIrp.SystemBuffer;

и всё заработало.
Разбираться нет времени, проект здавать надо, но как только время появится, обязательно покапаю.


Дата: Апр 2, 2004 13:03:14

Как же ты не разбираясь строчки то менял? Методом научного тыка? :) Вообще говоря, разницы то никакой. Эти две строчки никак друг с другом не коррелируют.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063