OBJECT_ATTRIBUTES-Struktur (ntdef.h)

Die OBJECT_ATTRIBUTES-Struktur gibt Attribute an, die von Routinen, die Objekte und/oder Rückgabehandles an Objekte erstellen, auf Objekte oder Objekthandles angewendet werden können.

Syntax

typedef struct _OBJECT_ATTRIBUTES {
  ULONG           Length;
  HANDLE          RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG           Attributes;
  PVOID           SecurityDescriptor;
  PVOID           SecurityQualityOfService;
} OBJECT_ATTRIBUTES;

Member

Length

Die Anzahl der in dieser Struktur enthaltenen Datenbytes. Das InitializeObjectAttributes-Makro legt diesen Member auf sizeof(OBJECT_ATTRIBUTES) fest.

RootDirectory

Optionales Handle zum Stammobjektverzeichnis für den Pfadnamen, der vom ObjectName-Element angegeben wird. Wenn RootDirectory ist NULL, muss ObjectName auf einen vollqualifizierten Objektnamen verweisen, der den vollständigen Pfad zum Zielobjekt enthält. Wenn RootDirectory nichtNULL ist, gibt ObjectName einen Objektnamen relativ zum Verzeichnis RootDirectory an. Das RootDirectory-Handle kann auf ein Dateisystemverzeichnis oder ein Objektverzeichnis im Objekt-Manager-Namespace verweisen.

ObjectName

Zeiger auf eine Unicode-Zeichenfolge , die den Namen des Objekts enthält, für das ein Handle geöffnet werden soll. Hierbei muss es sich entweder um einen vollqualifizierten Objektnamen oder um einen relativen Pfadnamen zu dem verzeichnis handeln, das vom RootDirectory-Element angegeben wird.

Attributes

Bitmaske von Flags, die Objekthandleattribute angeben. Dieses Element kann eines oder mehrere der Flags in der folgenden Tabelle enthalten.

Flag Bedeutung
OBJ_INHERIT Dieses Handle kann von untergeordneten Prozessen des aktuellen Prozesses geerbt werden.
OBJ_PERMANENT Dieses Flag gilt nur für Objekte, die innerhalb des Objekt-Managers benannt sind. Standardmäßig werden solche Objekte gelöscht, wenn alle geöffneten Handles für sie geschlossen sind. Wenn dieses Flag angegeben ist, wird das Objekt nicht gelöscht, wenn alle geöffneten Handles geschlossen werden. Treiber können die ZwMakeTemporaryObject-Routine verwenden, um ein permanentes Objekt nicht dauerhaft zu machen.
OBJ_EXCLUSIVE Wenn dieses Flag festgelegt ist und die OBJECT_ATTRIBUTES-Struktur an eine Routine übergeben wird, die ein Objekt erstellt, kann ausschließlich auf das Objekt zugegriffen werden. Das heißt, sobald ein Prozess ein solches Handle für das Objekt öffnet, können keine anderen Prozesse Handles für dieses Objekt öffnen.

