首页
社区
课程
招聘
[求助]关于IoGetDeviceObjectPointer获得设备对象的疑问?
发表于: 2008-4-14 17:21 10790

[求助]关于IoGetDeviceObjectPointer获得设备对象的疑问?

2008-4-14 17:21
10790
1.为何在有些程序中使用"IoGetDeviceObjectPointer"获得设备对象时,其返回值本身就含有相应文件对象和设备对象(FileObject,DeviceObject), 为什么不直接用该设备对象,却再要通过文件对象中检索设备对象呢? 而且,经调试分析这两个设备对象指针不同, 应该是不同的设备对象,为何它们不同,具体原因是什么?

贴出来太乱了,调整了半天,还是原样,干脆搞个图片:


查DDK有如下参考信息:
NTSTATUS IoGetDeviceObjectPointer(
    IN PUNICODE_STRING  ObjectName,
    IN ACCESS_MASK  DesiredAccess,
    OUT PFILE_OBJECT  *FileObject,
    OUT PDEVICE_OBJECT  *DeviceObject
    );

FILE_OBJECT STRUCT
	_Type		SWORD		?	; 0000h  IO_TYPE_FILE  (original field name Type)
	_Size		SWORD		?	; 0002h  (original name Size)
	DeviceObject	PVOID		?	; 0004h  PTR DEVICE_OBJECT
	.....
FILE_OBJECT ENDS
PFILE_OBJECT typedef PTR FILE_OBJECT

代码片段:
		... ...
                push    esi				; DeviceObject
                push    edi				; FileObject         <──┐
                push    FILE_READ_ATTRIBUTES		; DesiredAccess	    │
                lea     eax, usDestinationString			                    │
                push    eax				; ObjectName              │
                call    IoGetDeviceObjectPointer                                                          │
                test    eax, eax					                   │
                jz      @			                                                   │
	     nop							    │
@@: 							                    │
                mov     eax, [edi]			; FileObject                  │
                mov     eax, [eax+4]					    │
                mov     [esi], eax			; DeviceObject     <──┘
		... ...


2.如何将驱动服务的说明信息添加到服务列表中?
3.KAV是如何做到服务列表禁止对其服务进行控制?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
对驱动还不熟,不过看IoGetDeviceObjectPointer的函数参考说明,IoGetDeviceObjectPointer函数返回的值并不是设备对象的值,而是让你用来判断获取设备有没有成功的值。

Return Value
IoGetDeviceObjectPointer can return one of the following NTSTATUS values:

STATUS_SUCCESS
STATUS_OBJECT_TYPE_MISMATCH
STATUS_INVALID_PARAMETER
STATUS_PRIVILEGE_NOT_HELD
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_INVALID
2008-4-14 17:34
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是Return Value
而是接受输出的参数:
OUT PFILE_OBJECT  *FileObject,
OUT PDEVICE_OBJECT  *DeviceObject
2008-4-14 17:37
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
哦?看错了。
2008-4-14 17:55
0
雪    币: 191
活跃值: (95)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
如果想获取的Device被Attach了若干个设备,
那么直接返回的DeviceObject指向的是最顶层的那个Attach Device。
FileObject->DeviceObject指向的才是真正想获取的。
2008-7-24 21:28
0
游客
登录 | 注册 方可回帖
返回
//