我想进一步了解这种结构,像实际使用的那样。但具体来说,我想了解
_DEVICE_OBJECT* AttachedTo
成员以及它与_DEVICE_OBJECT* AttachedDevice
结构中的_DEVICE_OBJECT
成员之间的区别。Google证明是徒劳的,我找不到任何引用在Windows Internals一书中。任何资源或信息都将不胜感激。
编辑:
好吧。。。盯着WinDbg之后,我发现
AttachedTo
字段似乎指向顶部的设备对象设备树。有人可以确认吗?#1 楼
根据来自http://www.mouseos.com/windows/kernel/DeviceStack.html的此图,AttachedDevice
指向下一个设备,DeviceExtension->AttachedTo
指向上一个设备:#2 楼
使用!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"
评论
欢迎来到逆向工程!我们希望答案不仅仅具有链接,因此即使链接断开,内容也将允许个人解决当前的问题或至少搜索相关解决方案。
–asheeshr
2014年1月11日在6:27