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 成員所指定路徑名稱的根對象目錄選擇性句柄。 如果 RootDirectory 為 NULL
, ObjectName 必須指向包含目標物件完整路徑的完整物件名稱。 如果 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 | 如果指定這個旗標,方法是使用物件句柄建立物件的例程,如果該對象已經存在,則例程應該開啟該物件。 否則,建立物件的例程會傳回 STATUS_OBJECT_NAME_COLLISION的NTSTATUS程式代碼。 |
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) 。 如果 SecurityDescriptor 為 NULL
,物件將會收到預設的安全性設定。 請參閱 New 物件的 DACL。
SecurityQualityOfService
建立物件時要套用至對象的選擇性服務品質。 用來指出動態或靜態 (動態或靜態) 的安全性模擬層級和內容追蹤模式。 目前 ,InitializeObjectAttributes 宏會將這個成員設定為 NULL
。
備註
使用 InitializeObjectAttributes 宏,初始化 OBJECT_ATTRIBUTES 結構的成員。 請注意 ,InitializeObjectAttributes 會將 SecurityQualityOfService 成員初始化為 NULL
。 如果您必須指定非NULL
值,請在初始化之後設定 SecurityQualityOfService 成員。
若要將此結構中包含的屬性套用至物件或物件句柄,請將此結構的指標傳遞至存取對象或傳回物件句柄的例程,例如 ZwCreateFile 或 ZwCreateDirectoryObject。
這個結構的所有成員都是唯讀的。 如果這個結構的成員是指針,則這個成員指向的物件也是只讀的。 只讀成員和物件可用來取得相關信息,但不得修改。 若要設定這個結構的成員,請使用 InitializeObjectAttributes 宏。
在系統進程以外的進程內容中執行的驅動程式例程,必須使用 InitializeObjectAttributes 宏來設定 Attributes 成員 (OBJ_KERNEL_HANDLE旗標) 。 這會將針對該對象開啟的句柄,限制為只在核心模式中執行的進程。 否則,進程可以在其中執行驅動程序的內容中存取句柄。
規格需求
需求 | 值 |
---|---|
標頭 | ntdef.h (包括 D3dkmthk.h、Ntdef.h、Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h) |