Wenn dieses Flag festgelegt ist und die OBJECT_ATTRIBUTES-Struktur an eine Routine übergeben wird, die ein Objekthandle erstellt, fordert der Aufrufer exklusiven Zugriff auf das Objekt für den Prozesskontext an, in dem das Handle erstellt wurde. Diese Anforderung kann nur gewährt werden, wenn das OBJ_EXCLUSIVE-Flag beim Erstellen des Objekts festgelegt wurde.
OBJ_CASE_INSENSITIVE Wenn dieses Flag angegeben wird, wird ein Vergleich ohne Beachtung der Groß-/Kleinschreibung verwendet, wenn der Name, auf den das ObjectName-Element verweist, mit den Namen vorhandener Objekte verglichen wird. Andernfalls werden Objektnamen mithilfe der Standardsystemeinstellungen verglichen.
OBJ_OPENIF Wenn dieses Flag mithilfe des Objekthandles für eine Routine angegeben wird, die Objekte erstellt, und wenn dieses Objekt bereits vorhanden ist, sollte die Routine dieses Objekt öffnen. Andernfalls gibt die Routine zum Erstellen des Objekts einen NTSTATUS-Code von STATUS_OBJECT_NAME_COLLISION zurück.
OBJ_OPENLINK Wenn ein Objekthandle mit festgelegtem Flag an eine Routine übergeben wird, die Objekte öffnet, und wenn das Objekt ein symbolisches Linkobjekt ist, sollte die Routine das symbolische Linkobjekt selbst öffnen und nicht das Objekt, auf das sich die symbolische Verknüpfung bezieht (dies ist das Standardverhalten).
OBJ_KERNEL_HANDLE Das Handle wird im Systemprozesskontext erstellt und kann nur im Kernelmodus zugegriffen werden.
OBJ_FORCE_ACCESS_CHECK Die Routine, die das Handle öffnet, sollte alle Zugriffsprüfungen für das Objekt erzwingen, auch wenn das Handle im Kernelmodus geöffnet wird.
OBJ_DONT_REPARSE Wenn dieses Flag festgelegt ist, werden beim Analysieren des Namens des zugeordneten Objekts keine Analysepunkte befolgt. Wenn Analyseergebnisse auftreten, schlägt der Versuch fehl und gibt ein STATUS_REPARSE_POINT_ENCOUNTERED Ergebnis zurück. Dies kann in Sicherheitsszenarien verwendet werden, um zu bestimmen, ob im Pfad des Objekts Analysepunkte vorhanden sind.
OBJ_IGNORE_IMPERSONATED_DEVICEMAP Eine Gerätezuordnung ist eine Zuordnung zwischen DOS-Gerätenamen und Geräten im System und wird beim Auflösen von DOS-Namen verwendet. Für jeden Benutzer im System gibt es separate Gerätezuordnungen, und Benutzer können ihre eigenen Gerätezuordnungen verwalten. Während des Identitätswechsels wird in der Regel die Gerätezuordnung des identitätswechselten Benutzers verwendet. Wenn dieses Flag jedoch festgelegt ist, wird stattdessen die Gerätezuordnung des Prozessbenutzers verwendet.
OBJ_VALID_ATTRIBUTES Reserviert.

SecurityDescriptor

Gibt einen Sicherheitsdeskriptor (SECURITY_DESCRIPTOR) für das Objekt an, wenn das Objekt erstellt wird. Wenn SecurityDescriptor den Wert aufweist NULL, erhält das Objekt die Standardsicherheitseinstellungen. Ein neues Objekt finden Sie unter DACL.

SecurityQualityOfService

Optionale Dienstqualität, die beim Erstellen auf das Objekt angewendet werden soll. Wird verwendet, um die Identitätswechselebene und den Kontextnachverfolgungsmodus (dynamisch oder statisch) anzugeben. Derzeit legt das InitializeObjectAttributes-Makro diesen Member auf fest NULL.

Hinweise

Verwenden Sie das Makro InitializeObjectAttributes , um die Member der OBJECT_ATTRIBUTES-Struktur zu initialisieren. Beachten Sie, dass InitializeObjectAttributes das SecurityQualityOfService-Element in NULLinitialisiert. Wenn Sie einen Nicht-Wert angeben müssen, legen Sie das SecurityQualityOfService-ElementNULL nach der Initialisierung fest.

Um die in dieser Struktur enthaltenen Attribute auf ein Objekt- oder Objekthandle anzuwenden, übergeben Sie einen Zeiger auf diese Struktur an eine Routine, die auf Objekte zugreift oder Objekthandles zurückgibt, z. B. ZwCreateFile oder ZwCreateDirectoryObject.

Alle Member dieser Struktur sind schreibgeschützt. Wenn ein Member dieser Struktur ein Zeiger ist, ist das Objekt, auf das dieser Member verweist, ebenfalls schreibgeschützt. Schreibgeschützte Member und Objekte können zum Abrufen relevanter Informationen verwendet werden, dürfen jedoch nicht geändert werden. Verwenden Sie das Makro InitializeObjectAttributes , um die Member dieser Struktur festzulegen.

Treiberroutinen, die in einem anderen Prozesskontext als dem des Systemprozesses ausgeführt werden, müssen das OBJ_KERNEL_HANDLE-Flag für den Attributes-Member festlegen (mithilfe des InitializeObjectAttributes-Makros ). Dadurch wird die Verwendung eines für dieses Objekt geöffneten Handles auf Prozesse beschränkt, die nur im Kernelmodus ausgeführt werden. Andernfalls kann der Prozess, in dessen Kontext der Treiber ausgeführt wird, auf das Handle zugreifen.

Anforderungen

Anforderung Wert
Header ntdef.h (einschließlich D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Weitere Informationen

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

DACL für ein neues Objekt