Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
IRM_MJ_READ\_WRITE
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: IRM_MJ_READ\_WRITE (Прочитано 6713 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
zobot
Гость
IRM_MJ_READ\_WRITE
«
:
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
Главный специалист
Offline
IRM_MJ_READ\_WRITE
«
Ответ #1 :
01-12-2003 12:36 »
Все зависит от того какой флаг у твоего DEVICE_OBJECT.
Если флаг DO_DIRECT_IO , тогда вся инфа об буфере находится в Irp->MdlAddress, где указатель на структуру mdl, описывающую буфер. Это так называемый Direct Method.
Если флаг DO_BUFFERED_IO, тогда буфер в системном адресном пространстве, а указатель на него в Irp->AssociatedIrp.SystemBuffer. Это буферезованный метод, при котором создается буфер в системном пуле и через него копируются данные в пользовательский буфер.
Если нет вышеприведенных флагов, то используется Neither Method, что означает что передается указатель на буфер в пользовательском адресном пространстве, верный только в контексте сделавшего запрос процесса, адрес буфера в Irp->UserBuffer.
Отмечу, что IOCTL коды имеют свой флаг, указывающий на способ передачи буфера, флаг DEVICE_OBJECT не флияет на способ передачи адресса буфера в IRP_MJ_DEVICE_CONTROL.
Записан
Canavaro
Гость
IRM_MJ_READ\_WRITE
«
Ответ #2 :
07-04-2004 11:52 »
а если я приатачился ко всем замонтированым в системе волумам и мне теперь необходимо перехватывать чтение и запись данных и что то делать с ними, где мне искать указатель на эти данные ...
и потом есть ещё так назыаемые FastIo операции, с помощью них тоже передаются данные ...
Записан
SlavaI
Главный специалист
Offline
IRM_MJ_READ\_WRITE
«
Ответ #3 :
07-04-2004 13:16 »
Цитата
а если я приатачился ко всем замонтированым в системе волумам и мне теперь необходимо перехватывать чтение и запись данных и что то делать с ними, где мне искать указатель на эти данные ...
Там же где и у обычных запросов READ/WRITE
Цитата
и потом есть ещё так назыаемые FastIo операции, с помощью них тоже передаются данные ...
там буфера как параметры при вызове ф-ции
Записан
Anonymous
Гость
IRM_MJ_READ\_WRITE
«
Ответ #4 :
08-04-2004 06:26 »
а установленные флаги мне проверять в каком DEVICE_OBJECT, в своем что ли (который приитачен к DEVICE_OBJECT-у волума)? ведь операции READ\WRITE по идее предназначены для него ...
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
IRM_MJ_READ\_WRITE
Загружается...