共用方式為


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 成員所指定路徑名稱的根對象目錄選擇性句柄。 如果 RootDirectoryNULLObjectName 必須指向包含目標物件完整路徑的完整物件名稱。 如果 RootDirectory 不是,NULLObjectName 會指定相對於 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) 。 如果 SecurityDescriptorNULL,物件將會收到預設的安全性設定。 請參閱 New 物件的 DACL

SecurityQualityOfService

建立物件時要套用至對象的選擇性服務品質。 用來指出動態或靜態 (動態或靜態) 的安全性模擬層級和內容追蹤模式。 目前 ,InitializeObjectAttributes 宏會將這個成員設定為 NULL

備註

使用 InitializeObjectAttributes 宏,初始化 OBJECT_ATTRIBUTES 結構的成員。 請注意 ,InitializeObjectAttributes 會將 SecurityQualityOfService 成員初始化為 NULL。 如果您必須指定非NULL 值,請在初始化之後設定 SecurityQualityOfService 成員。

若要將此結構中包含的屬性套用至物件或物件句柄,請將此結構的指標傳遞至存取對象或傳回物件句柄的例程,例如 ZwCreateFileZwCreateDirectoryObject

這個結構的所有成員都是唯讀的。 如果這個結構的成員是指針,則這個成員指向的物件也是只讀的。 只讀成員和物件可用來取得相關信息,但不得修改。 若要設定這個結構的成員,請使用 InitializeObjectAttributes 宏。

在系統進程以外的進程內容中執行的驅動程式例程,必須使用 InitializeObjectAttributes 宏來設定 Attributes 成員 (OBJ_KERNEL_HANDLE旗標) 。 這會將針對該對象開啟的句柄,限制為只在核心模式中執行的進程。 否則,進程可以在其中執行驅動程序的內容中存取句柄。

規格需求

需求
標頭 ntdef.h (包括 D3dkmthk.h、Ntdef.h、Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)

另請參閱

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

New 物件的 DACL