ReactOS 4.2 OBJECT_TYPE_INITIALIZERj结构体的实现

Windows内核为新对象类型的定义提供了一个全局的OBJECT_TYPE_INITIALIZER 数据结构,作为需要填写和递交的"申请单":

OBJECT_TYPE_INITIALIZER

c 复制代码
//
// Object Type Initialize for ObCreateObjectType
//
typedef struct _OBJECT_TYPE_INITIALIZER
{
    USHORT Length;
    BOOLEAN UseDefaultObject;
    BOOLEAN CaseInsensitive;
    ULONG InvalidAttributes;
    GENERIC_MAPPING GenericMapping;
    ULONG ValidAccessMask;
    BOOLEAN SecurityRequired;
    BOOLEAN MaintainHandleCount;
    BOOLEAN MaintainTypeList;
    POOL_TYPE PoolType;
    ULONG DefaultPagedPoolCharge;
    ULONG DefaultNonPagedPoolCharge;
    OB_DUMP_METHOD DumpProcedure;
    OB_OPEN_METHOD OpenProcedure;
    OB_CLOSE_METHOD CloseProcedure;
    OB_DELETE_METHOD DeleteProcedure;
    OB_PARSE_METHOD ParseProcedure;
    OB_SECURITY_METHOD SecurityProcedure;
    OB_QUERYNAME_METHOD QueryNameProcedure;
    OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;

字段 Length 说明目标数据结构的长度。OpenProcedure、CloseProcedure、DeleteProcedure 等均为函数指针,都是为目标对象类型所定义的操作。其中ParseProcedure提供了解析路径名以找到目标对象的方法。一般对象的ParseProcedure 都是很简单的,因为都是在对象目录中寻找目标对象,但是文件对象的 ParseProcedure 是个特例,文件对象的寻找涉及文件系统,需要转入文件目录中寻找。

要定义即创建一种新的对象类型时,就填写好一个OBJECT_TYPE_INITIALIZER数据结构,然后调用(内核函数)ObCreateObiectTypeO。这个函数根据"申请单"创建起新对象类型的数据结构,然后将其挂入对象目录。对象类型的数据结构是OBJECT_TYPE,其内部有个成分TypeInfo也是OBJECT_TYPE_INITIALIZER数据结构,"申请单"的内容将被复制到OBJECT_TYPE数据结构内部的Typelnfo中。

相关推荐
HellowAmy2 小时前
我的C++规范 - 玩一个小游戏
开发语言·c++·代码规范
自学不成才2 小时前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
玖釉-4 小时前
[Vulkan 学习之路] 08 - 给图片穿马甲:图像视图 (Image Views)
c++·windows·图形渲染
m0_748250035 小时前
C++ 信号处理
c++·算法·信号处理
yuyanjingtao5 小时前
动态规划 背包 之 凑钱
c++·算法·青少年编程·动态规划·gesp·csp-j/s
scx201310046 小时前
20260112树状数组总结
数据结构·c++·算法·树状数组
古城小栈7 小时前
Rust 交叉编译:Windows ====> Linux (musl 静态编译)
linux·windows·rust
星竹晨L7 小时前
【C++内存安全管理】智能指针的使用和原理
开发语言·c++
智者知已应修善业7 小时前
【C语言 dfs算法 十四届蓝桥杯 D飞机降落问题】2024-4-12
c语言·c++·经验分享·笔记·算法·蓝桥杯·深度优先
玖釉-7 小时前
[Vulkan 学习之路] 09 - 显卡的流水线工厂:图形管线概览 (Graphics Pipeline)
c++·windows·图形渲染