首页
社区
课程
招聘
[求助]IoDeviceObjectType、IoDriverObjectType
发表于: 2009-5-18 20:33 8896

[求助]IoDeviceObjectType、IoDriverObjectType

2009-5-18 20:33
8896
如题,谁能详细解释一下那两个东东?
具体应该怎样使用他们呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如题,谁能详细解释一下题中的两个东东,具体应该怎样使用他们两个呢?
2009-5-18 20:54
0
雪    币: 48
活跃值: (496)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
NTSYSAPI
NTSTATUS
NTAPI
ObReferenceObjectByName (
IN PUNICODE_STRING ObjectName,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *Object
);

typedef struct _OBJECT_TYPE {
ERESOURCE Mutex;
LIST_ENTRY TypeList;
UNICODE_STRING Name;            // Copy from object header for convenience
PVOID DefaultObject;
ULONG Index;
ULONG TotalNumberOfObjects;
ULONG TotalNumberOfHandles;
ULONG HighWaterNumberOfObjects;
ULONG HighWaterNumberOfHandles;
OBJECT_TYPE_INITIALIZER TypeInfo;
#ifdef POOL_TAGGING
ULONG Key;
#endif //POOL_TAGGING
} OBJECT_TYPE, *POBJECT_TYPE;

POBJECT_TYPE 如果是IoDeviceObjectType,调用上面的这个函数后就会返回一个PDEVICE_OBJECT
POBJECT_TYPE 如果是IoDriverObjectType,调用上面的这个函数后就会返回一个PDRIVER_OBJECT
POBJECT_TYPE是导出的 还有好多,你说的只是两个

自己查找一下资料
2009-5-18 22:52
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
重复发帖有意义吗?不如自己去看Windows对象管理
2009-5-19 07:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很抱歉,帖子发重了,本来想在另一个板块发的,非常抱歉。
2009-5-19 15:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我想问一下,可不可以不通过ObReferenceObjectByHandle之类的函数使用IoDeviceObjectType,而是将其当成是一种类型对象链表的头结点,从而依次枚举链表上的各结点的信息。
2009-5-22 18:54
0
雪    币: 48
活跃值: (496)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
//模拟IoGetDeviceObjectPointer实现
NTSTATUS
MyIoGetDeviceObjectPointer(
    IN PUNICODE_STRING ObjectName,
    IN ACCESS_MASK DesiredAccess,
    OUT PFILE_OBJECT *FileObject,
    OUT PDEVICE_OBJECT *DeviceObject
    )
{
    PFILE_OBJECT fileObject;
    OBJECT_ATTRIBUTES objectAttributes;
    HANDLE fileHandle;
    IO_STATUS_BLOCK ioStatus;
    NTSTATUS status;

        //设置要打开的设备的设备名
    InitializeObjectAttributes( &objectAttributes,
                                ObjectName,
                                OBJ_KERNEL_HANDLE,
                                (HANDLE) NULL,
                                (PSECURITY_DESCRIPTOR) NULL );

        //ZwOpenFile打开设备
    status = ZwOpenFile( &fileHandle,
                        DesiredAccess,
                        &objectAttributes,
                        &ioStatus,
                        0,
                        FILE_NON_DIRECTORY_FILE );

    if (NT_SUCCESS( status ))
        {
                //得到文件对象指针
        status = ObReferenceObjectByHandle( fileHandle,
                                            0,
                                            *IoFileObjectType,
                                            KernelMode,
                                            (PVOID *) &fileObject,
                                            NULL );
        if (NT_SUCCESS( status ))
                {
            *FileObject = fileObject;
                        //得到设备对象指针
            *DeviceObject = IoGetBaseFileSystemDeviceObject( fileObject );
        }
        ZwClose( fileHandle );
    }
    return status;
}

仔细看一下
2009-5-22 19:35
0
游客
登录 | 注册 方可回帖
返回
//