Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Посылка IRP устройству  (Прочитано 4222 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vvoid
Гость
« : 02-08-2005 12:49 » 

Здравствуйте, я всё о том же своём драйвере виртуального диска!

Общая структура работы драйвера может быть охарактеризована следующим образом:
1. При загрузке драйвера создаётся корневое (Root) устройство, функции которого принимать и обрабатывать мои IRP (на монтирование/отмонтирование дисков, возврат некоторой инфы о драйвере и устройствах и т.д).
2. Далее монтируется диск (назовём его Disk1). Соответственно эти устройства выстраиваются в односвязный список, т.е.
           (Disk1DeviceObjectPtr->NextDevice == RootDeviceObjectPtr)
           (RootDeviceObjectPtr->NextDevice == NULL).
   Если примоттировать ещё один диск (Disk2), то список будет иметь такой вид:
           (Disk2DeviceObjectPtr->NextDevice == Disk1DeviceObjectPtr)
           (Disk1DeviceObjectPtr->NextDevice == RootDeviceObjectPtr)
           (RootDeviceObjectPtr->NextDevice == NULL).
   Напрашивается вывод: Root - устройство более низкого уровня, по сравнению с Disk1 и Disk2, а Disk1, в свою очередь, находится на более низком уровне относительно Disk2.

Известно, что устройство может послать IRP (при помомщи IoBuildDeviceIoControlRequest, IoGetNextIrpStackLocation и последующеого IoCallDriver) драйверу (фактически его устройству, т.к. указывается DEVICE_OBJECT), который находится на более низком уровне.

А теперь суть вопроса. Могу ли я из своего Root девайса послать IRP, к примеру, устройсву Disk1?

PS* Мои пробы, которые, если коротко, сводились к последовательности IoBuildDeviceIoControlRequest, IoGetNextIrpStackLocation, IoCallDriver, заканчивались NULL-ём после вызова IoGetNextIrpStackLocation.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-08-2005 10:45 » 

ИМХО можешь....
кстати кто у тебя эти IRP завершает?
по логике обычно это делает драйвер RootDeviceObjectPtr, который запрос и посылал получается?
попробуй IoAllocateIrp вместо IoBuildDeviceIoControlRequest использовать))) только размер стека правильно указать надо...сообразно тому сколько их с списке...если не ошибаюсь.
Удачи!
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines