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) |