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

指定下列一或多個旗標:

旗標 描述
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 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