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 NULL
initialisiert. 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) |