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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: IRM_MJ_READ\_WRITE  (Прочитано 6713 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
zobot
Гость
« : 01-12-2003 09:50 » 

Хай, вот такая борода:
IRP_MJ_DEVICE_CONTROL получает указатель на буффер(buffer) из
DeviceIoControl(fh,TEST,NULL,0,&buffer,1,&ReturnedLength,NULL);

а вот IRP_MJ_READ\_WRITE
pIrpStack->Parameters.Read.Length получает правильно, а
в IOBuffer = pIrp->AssociatedIrp.SystemBuffer; получает 0.

как вот указатель на буффер из ReadFile получить?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 01-12-2003 12:36 » 

Все зависит от того какой флаг у твоего DEVICE_OBJECT.

Если флаг DO_DIRECT_IO , тогда вся инфа об буфере находится в Irp->MdlAddress, где указатель на структуру mdl, описывающую буфер. Это так называемый Direct Method.

Если флаг DO_BUFFERED_IO, тогда буфер в системном адресном пространстве, а указатель на него в  Irp->Associated­Irp.SystemBuffer. Это буферезованный метод, при котором создается буфер в системном пуле и через него копируются данные в пользовательский буфер.

Если нет вышеприведенных флагов, то используется Neither Method, что означает что передается указатель на буфер в пользовательском адресном пространстве, верный только в контексте сделавшего запрос процесса, адрес буфера в Irp->UserBuffer.

Отмечу, что IOCTL коды имеют свой флаг, указывающий на способ передачи буфера, флаг DEVICE_OBJECT не флияет на способ передачи адресса буфера в IRP_MJ_DEVICE_CONTROL.
Записан
Canavaro
Гость
« Ответ #2 : 07-04-2004 11:52 » new

а если я приатачился ко всем замонтированым в системе волумам и мне теперь необходимо перехватывать чтение и запись данных и что то делать с ними, где мне искать указатель на эти данные ...
и потом есть ещё так назыаемые FastIo операции, с помощью них тоже передаются данные ...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #3 : 07-04-2004 13:16 » 

Цитата

а если я приатачился ко всем замонтированым в системе волумам и мне теперь необходимо перехватывать чтение и запись данных и что то делать с ними, где мне искать указатель на эти данные ...


Там же где и у обычных запросов READ/WRITE
Цитата

и потом есть ещё так назыаемые FastIo операции, с помощью них тоже передаются данные ...


там буфера как параметры при вызове ф-ции
Записан
Anonymous
Гость
« Ответ #4 : 08-04-2004 06:26 » 

а установленные флаги мне проверять в каком DEVICE_OBJECT, в своем что ли (который приитачен к DEVICE_OBJECT-у волума)? ведь операции READ\WRITE по идее предназначены для него ...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines