阅读:1390回复:8
求救:IoGetDeviceObjectPointer
我在98下我的WDM驱动调用IoGetDeviceObjectPointer()想得到另一WDM驱动的deviceObject。结果,得到的却是那个驱动AddDevice()中的PhysicalDeviceObject,而不是该驱动的deviceObject。而在2k下IoGetDeviceObjectPointer()得到的却是那个驱动的deviceObject。这是怎么回事啊,如果我要得到那个驱动的deviceObject,该怎么办?有什么解决方案啊?
|
|
最新喜欢:![]() |
沙发#
发布于:2004-03-22 15:52
谢谢wowocock大侠。
这下郁闷了,我对VXD一窍不通。 再问一下,哪里可以找到相应的资料啊? [编辑 - 3/22/04 by sinking] |
|
板凳#
发布于:2004-03-22 15:09
这个难说,由于98下有NTKERN。VXD来模拟分层操作,所一你自己得研究下该VXD看看。
|
|
|
地板#
发布于:2004-03-22 10:43
To qwdrv:
应该是用DeviceObject->AttachedDevice吧。 To wowocock 问题是,我在上层驱动用IoGetDeviceObjectPointer()得到的PhysicalDeviceObject的AttachedDevice域为空,而下层的PhysicalDeviceObject的AttachedDevice域指向驱动的DeviceObject。我觉得是可能是我调用IoGetDeviceObjectPointer()时,下层驱动还没加载完成,所以才会出现这个错误,但我怎么判断下层驱动加载完成没有啊。得不到下层驱动的DeviceObject, 我无法发送 IRP_MJ_PNP查询下层驱动的状态。我试用了KeDelayExecutionThread()延时,但没有效果。请问,有什么其他方法啊? [编辑 - 3/22/04 by sinking] |
|
地下室#
发布于:2004-03-22 10:33
IoGetAttachedDevice proc near ; CODE XREF: IoGetAttachedDeviceReference+13p
.text:0041E9E6 ; IoGetRelatedDeviceObject+B1p ... .text:0041E9E6 .text:0041E9E6 arg_0= dword ptr 8 .text:0041E9E6 .text:0041E9E6 55 push ebp .text:0041E9E7 8B EC mov ebp, esp .text:0041E9E9 8B 45 08 mov eax, [ebp+arg_0] .text:0041E9EC EB 02 jmp short loc_41E9F0 .text:0041E9EE ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪? .text:0041E9EE .text:0041E9EE loc_41E9EE: ; CODE XREF: IoGetAttachedDevice+Fj .text:0041E9EE 8B C1 mov eax, ecx .text:0041E9F0 .text:0041E9F0 loc_41E9F0: ; CODE XREF: IoGetAttachedDevice+6j .text:0041E9F0 8B 48 10 mov ecx, [eax+10h] .text:0041E9F3 85 C9 test ecx, ecx .text:0041E9F5 75 F7 jnz short loc_41E9EE .text:0041E9F7 5D pop ebp .text:0041E9F8 C2 04 00 retn 4 .text:0041E9F8 IoGetAttachedDevice endp 很简单搜索PDO设备的ATTACHEDDEVICE链,然后依次向上搜索设备栈中的设备,看是否是你所要找的设备对象。 |
|
|
5楼#
发布于:2004-03-21 13:20
ZwCreateFile()
|
|
6楼#
发布于:2004-03-20 16:55
while(DeviceObject->NextDeviceObject!=NULL)
{ DeviceObject=DeviceObject->NextDeviceObject; } |
|
7楼#
发布于:2004-03-19 14:03
怎么做啊,能不能给个demo?
|
|
8楼#
发布于:2004-03-19 12:56
自己枚举设备栈,搜索。
|
|
|