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