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


Автор: shara 9.9.2009, 20:53
Форумчане такой вот вопрос:
есть фильтрующий драйвер файловой системы. в WDK сказано что он выполняется в контексте приложения обращающегося к драйверу. т.е. приложение вызывает CrateFile(...); и грубо говоря в этом месте управление получает  функция-обработчик запроса IRP_MJ_CREATE_FILE (или ему подобного,  зависит от ситуации). Допустим в этой функции я выделяю N-байт памяти под свои нужды, в связи с этим у меня вопрос, где именно эти N-байт будут храниться логически и  физически. И если другая программа тоже пытается обратиться к файлу, считай еще один  IRP_MJ_CREATE_FILE и еще одни N-байт выделенные под свои нужды. Будут ли видны оба этих N-байт памяти?  или функция будет видеть только ту область памяти которая была зарезервирована при вызовах только в КОНКРЕТНО этой исполняемой проге?

Автор: DrHex 10.9.2009, 12:40
Все очень просто. Выделяешь память то и освобождай. Выделил в драйвере значит он и должен освободить. Ну и конечно если он выделил он её и видит. 

Цитата

считай еще один  IRP_MJ_CREATE_FILE и еще одни N-байт выделенные под свои нужды. Будут ли видны оба этих N-байт памяти? 

Будут.


Цитата

 или функция будет видеть только ту область памяти которая была зарезервирована при вызовах только в КОНКРЕТНО этой исполняемой проге?

Нет. Драйверу доступна вся память (память  одного пользовательского процесса(можно переключатся между процессами) + kernel memory) . Когда выделение памяти происходит в драйвере то память выделяется в 'kernel memory' так что в драйвере это память доступна.



Автор: xvr 10.9.2009, 13:29
Цитата(DrHex @ 10.9.2009,  12:40)
Нет. Драйверу доступна вся память (память  одного пользовательского процесса(можно переключатся между процессами) + kernel memory) . 

Угу
Цитата

Когда выделение памяти происходит в драйвере то память выделяется в 'kernel memory' так что в драйвере это память доступна.
Не совсем так - драйвер может выделить память и в user space того процесса, от которого пришел запрос. Тогда она будет доступна пользовательскому процессу и иногда и самому драйверу  smile 

Автор: shara 10.9.2009, 20:18
to DrHex && xvr  - спасибо въехал.

Цитата(DrHex @  10.9.2009,  11:40 Найти цитируемый пост)
(память  одного пользовательского процесса(можно переключатся между процессами)

а как сие делается?

Автор: smoke_man 11.9.2009, 02:06
Посмотри в сторону MDL(Memory Descriptor List).

Автор: DrHex 11.9.2009, 10:41
Цитата

а как сие делается?

1)Посмотри в сторону MDL(Memory Descriptor List). 
2)KeAttachStackToProcess

Цитата

Не совсем так - драйвер может выделить память и в user space того процесса, от которого пришел запрос. Тогда она будет доступна пользовательскому процессу и иногда и самому драйверу

Все зависит как с памятью работать.

Автор: shara 11.9.2009, 18:32
Цитата(DrHex @  11.9.2009,  09:41 Найти цитируемый пост)
1)Посмотри в сторону MDL(Memory Descriptor List). 
2)KeAttachStackToProcess

кажися въехал. а не так то оно все и сложно как кажется с первого взгляда... нужно просто вдумчиво читать то что пишут в документациях аля WDK ну и форум)))
спасибо камрады  smile 

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