-
-
[求助]关于IoGetDeviceObjectPointer获得设备对象的疑问?
-
发表于:
2008-4-14 17:21
10792
-
[求助]关于IoGetDeviceObjectPointer获得设备对象的疑问?
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是如何做到服务列表禁止对其服务进行控制?
[课程]Linux pwn 探索篇!