InitializeObjectAttributes 宏 (ntdef.h)

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)

另请参阅

ExCreateCallback

IoCreateFile

OBJECT_ATTRIBUTES

PsCreateSystemThread

SECURITY_DESCRIPTOR

UNICODE_STRING

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwMakeTemporaryObject

ZwOpenFile

ZwOpenKey

ZwOpenSection

ZwOpenSymbolicLinkObject