OBJECT_ATTRIBUTES 结构 (ntdef.h)

OBJECT_ATTRIBUTES 结构指定可通过创建对象和/或返回对象的句柄的例程应用于对象或对象句柄的属性。

语法

typedef struct _OBJECT_ATTRIBUTES {
  ULONG           Length;
  HANDLE          RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG           Attributes;
  PVOID           SecurityDescriptor;
  PVOID           SecurityQualityOfService;
} OBJECT_ATTRIBUTES;

成员

Length

此结构中包含的数据的字节数。 InitializeObjectAttributes 宏将此成员设置为 sizeof (OBJECT_ATTRIBUTES) 。

RootDirectory

ObjectName 成员指定的路径名的根对象目录的可选句柄。 如果 RootDirectoryNULLObjectName 必须指向包含目标对象的完整路径的完全限定对象名称。 如果 RootDirectory 为非NULL则 ObjectName 指定相对于 RootDirectory 目录的对象名称。 RootDirectory 句柄可以引用文件系统目录或对象管理器命名空间中的对象目录。

ObjectName

指向 Unicode 字符串 的指针,该字符串包含要为其打开句柄的对象的名称。 这必须是完全限定的对象名称,或者是 RootDirectory 成员指定的目录的相对路径名。

Attributes

指定对象句柄属性的标志的位掩码。 此成员可以包含下表中的一个或多个标志。

标志 含义
OBJ_INHERIT 此句柄可由当前进程的子进程继承。
OBJ_PERMANENT 此标志仅适用于在对象管理器中命名的对象。 默认情况下,关闭所有打开的句柄时,会删除此类对象。 如果指定了此标志,则不会在关闭所有打开的句柄时删除对象。 驱动程序可以使用 ZwMakeTemporaryObject 例程使永久对象成为非永久性对象。
OBJ_EXCLUSIVE 如果设置了此标志并将 OBJECT_ATTRIBUTES 结构传递给创建对象的例程,则可以以独占方式访问该对象。 也就是说,一旦进程向对象打开此类句柄,其他任何进程都不能打开此对象的句柄。

如果设置了此标志,并将 OBJECT_ATTRIBUTES 结构传递给创建对象句柄的例程,则调用方请求对创建句柄的进程上下文的对象进行独占访问。 仅当创建对象时设置了 OBJ_EXCLUSIVE 标志时,才能授予此请求。
OBJ_CASE_INSENSITIVE 如果指定了此标志,在将 ObjectName 成员指向的名称与现有对象的名称进行匹配时,将使用不区分大小写的比较。 否则,将使用默认系统设置比较对象名称。
OBJ_OPENIF 如果使用对象句柄将此标志指定为创建对象的例程,如果该对象已存在,则例程应打开该对象。 否则,创建 对象的例程将返回 NTSTATUS 代码STATUS_OBJECT_NAME_COLLISION
OBJ_OPENLINK 如果将设置了此标志的对象句柄传递给打开对象的例程,并且如果对象是符号链接对象,则例程应打开符号链接对象本身,而不是符号链接引用的对象 (这是) 的默认行为。
OBJ_KERNEL_HANDLE 句柄是在系统进程上下文中创建的,只能从内核模式访问。
OBJ_FORCE_ACCESS_CHECK 打开句柄的例程应强制实施对象的所有访问检查,即使句柄是在内核模式下打开的。
OBJ_DONT_REPARSE 如果设置了此标志,则分析关联对象的名称时不会遵循任何重新分析点。 如果遇到任何重新分析,则尝试将失败并返回 STATUS_REPARSE_POINT_ENCOUNTERED 结果。 这可用于确定在安全方案中,对象路径中是否存在任何重新分析点。
OBJ_IGNORE_IMPERSONATED_DEVICEMAP 设备映射是 DOS 设备名称与系统中设备之间的映射,在解析 DOS 名称时使用。 系统中的每个用户都存在单独的设备映射,用户可以管理自己的设备映射。 通常在模拟期间,将使用模拟用户的设备映射。 但是,设置此标志时,将改用进程用户的设备映射。
OBJ_VALID_ATTRIBUTES 保留。

SecurityDescriptor

指定创建对象时对象的安全描述符 (SECURITY_DESCRIPTOR) 。 如果 SecurityDescriptorNULL,则对象将接收默认安全设置。 有关 新对象,请参阅 DACL

SecurityQualityOfService

创建对象时要应用于对象的可选服务质量。 用于指示动态或静态) (安全模拟级别和上下文跟踪模式。 目前, InitializeObjectAttributes 宏将此成员设置为 NULL

注解

使用 InitializeObjectAttributes 宏初始化 OBJECT_ATTRIBUTES 结构的成员。 请注意, InitializeObjectAttributesSecurityQualityOfService 成员初始化为 NULL。 如果必须指定非NULL 值,请在初始化后设置 SecurityQualityOfService 成员。

若要将此结构中包含的属性应用于对象或对象句柄,请将指向此结构的指针传递给访问对象或返回对象句柄的例程,例如 ZwCreateFileZwCreateDirectoryObject

此结构的所有成员都是只读的。 如果此结构的成员是指针,则此成员指向的对象也是只读的。 只读成员和对象可用于获取相关信息,但不得修改。 若要设置此结构的成员,请使用 InitializeObjectAttributes 宏。

在系统进程以外的进程上下文中运行的驱动程序例程必须使用 InitializeObjectAttributes) Attributes 成员 (设置OBJ_KERNEL_HANDLE标志。 这会将为该对象打开的句柄的使用限制为仅在内核模式下运行的进程。 否则,运行驱动程序的上下文的进程可以访问句柄。

要求

要求
Header ntdef.h (包括 D3dkmthk.h、Ntdef.h、Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)

另请参阅

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

新对象的 DACL