当前位置: 首页 > article >正文

ReactOS 4.2 OBJECT_TYPE_INITIALIZERj结构体的实现

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

OBJECT_TYPE_INITIALIZER

//
// 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中。


http://www.kler.cn/a/387136.html

相关文章:

  • R语言机器学习与临床预测模型77--机器学习预测常用R语言包
  • 去地面算法——depth_clustering算法调试(1)
  • 【Spring】@Autowired与@Resource的区别
  • 超市里的货物架调整(算法解析)|豆包MarsCode AI刷题
  • [ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6写实动漫风景艺术迪士尼全套
  • Debezium系列之:发件箱事件路由器
  • Go 中的泛型,日常如何使用
  • C#里怎么样判断一个数是偶数还是奇数
  • 如何避免消息的重复消费问题?(消息消费时的幂等性)
  • 架构师备考-概念背诵(软件工程)
  • 数据结构——链表(带有头节点)
  • 共享汽车管理:SpringBoot技术实现与优化
  • CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集
  • 重学 Android 自定义 View 系列(三):自定义步数进度条
  • 重新安装VMware tools为灰色,linux无法安装VMware tools
  • go语言中的接口含义和用法详解
  • 数据结构:顺序表(动态顺序表)
  • 使用Pytorch Geometric建立异构图HeteroData数据集
  • CycleGAN算法简述
  • 15分钟学 Go 第 40 天:使用ORM库
  • AnaTraf | 网络性能监控系统保障音视频质量的秘籍
  • 【Three.js基础学习】21.Realistic rendering
  • css:基础
  • go语言中如何使用 select 语句处理多通道
  • 基于STM32的LCD1602显示Proteus仿真设计(仿真+程序+设计报告+讲解视频)
  • 论软件可靠性设计及其应用