InitializeObjectAttributes宏初始化一个OBJECT_ATTRIBUTES结构体, 当一个例程打开对象时由此结构体指定目标对象的属性
参数
InitializedAttributes [out]
指定需初始化的OBJECT_ATTRIBUTES结构体。
ObjectName [in]
指向Unicode字符串的指针,它包含将要打开句柄的对象名称。此参数可以是一个完整的对象名称,也可以是一个RootDirectory参数指定的相对路径。
Attributes [in]
指定一个或者多个下面的标志。
OBJ_INHERIT
此句柄可以被当前进程的子进程继承。
OBJ_PERMANENT
此标志仅对在对象管理器中的命名对象有效。默认情况下,当关闭所有打开的句柄时,会删除该对象。如果指定了此标志,则关闭所有打开句柄时,对象不会被删除。驱动可以使用ZwMakeTemporaryObject删除永久对象。
OBJ_EXCLUSIVE
此对象只能打开一个句柄
OBJ_CASE_INSENSITIVE
如果该标志被指定,如果指定了此标志,在对ObjectName参数与已存在的对象名称进行匹配时,不区分大小写。否则,使用默认系统设置比较对象名称。
OBJ_OPENIF
如果在创建对象的例程中指定此标志,当对象已经存在时,例程将会打开些对象。否则,创建对象的例程返回一个NTSTATUS代码STATUS_OBJECT_NAME_COLLISION。
OBJ_KERNEL_HANDLE
指定句柄只能在内核模式下访问。
OBJ_FORCE_ACCESS_CHECK
打开句柄的例程应该强制对对象进行所有访问检查,即使句柄以内核模式打开。
RootDirectory [in]
根目录对象的句柄,用于ObjectName参数指定的相对路径时。如果ObjectName是一个完整对象的名字,RootDirectory是NULL。使用ZwCreateDirectoryObject获得对象目录句柄。
SecurityDescriptor [in, optional]
指定在创建时应用于对象的安全说明符。此参数是可选的。驱动程序可以指定NULL以接受对象的默认安全性。有关更多信息,请参见以下备注部分。
返回值
无
备注
InitializeObjectAttributes初始化一个OBJECT_ATTRIBUTES结构,它设置将被打开的对象句柄的属性。然后调用方可以将一个指向该结构的指针传递给实际打开句柄的例程。
驱动程序运行进程上下文中,若要运行在系统进程,需要设置OBJ_KERNEL_HANDLE标志到Attributes参数。此标志限制了使用此打开的句柄的进程仅能运行在内核模式。否则,否则句柄可以在驱动运行的进程上下文中访问。
注意,InitializeObjectAttributes始终设置OBJCECT_ATTRIBUTES的SecurityQualityOfService成员为NULL。如果驱动程序需要一个非空的值,可以直接设置SecurityQualityOfService成员。