Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > как связать IRP_MJ_READ и IRP_MJ_WRITE


Автор: DrHex 10.9.2009, 13:05
Как можно сделать связь IRP_MJ_READ и IRP_MJ_WRITE с таким что было было известно с оного ли они процесса были посланны.
То и есть вызывается IRP_MJ_WRITE потом логика для работы с данными, после чего в драйвер приходит запрос на IRP_MJ_READ и надо дать ответ.
Но так как приходит он не сразу то драйвер должен понимать какой процесс 

С драйвером работают N процессов. От процессов в произвольное вреся происхоти запрос IRP_MJ_WRITE. После чего происходит обработка запроса. И еще через промежуток времени происходти IRP_MJ_READ. Так вот ответ для каждого процесса будет иникальным, как мне можно узнать от какого процесса прижел запрос??? 

То и есть IRP_MJ_WRITE + process_ID_write 
И когда приходит IRP_MJ_READ + process_ID_read и ищу у себя ответ для данного процесса.????


Автор: xvr 10.9.2009, 13:23
И IRP_MJ_READ и IRP_MJ_WRITE приходят напрямую из пользовательского процесса (если конечно где то сверху не затесался драйвер-фильтр   smile ). Поэтому ID текущего процесса и будет тем самым ID, см http://msdn.microsoft.com/en-us/library/ms802959.aspx

Автор: DrHex 11.9.2009, 10:42
xvr спасибо, я это видел, просто думал может как то можно два handle связать.....

Автор: xvr 11.9.2009, 16:32
Цитата(DrHex @ 11.9.2009,  10:42)
xvr спасибо, я это видел, просто думал может как то можно два handle связать.....

handle'ы чего надо связать? Если те, что вернул CreateFile у пользователя, то посмотри на поле FileObject в IO_STACK_LOCATION
Код

static NTSTATUS DRV_Handler(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
   IO_STACK_LOCATION* pIrpStack = IoGetCurrentIrpStackLocation(Irp);
   pIrpStack->FileObject
}


Автор: DrHex 11.9.2009, 18:04
xvr мне нужно связать handle чтения и записи их два....
Один на чтения а второй на запись(одним не обойтись все дело в асинхронности).
Судя со всего только через id процесса.

Автор: xvr 11.9.2009, 20:10
Цитата(DrHex @ 11.9.2009,  18:04)
xvr мне нужно связать handle чтения и записи их два....
Один на чтения а второй на запись

Что такое 'handle чтения' и 'handle записи'?
Цитата

(одним не обойтись все дело в асинхронности).
Кто мешает асинхронно из 2х потоков ОДНОВРЕМЕННО писать/читать по одному и тому же handle'у?
Цитата

Судя со всего только через id процесса.
По id процесса свяжутся ВСЕ handle'ы, которые в нем окажутся.
Не совсем понятна общая постановка задачи  smile Что происходит в user space?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)