Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

Помогите "сами мы тут не местным" :)   Найти похожие ветки 

 
Riply ©   (2008-01-03 12:01) [0]

Здравствуйте !
Есть предположение , что DeviceIoControl, работает так:
const
FILE_DEVICE_FILE_SYSTEM         = $00000009;

function DeviceIoControl(hDevice: THandle; dwIoControlCode: DWORD; lpInBuffer: Pointer;
 nInBufferSize: DWORD; lpOutBuffer: Pointer; nOutBufferSize: DWORD;
 var lpBytesReturned: DWORD; lpOverlapped: POverlapped): BOOL;
begin
//...
if lpOverlapped <> nil then
 begin
  //...
  if (IoControlCode shr 16) = FILE_DEVICE_FILE_SYSTEM
   then Result := NtFsControlFile(...
   else Result := NtDeviceIoControlFile(...
  //...
 end
else
 begin
  //...
  if (IoControlCode shr 16) = FILE_DEVICE_FILE_SYSTEM
   then Result := NtFsControlFile(...
   else Result := NtDeviceIoControlFile(...
  //...
 end
//...
end;


Интересует именно условие выбора (if (IoControlCode shr 16) = FILE_DEVICE_FILE_SYSTEM),
по которому вызывается либо NtFsControlFile, либо NtDeviceIoControlFile.
Правильно ли оно описано в приведенном коде ?
Кто умеет читать CPU - Window, проверте, пожалуйста.


 
Ketmar_   (2008-01-03 12:35) [1]

да чего ты мучаешься? в Реакторе глянь…


 
Riply ©   (2008-01-03 12:47) [2]

> [1] Ketmar_   (03.01.08 12:35)
> да чего ты мучаешься? в Реакторе глянь…

Слишком часто встречаются различия между реальным
кодом и кодом в "реакторе" :(.
Эта частота, даже выходит за рамки приличия :)


 
Ketmar_   (2008-01-03 13:17) [3]

ну, если я выпью столько, чтобы запустить VirtualBox, и никто до этого не ответит — гляну. только надо OllyDbg скачать. кстати, щаз и скачаю.


 
_Mike_   (2008-01-03 13:28) [4]


> Riply ©   (03.01.08 12:01)  

Абсолютно не так.

В первую очередь, DeviceIOControl проверяет что за Handle ей передан. В соответсвии с переданным Handle ищется драйвер устройства, для которого сей Handle открыт. После этого формируется IRP блок запроса, который и помещается в очередь соответствующего драйвера.

Следует так же учесть, что IRP выполняется через APC (асинхронный выхов процедур) (в подавляющем большинстве). Следовательно DeviceIOControl создает объект типа Mutex и ждет на нем заверения APC (если флаг Overlapped не указан), либо инифиализирует Overlapped и возвращает управление.

После того, как драйвер обработал запрос (когда это случится - только одному Биллу известно) он устанавливает событие об окончании APC и ваше приложение получает управление (событие в Overlapped сигналит).

Все это весьма упрощенно, но дает некое продставление.


 
Ketmar_   (2008-01-03 13:41) [5]

а вот щаз я немножко поспорю. таки всё, что ты описал — оно происходит, но уровнем ниже. сама же DeviceIOControl() именно что выбирает диспетчер, который будет дёргать драйвера. вот о принципе такого выбора и спрошено было. я так помню.

если что — прошу учесть текущее число и бодун. %-)


 
guav ©   (2008-01-03 15:19) [6]

Глянул в дизассемблер.
Проверка if (IoControlCode and $FFFF0000 = $00009) действительно есть, выбор между NtDeviceIoControlFile и NtFsControlFile действитеьно есть (причём у каждой две точки вызова), дальше смотреть лень, но похоже идея правильная.


 
guav ©   (2008-01-03 15:21) [7]

7C801636  and         eax,0FFFF0000h // eax := eax and $FFFF0000
7C80163B  cmp         eax,90000h     // if eax = $90000 then
7C801640  setne       al             // al := 0 else al := 1;


 
Riply ©   (2008-01-03 15:57) [8]

> [6] guav ©   (03.01.08 15:19)
> [7] guav ©   (03.01.08 15:21)

Вот и здорово.
Спасибо, Саш, большое :)


 
_Mike_   (2008-01-03 21:38) [9]


> сама же DeviceIOControl() именно что выбирает диспетчер,
>  который будет дёргать драйвера. вот о принципе такого выбора
> и спрошено было. я так помню.

Таки да.



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
15-1199526226
Kostafey
2008-01-05 12:43
2008.02.10
С днем рождения ! 5 января


9-1166964532
nordic3
2006-12-24 15:48
2008.02.10
Рисование в Image


2-1200836236
KROT
2008-01-20 16:37
2008.02.10
Запро по базе данных и переход на нужную запись (Помогите)


1-1193752142
Иван_А
2007-10-30 16:49
2008.02.10
WebBrowser


15-1199706562
DI-524
2008-01-07 14:49
2008.02.10
Вопрос к владельцам сабжа