首页
社区
课程
招聘
[旧帖] [原创]枚举内核对象目录信息 0.00雪花
2012-3-22 18:33 2993

[旧帖] [原创]枚举内核对象目录信息 0.00雪花

2012-3-22 18:33
2993
Programming Windows Driver Model这本书中提供了一个工具叫DevView,
通过它可以很方便的查看设备对象的相关信息


不过在我的机器上使用却有问题,当我点击Device这个目录是DevView crash,于是就有了山寨的想法。

目前实现的比较简单,只是单纯的实现了枚举对象目录的功能,也没有实现应用层的交互,
虽然实现简单,功能单一,但是可以作为一个独立的模块知识与大家分享。由于没有实现应用层,就用debugview工具凑合看看把,为了体现对象目录是个树形结构,我稍微用了点分隔符号,表达个意思,下面看个截图(winXP sp2 虚拟机测试)


主要的知识点提一下

定义了两个结构
typedef struct _OBJECT_DIRECTORY_INFORMATION {
    UNICODE_STRING Name;
    UNICODE_STRING TypeName;
} OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION;
参考了wrk-v1.2\public\sdk\inc\ntobapi.h中的定义

typedef struct _OBJECT_NODE
{
    _OBJECT_NODE *NextNode;  
    _OBJECT_NODE *ChildNode;  
    WCHAR              wsObjName[MAX_OBJ_NAME_LEN];
    WCHAR                wsTypeName[MAX_OBJ_TYPE_LEN];
}OBJECT_NODE, *POBJECT_NODE;
自定义的结构,用于保存树形结构对象的信息

两个枚举对象目录的API

extern "C"
NTSYSCALLAPI
NTSTATUS
NTAPI
ZwOpenDirectoryObject ( __out PHANDLE DirectoryHandle,
             __in ACCESS_MASK DesiredAccess,
             __in POBJECT_ATTRIBUTES ObjectAttributes
     ); 

extern "C"
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryDirectoryObject ( __in HANDLE DirectoryHandle,                        __out_bcount_opt(Length) PVOID Buffer,
                 __in ULONG Length,
              __in BOOLEAN ReturnSingleEntry,
                 __in BOOLEAN RestartScan,
                                          __inout PULONG Context,
                                          __out_opt PULONG ReturnLength
                                );

由于DDK的头文件没有定义,那就手动导出函数声明。

描述以下代码流程:
在DriverEntry函数中直接实现递归枚举对象->保存对象信息->打印->卸载清除对象信息,
额外保存对象信息是为了接下来和应用层交互,在这个例子中可能还没体现出来。

整体结构比较简单,直接上代码
myobj.rar

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

上传的附件:
收藏
点赞5
打赏
分享
最新回复 (2)
雪    币: 248
活跃值: (3779)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2012-3-22 19:06
2
0
很好,收藏一下
雪    币: 169
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
往昔代码 2012-3-22 22:16
3
0
学习了,多谢lz分享
游客
登录 | 注册 方可回帖
返回