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

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

22 Apr 03 02:14, you wrote to you:

 Iy> Я пока придумал только такую ситуацию, кода один процесс открывает
 Iy> устройство, потом хендл этого устройства передает дочернному процессу,
 Iy> а тот уже запускает  соотв. IOCTL... В таком случае драйвер получит
 Iy> некоректные данные при передачи данных к нему, а при возврате проста
 Iy> чего то пропишет по адресам первого процесса. Ибо указатели будут
 Iy> инициализироваться в дочеренем процессе, а чтение и запись реально
 Iy> будет осуществлятся в адресном пространстве первого процесса..

Это означает, что драйвер ведет себя криво. Когда открывается устройство и создается HANDLE - еще не идет речи ни о каких буферах, адресах и т.п. Все буферы передаются по "рабочим" запросам - read/write/control. Если драйвер в состоянии полностью обработать запрос сразу - он может залезть напрямую в буфер, взять, что нужно, положить свое и завершить запрос. Если он хочет вернуть pending, а метод обмена стоит DIRECT - ему нужно сделать отображение буфера в системном адресном пространстве, и лазить только в него. Соответственно, какой бы процесс ни выдал запрос к HANDLE - работа с памятью будет идти в терминах физических страниц, а не виртуальных.

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

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