struttura OBJECT_ATTRIBUTES (ntdef.h)

La struttura OBJECT_ATTRIBUTES specifica gli attributi che possono essere applicati a oggetti o handle di oggetto tramite routine che creano oggetti e/o restituiscono handle agli oggetti.

Sintassi

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

Members

Length

Numero di byte di dati contenuti in questa struttura. La macro InitializeObjectAttributes imposta questo membro su sizeof(OBJECT_ATTRIBUTES).

RootDirectory

Handle facoltativo per la directory dell'oggetto radice per il nome del percorso specificato dal membro ObjectName . Se RootDirectory è NULL, ObjectName deve puntare a un nome di oggetto completo che include il percorso completo dell'oggetto di destinazione. Se RootDirectory non èNULL, ObjectName specifica un nome di oggetto relativo alla directory RootDirectory . L'handle RootDirectory può fare riferimento a una directory del file system o a una directory di oggetti nello spazio dei nomi di Gestione oggetti.

ObjectName

Puntatore a una stringa Unicode contenente il nome dell'oggetto per il quale deve essere aperto un handle. Deve essere un nome di oggetto completo o un nome di percorso relativo alla directory specificata dal membro RootDirectory .

Attributes

Maschera di bit di flag che specificano gli attributi dell'handle di oggetto. Questo membro può contenere uno o più flag nella tabella seguente.

Contrassegno Significato
OBJ_INHERIT Questo handle può essere ereditato dai processi figlio del processo corrente.
OBJ_PERMANENT Questo flag si applica solo agli oggetti denominati all'interno del gestore oggetti. Per impostazione predefinita, tali oggetti vengono eliminati quando vengono chiusi tutti gli handle aperti. Se questo flag viene specificato, l'oggetto non viene eliminato quando tutti gli handle aperti vengono chiusi. I driver possono usare la routine ZwMakeTemporaryObject per rendere permanente un oggetto permanente.
OBJ_EXCLUSIVE Se questo flag è impostato e la struttura OBJECT_ATTRIBUTES viene passata a una routine che crea un oggetto, è possibile accedere esclusivamente all'oggetto. Ovvero, una volta aperto un handle di questo tipo all'oggetto, nessun altro processo può aprire handle per questo oggetto.

Se questo flag è impostato e la struttura OBJECT_ATTRIBUTES viene passata a una routine che crea un handle di oggetto, il chiamante richiede l'accesso esclusivo all'oggetto per il contesto del processo in cui è stato creato l'handle. Questa richiesta può essere concessa solo se il flag OBJ_EXCLUSIVE è stato impostato al momento della creazione dell'oggetto.
OBJ_CASE_INSENSITIVE Se questo flag viene specificato, viene utilizzato un confronto senza distinzione tra maiuscole e minuscole quando corrisponde al nome a cui punta il membro ObjectName con i nomi degli oggetti esistenti. In caso contrario, i nomi degli oggetti vengono confrontati usando le impostazioni di sistema predefinite.
OBJ_OPENIF Se questo flag viene specificato, utilizzando l'handle dell'oggetto, a una routine che crea oggetti e, se tale oggetto esiste già, la routine deve aprire tale oggetto. In caso contrario, la routine che crea l'oggetto restituisce un codice NTSTATUS di STATUS_OBJECT_NAME_COLLISION.
OBJ_OPENLINK Se un handle oggetto, con questo set di flag, viene passato a una routine che apre oggetti e se l'oggetto è un oggetto collegamento simbolico, la routine deve aprire l'oggetto collegamento simbolico stesso, anziché l'oggetto a cui fa riferimento il collegamento simbolico (ovvero il comportamento predefinito).
OBJ_KERNEL_HANDLE L'handle viene creato nel contesto del processo di sistema e può essere accessibile solo dalla modalità kernel.
OBJ_FORCE_ACCESS_CHECK La routine che apre l'handle deve applicare tutti i controlli di accesso per l'oggetto, anche se l'handle viene aperto in modalità kernel.
OBJ_DONT_REPARSE Se questo flag è impostato, non verrà seguito alcun reparse points durante l'analisi del nome dell'oggetto associato. Se vengono rilevate eventuali correzioni, il tentativo avrà esito negativo e restituirà un risultato STATUS_REPARSE_POINT_ENCOUNTERED . Questa opzione può essere usata per determinare se sono presenti punti di analisi nel percorso dell'oggetto, in scenari di sicurezza.
OBJ_IGNORE_IMPERSONATED_DEVICEMAP Una mappa dei dispositivi è un mapping tra i nomi dei dispositivi DOS e i dispositivi nel sistema e viene usato per la risoluzione dei nomi DOS. Esistono mappe dei dispositivi separate per ogni utente nel sistema e gli utenti possono gestire le proprie mappe dei dispositivi. In genere, durante la rappresentazione, viene usata la mappa del dispositivo dell'utente rappresentato. Tuttavia, quando questo flag è impostato, viene usata la mappa del dispositivo dell'utente del processo.
OBJ_VALID_ATTRIBUTES Riservato.

SecurityDescriptor

Specifica un descrittore di sicurezza (SECURITY_DESCRIPTOR) per l'oggetto al momento della creazione dell'oggetto. Se SecurityDescriptor è NULL, l'oggetto riceverà le impostazioni di sicurezza predefinite. Per un nuovo oggetto, vedere DACL.

SecurityQualityOfService

Qualità facoltativa del servizio da applicare all'oggetto al momento della creazione. Usato per indicare il livello di rappresentazione di sicurezza e la modalità di rilevamento del contesto (dinamica o statica). Attualmente, la macro InitializeObjectAttributes imposta questo membro su NULL.

Commenti

Utilizzare la macro InitializeObjectAttributes per inizializzare i membri della struttura OBJECT_ATTRIBUTES . Si noti che InitializeObjectAttributes inizializza il membro SecurityQualityOfService su NULL. Se è necessario specificare un valore diversoNULL da , impostare il membro SecurityQualityOfService dopo l'inizializzazione.

Per applicare gli attributi contenuti in questa struttura a un handle di oggetto o oggetto, passare un puntatore a questa struttura a una routine che accede a oggetti o restituisce handle di oggetto, ad esempio ZwCreateFile o ZwCreateDirectoryObject.

Tutti i membri di questa struttura sono di sola lettura. Se un membro di questa struttura è un puntatore, anche l'oggetto a cui punta questo membro è di sola lettura. I membri e gli oggetti di sola lettura possono essere utilizzati per acquisire informazioni pertinenti, ma non devono essere modificati. Per impostare i membri di questa struttura, utilizzare la macro InitializeObjectAttributes .

Le routine del driver eseguite in un contesto di processo diverso da quello del processo di sistema devono impostare il flag di OBJ_KERNEL_HANDLE per il membro Attributes (utilizzando la macro InitializeObjectAttributes ). In questo modo viene limitato l'uso di un handle aperto per tale oggetto ai processi in esecuzione solo in modalità kernel. In caso contrario, l'handle può essere accessibile dal processo nel cui contesto è in esecuzione il driver.

Requisiti

Requisito Valore
Intestazione ntdef.h (include D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Vedi anche

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

DACL per un nuovo oggetto