InitializeObjectAttributes 宏初始化不透明OBJECT_ATTRIBUTES结构,该结构指定打开句柄的例程的对象句柄的属性。
语法
VOID InitializeObjectAttributes(
[out] POBJECT_ATTRIBUTES p,
[in] PUNICODE_STRING n,
[in] ULONG a,
[in] HANDLE r,
[in, optional] PSECURITY_DESCRIPTOR s
);
参数
p
指向要初始化 OBJECT_ATTRIBUTES 结构的指针。
n
指向 Unicode 字符串的指针,该字符串包含要为其打开句柄的对象的名称。 这必须是完全限定的对象名称,或者是 RootDirectory 参数指定的对象目录的相对路径名称。
a
指定以下一个或多个标志:
旗帜 | DESCRIPTION |
---|---|
OBJ_INHERIT | 此句柄可由当前进程的子进程继承。 |
OBJ_PERMANENT | 此标志仅适用于在对象管理器中命名的对象。 默认情况下,当关闭它们的所有打开句柄时,将删除此类对象。 如果指定了此标志,则关闭所有打开句柄时,不会删除该对象。 驱动程序可以使用 ZwMakeTemporaryObject 删除永久对象。 |
OBJ_EXCLUSIVE | 只能为此对象打开单个句柄。 |
OBJ_CASE_INSENSITIVE | 如果指定了此标志,则会在将 ObjectName 参数与现有对象的名称匹配时使用不区分大小写的比较。 否则,使用默认系统设置比较对象名称。 |
OBJ_OPENIF | 如果将此标志指定为创建对象的例程,并且该对象已存在,则例程应打开该对象。 否则,创建对象的例程将返回STATUS_OBJECT_NAME_COLLISION的 NTSTATUS 代码。 |
OBJ_KERNEL_HANDLE | 指定只能在内核模式下访问句柄。 |
OBJ_FORCE_ACCESS_CHECK | 打开句柄的例程应强制对对象执行所有访问检查,即使句柄正在内核模式下打开。 |
r
ObjectName 参数中指定的路径名称的根对象目录的句柄。 如果 ObjectName 是完全限定的对象名称,则 RootDirectory 为 NULL。 使用 ZwCreateDirectoryObject 获取对象目录的句柄。
s
指定要在创建对象时应用于对象的安全描述符。 此参数是可选的。 驱动程序可以指定 NULL 以接受对象的默认安全性。 有关详细信息,请参阅以下“备注”部分。
返回值
没有
注解
InitializeObjectAttributes 初始化一个 OBJECT_ATTRIBUTES 结构,该结构指定要打开的对象句柄的属性。 然后,调用方可以将指向此结构的指针传递给实际打开句柄的例程。
在系统进程以外的进程上下文中运行的驱动程序例程必须设置 Attributes 参数的OBJ_KERNEL_HANDLE标志。 此标志将打开的句柄的使用限制为仅在内核模式下运行的进程。 否则,该句柄可由运行驱动程序的上下文的进程访问。
请注意,InitializeObjectAttributes 始终将 OBJECT_ATTRIBUTES的 SecurityQualityOfService 成员设置为 NULL。 需要非 NULL 值的驱动程序可以直接设置 SecurityQualityOfService 。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | ntdef.h (包括 Wdm.h、Ntddk.h、Ntdef.h) |