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)