Странности с DispatchTable для \FileSystem\NTFS
От: -prus-  
Дата: 14.11.16 16:19
Оценка:
Всем доброго времени суток!

Есть код, который показывает перехваченные функции обработки IRP и FastIO драйверов.
На одной из ОС Win7x64 sp1 вижу такой результат для драйвера ntfs.sys (для некоторых других драйверов ситуация похожая):

IRP
DriverName   = \FileSystem\Ntfs    
DispatchName = IRP_MJ_CREATE    
Address      = FFFFFA80197602C0
>
DriverName   = \FileSystem\Ntfs    
DispatchName = IRP_MJ_CREATE_NAMED_PIPE    
Address      = FFFFF80003472C60
>
DriverName   = \FileSystem\Ntfs    
DispatchName = IRP_MJ_CLOSE    
Address      = FFFFFA80197602C0
...
...
...
>
DriverName   = \FileSystem\Ntfs    
DispatchName = IRP_MJ_PNP/IRP_MJ_PNP_POWER    
Address      = FFFFFA80197602C0

FastIO
...
...
DriverName   = \FileSystem\Ntfs    
DispatchName = FAST_IO_DISPATCH->FastIoQueryOpen    
Address      = FFFFFA8019760570
...
...

Удаленно подцепиться отладчиком возможности нету, поэтому сам специально падаю в BSoD и изучаю дамп отладчиком дамп:
0: kd> !drvobj \FileSystem\Ntfs 2
Driver object (fffffa8019fcc3c0) is for:
 \FileSystem\Ntfs
DriverEntry:   fffff880023d506c    Ntfs!GsDriverEntry
DriverStartIo: 00000000    
DriverUnload:  fffff8800187c574    sptd
AddDevice:     00000000    

Dispatch routines:
[00] IRP_MJ_CREATE                      fffff880022f8aa0    Ntfs!NtfsFsdCreate
[01] IRP_MJ_CREATE_NAMED_PIPE           fffff80003472c60    nt!IopInvalidDeviceRequest
[02] IRP_MJ_CLOSE                       fffff880022f4630    Ntfs!NtfsFsdClose
...
...
[1b] IRP_MJ_PNP                         fffff880023238c0    Ntfs!NtfsFsdPnp

Fast I/O routines:
...
...
FastIoQueryOpen                         fffffa8019760570    +0xfffffa8019760570
...
...

и вижу, что для IRP никакой подмены вроде нет .
Поизучал адреса перехватчиков и увидел там следующее:
fffffa80`197602c0 4883ec48        sub     rsp,48h
fffffa80`197602c4 48894c2420      mov     qword ptr [rsp+20h],rcx
fffffa80`197602c9 4c8d4c2428      lea     r9,[rsp+28h]
fffffa80`197602ce 4889542430      mov     qword ptr [rsp+30h],rdx
fffffa80`197602d3 49b80000761980faffff mov r8,0FFFFFA8019760000h
fffffa80`197602dd 488d4c2420      lea     rcx,[rsp+20h]
fffffa80`197602e2 48b84857880180f8ffff mov rax,offset sptd+0x4b748 (fffff880`01885748)
fffffa80`197602ec ffd0            call    rax
...
...

sptd — это, как я загуглил:

SCSI Pass Through Direct (SPTD, имя файла «sptd.sys») — драйвер устройства, разработанный Duplex Secure Ltd., который обеспечивает новый метод доступа к запоминающим устройствам. В отличие от ASPI и SPTI документация к SPTD API не находится в открытом доступе. SPTD используется в программах DAEMON Tools и Alcohol 120%. Он является несовместимым с отладкой на уровне ядра, включая WinDbg и другие отладчики командной строки от Microsoft, такие как SoftICE.

Это я правильно понял? Это поэтому результаты, который получены программно и WinDBG разные, что последний не может их правильно отобразить?


Заранее, спасибо!
С уважением,
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.