Re: разработка дров под nt

From
Alex Fedotov ()
To
Kirill Neznamov ()
Date
2001-10-19T09:26:27Z
Area
SU.WINDOWS.NT.PROG
From: "Alex Fedotov" <me@alexfedotov.com>

Kirill Neznamov wrote:

> AF> Если это не драйвер, то что ты указываешь первым параметром
> AF> IoAttachDevice ?
>
> Да тоже что и в драйвере.Только в драйвере DeviceObject передается
> системой а здесь я его вычисляю сам примерно так:
> открываем порт (com2): zwCreateFile(&ntfile,...,..)
>
> ObReferenceObjectByHandle(&ntfile,...,&fileobject,...)
> ComDeviceObject=IoGetRelatedDeviceObject(fileobject)
> ^^^^^^^^^^^^^^
> получили 1ый параметр для функции IoAttachDevice.
> Приатачились к драйверу компорта вызовом IoAttachDevice().
> Но как дальше можно получить IRP пакет?

По моему, имеет место непонимание того, как работает driver layering в NT.

Функция IoAttachDevice имеет, как известно, три параметра:

NTSTATUS  IoAttachDevice(
    IN PDEVICE_OBJECT  SourceDevice,
    IN PUNICODE_STRING  TargetDevice,
    OUT PDEVICE_OBJECT  *AttachedDevice
    );

SourceDevice - это указатель на объект устройства которое будет layered
поверх другого устройства
TargetDevice - это имя устройства, поверх которого будет layered это самое
SourceDevice
AttachedDevice - принимает указатель на устройство TargetDevice (точнее, на
устройство, которое сейчас находится на верхушке стека)

Так вот, объясни нам, какое устройство поверх какого ты пытаешься to layer?

> 2ALL Меня сейчас вот что интересует.Есть прога TdiMon от SysInternals.
>      Она без драйвера перехватывает все Tdi сообщения (TDI_SEND,etc..)
>      Kто нить знает как она это делает? Исходники они не дают :(

Посмотри в ресурсы tdimon.exe. Драйвера в ресурсах (.sys и .vxd).

-- Alex Fedotov

--- ifmail v.2.15dev5
 * Origin: Undisclosed (2:5020/400)