sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1388回复:8

求救:IoGetDeviceObjectPointer

楼主#
更多 发布于:2004-03-19 10:18
我在98下我的WDM驱动调用IoGetDeviceObjectPointer()想得到另一WDM驱动的deviceObject。结果,得到的却是那个驱动AddDevice()中的PhysicalDeviceObject,而不是该驱动的deviceObject。而在2k下IoGetDeviceObjectPointer()得到的却是那个驱动的deviceObject。这是怎么回事啊,如果我要得到那个驱动的deviceObject,该怎么办?有什么解决方案啊?

最新喜欢:

LeopardLeopar...
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-03-19 12:56
自己枚举设备栈,搜索。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-19 14:03
怎么做啊,能不能给个demo?
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-20 16:55
while(DeviceObject->NextDeviceObject!=NULL)
{
DeviceObject=DeviceObject->NextDeviceObject;
}
robin_wxg
驱动小牛
驱动小牛
  • 注册日期2003-02-10
  • 最后登录2009-09-21
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-21 13:20
ZwCreateFile()
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于: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链,然后依次向上搜索设备栈中的设备,看是否是你所要找的设备对象。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于: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]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2004-03-22 15:09
这个难说,由于98下有NTKERN。VXD来模拟分层操作,所一你自己得研究下该VXD看看。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-22 15:52
谢谢wowocock大侠。
这下郁闷了,我对VXD一窍不通。
再问一下,哪里可以找到相应的资料啊?

[编辑 -  3/22/04 by  sinking]
游客

返回顶部