Re: DeviceIoControl,METHOD_BUFFERED и данные по поинтеру Win32,

From
Ihor Osov'yak ()
To
Gennady Mayko ()
Date
2003-04-21T23:12:42Z
Area
SU.WINDOWS.NT.PROG
From: "Ihor Osov'yak" <osi@osi.te.ua>


"Gennady Mayko"wrote in message
> Добрый день!
>
>  IOy> идущие вглубь драйвера.
>
>  IOy>  То есть, в драйвер передаются не сами данные, а поинтер на них.
>  IOy> Драйвер потом успешно эти данные получает. Примерно по такой же
схеме
..
>
>  IOy>  То есть получается, что из kernel mode можно работать по поинтеру,
>  IOy> который передан из пользовательского режима?
>  IOy> Насколько така техника безопасна?
> --

> В принципе, если рассматриваемый драйвер всегда выполняется в адресном
> пространстве приложения, которое его вызывает, то это допустимо. Однако
никто
> этого гарантировать не может и можно легко представить себе ситуации,
когда
> это не будет выполняться.

Спасибо за ответ.

Если можно, то об этом несколько более подробно.. Я не совсем представляю
себе механизм взаимодействия адресных пространсв драйвера и процесса.. В
этом изделии драйвер запускается как сервис по запросу. Открывеется по имени
устройства, созданного драйвером. По завершении работы приложения  драйвер
не выгружается. Если приложение запустить снова, то все работет нормально.
В каком процессе работает драйвер при первом запуске приложения и при
втором? Как соотносятся адрессные пространства приложения и драйвера? Исходя
из того, что наблюдаем, есть подозрение, что здесь происходит нечто подобное
до мапирования длл на адрессное пространство процесса, использующего длл,
только "наоборот". То есть адресное пространство процесса становится
доступным для драйвера.. ??????????

Да, и привидите пожалуйста пример, когда " ситуации, когда это не будет
выполняться.", тем более что "легко представить "

> Еще одной проблемой является то, что передача только указателя не
позволяет в
> драйвере в общем случае определить размер передаваемых данных.
>
Ну там эта проблема решается до безобразия просто. Указатели - PChar,
смотрят на буфферы выделенные с гарантированным запасом.. Данные - обычная
нуль-терминейт строка...

> Поэтому я думаю, что такая техника не безопасна. Надежнее просто
передавать
> сами данные (буфер) через DeviceIoControl. Если данных много, то,
наверное,
> лучше использовать METHOD_IN_DIRECT вместо METHOD_BUFFERED.
>

Дык и я сторонник такого подхода. Но вот встретился с несовсем понятной
техникой..


Еще раз спасибо за внимание.


-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)