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

From
Eugene Muzychenko (2:5000/14)
To
Ihor Osov'yak ()
Date
2003-04-22T12:03:14Z
Area
SU.WINDOWS.NT.PROG
Привет!

21 Apr 03 20:17, you wrote to All:

 Iy> То есть, в драйвер передаются не сами данные, а поинтер на них.

Ну а как ты представляешь себе передачу в драйвер "самих данных" неопределенного заранее размера? ;)

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

При BUFFERED буфер _всегда_ виден - он выделяется в системном пуле, который доступен в любом контексте. А вот в DIRECT нужно его отобразить с помощью MmGetSystemAddressForMdl (раскрывается в MmMapLockedPagesXXX).

 Iy> То есть получается, что из kernel mode можно работать по поинтеру,
 Iy> который передан из пользовательского режима? Насколько така техника
 Iy> безопасна?

Если указатель "родной" пользовательский (NEITHER, без переотображения) - то можно его использовать лишь в уверенности, что тебя вызвали напрямую из user-mode. Соответственно, класть его куда-нибудь "на потом" недопустимо.

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

Как именно?

Всего доброго!
Евгений Музыченко

--- GoldED+/W32 1.1.4.7
 * Origin: Fox Tracks, Novosibirsk, Russia (2:5000/14)