_DEVOBJ_EXTENSION 结构信息

逆向工程 视窗 内核模式
2021-06-11 06:50:39

我正在寻找有关_DEVICE_OBJECT -> _DEVOBJ_EXTENSION结构的信息。

我想大致了解一下这个结构,比如它的实际用途。但具体来说,我想了解该_DEVICE_OBJECT* AttachedTo成员以及该_DEVICE_OBJECT* AttachedDevice成员与_DEVICE_OBJECT结构中成员之间的区别

谷歌被证明毫无结果,我在 Windows Internals 书中找不到任何参考资料。任何资源或信息将不胜感激。

编辑:
好的...在盯着 WinDbg 后,我发现该AttachedTo字段似乎指向设备树顶部的设备对象。任何人都可以证实这一点吗?

3个回答

根据http://www.mouseos.com/windows/kernel/DeviceStack.html 的这张图AttachedDevice指向下一个设备并DeviceExtension->AttachedTo指向上一个设备:

在此处输入图片说明

使用!devobj <address>命令
它会告诉你什么是 AttachedDevice(上)和什么是 AttachedTo 设备(下)

.foreach (place { .shell -ci "!object \\Device;" sed s/"     ".."  "//g | sed s/" .*"//g } ) { !grep -i -c "!devobj place" -e "Attached"}

笔记:

!grep is from domdbg windbg extension sed is from gnuwin32 

输出

AttachedTo (Lower) 86fb1630 \Driver\PnpManager
AttachedTo (Lower) 86d22420 \Driver\aswTdi
AttachedDevice (Upper) 862f59d8 \Driver\wdmaud
AttachedDevice (Upper) 86e11130 \Driver\ROOTMODEM
AttachedDevice (Upper) 86de7528 \Driver\Kbdclass
AttachedTo (Lower) 86fac190 \Driver\PnpManager
AttachedDevice (Upper) 86e02560 \Driver\Rasl2tp
AttachedDevice (Upper) 862e9c90 \Driver\sysaudio
AttachedTo (Lower) 86f5ece8 \Driver\ACPI
AttachedTo (Lower) 86e15020 \Driver\i8042prt

或者自己解析所有设备的结构以找到模式

 .foreach (place { .shell -ci "!object \\Device;" sed s/"     ".."  "//g | sed s/" .*"//g } ) {dt nt!_DEVICE_OBJECT -y Dri->Drivern* place ;dt nt!_DEVICE_OBJECT -yr DeviceOb->Att->Dri->Drivern* place ;dt nt!_DEVICE_OBJECT -yr Atta->Dri->Drivern* place ; .echo ==========}

当设备对象同时具有 AttachedDevice 和 AttachedTo 设备时,它应该向您显示这样的输出

   +0x008 DriverObject : 
      +0x01c DriverName   : _UNICODE_STRING "\Driver\TermDD"
   +0x0b0 DeviceObjectExtension       : 
      +0x018 AttachedTo                  : 
         +0x008 DriverObject                : 
            +0x01c DriverName                  : _UNICODE_STRING "\Driver\PnpManager"
   +0x010 AttachedDevice     : 
      +0x008 DriverObject       : 
         +0x01c DriverName         : _UNICODE_STRING "\Driver\Kbdclass"

Microsoft 在其 MSDN 站点上完整记录了该结构。不久前我还创建了一篇博客文章,关于这个数据结构,可以在这里找到 - http://bsodtutorials.blogspot.co.uk/2013/11/devobj-and-deviceobject.html