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

From
Gennady Mayko ()
To
Ihor Osov'yak ()
Date
2003-04-21T22:13:32Z
Area
SU.WINDOWS.NT.PROG
From: "Gennady Mayko" <gennady.mayko@broadcom.com>

Добрый день!

 IOy> идущие вглубь драйвера.

 IOy>  То есть, в драйвер передаются не сами данные, а поинтер на них.
 IOy> Драйвер потом успешно эти данные получает. Примерно по такой же схеме
 IOy> данные возвращаются, только там не METHOD_BUFFERED, а METHOD_NEITHER..
 IOy> Область данных, на которые смотрят эти поинтера распределяются конечно в
 IOy> win32 и на время выполнения DeviceIoControl живы и никуда не исчезают -
 IOy> DeviceIoControl выполняется в синхронном режиме.

 IOy>  Я был убежден, что это чушь, пока сам не увидел работающего изделия по
 IOy> такому принцыпу и его исходники.. Которые сам компилил :-).

 IOy>  Это дело проверялось под W2K.

 IOy>  То есть получается, что из kernel mode можно работать по поинтеру,
 IOy> который передан из пользовательского режима?
 IOy> Насколько така техника безопасна?
--
В принципе, если рассматриваемый драйвер всегда выполняется в адресном
пространстве приложения, которое его вызывает, то это допустимо. Однако никто
этого гарантировать не может и можно легко представить себе ситуации, когда
это не будет выполняться.
Еще одной проблемой является то, что передача только указателя не позволяет в
драйвере в общем случае определить размер передаваемых данных.

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


 IOy>  Зы - я в общем то заинтересован доказать, что так работать плохо...

 IOy> Спасибо за внимание

--
С уважением,
Геннадий Майко.

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)