Partager via


InitializeObjectAttributes, macro (ntdef.h)

La macro InitializeObjectAttributes initialise la structure opaque OBJECT_ATTRIBUTES , qui spécifie les propriétés d’un handle d’objet aux routines qui ouvrent des handles.

Syntaxe

VOID InitializeObjectAttributes(
  [out]          POBJECT_ATTRIBUTES   p,
  [in]           PUNICODE_STRING      n,
  [in]           ULONG                a,
  [in]           HANDLE               r,
  [in, optional] PSECURITY_DESCRIPTOR s
);

Paramètres

p

Pointeur vers la structure OBJECT_ATTRIBUTES à initialiser.

n

Pointeur vers une chaîne Unicode qui contient le nom de l’objet pour lequel un handle doit être ouvert. Il doit s’agir d’un nom d’objet complet ou d’un nom de chemin d’accès relatif au répertoire d’objets spécifié par le paramètre RootDirectory.

a

Spécifie un ou plusieurs des indicateurs suivants :

Indicateur Description
OBJ_INHERIT Ce handle peut être hérité par les processus enfants du processus actuel.
OBJ_PERMANENT Cet indicateur s’applique uniquement aux objets nommés dans le gestionnaire d’objets. Par défaut, ces objets sont supprimés lorsque tous les handles ouverts sont fermés. Si cet indicateur est spécifié, l’objet n’est pas supprimé lorsque tous les handles ouverts sont fermés. Les pilotes peuvent utiliser ZwMakeTemporaryObject pour supprimer des objets permanents.
OBJ_EXCLUSIVE Un seul handle peut être ouvert pour cet objet.
OBJ_CASE_INSENSITIVE Si cet indicateur est spécifié, une comparaison qui ne respecte pas la casse est utilisée lors de la mise en correspondance du paramètre ObjectName avec les noms d’objets existants. Sinon, les noms d’objets sont comparés à l’aide des paramètres système par défaut.
OBJ_OPENIF Si cet indicateur est spécifié dans une routine qui crée des objets et que cet objet existe déjà, la routine doit ouvrir cet objet. Sinon, la routine qui crée l’objet retourne un code NTSTATUS de STATUS_OBJECT_NAME_COLLISION.
OBJ_KERNEL_HANDLE Spécifie que le handle est accessible uniquement en mode noyau.
OBJ_FORCE_ACCESS_CHECK La routine ouvrant le handle doit appliquer toutes les vérifications d’accès pour l’objet, même si le handle est ouvert en mode noyau.

r

Handle vers le répertoire d’objets racine pour le nom de chemin spécifié dans le paramètre ObjectName. Si ObjectName est un nom d’objet complet, RootDirectory a la valeur NULL. Utilisez ZwCreateDirectoryObject ZwCreateDirectoryObject pour obtenir un handle dans un répertoire d’objets.

s

Spécifie un descripteur de sécurité à appliquer à un objet lors de sa création. Ce paramètre est facultatif. Les pilotes peuvent spécifier NULL pour accepter la sécurité par défaut de l’objet. Pour plus d'informations, consultez la section Notes qui suit.

Valeur de retour

None

Notes

InitializeObjectAttributes initialise une structure OBJECT_ATTRIBUTES qui spécifie les propriétés d’un handle d’objet à ouvrir. L’appelant peut ensuite passer un pointeur vers cette structure vers une routine qui ouvre réellement le handle.

Les routines de pilote qui s’exécutent dans un contexte de processus autre que celui du processus système doivent définir l’indicateur OBJ_KERNEL_HANDLE pour le paramètre Attributes . Cet indicateur limite l’utilisation d’un handle ouvert pour cet objet aux processus s’exécutant uniquement en mode noyau. Sinon, le handle est accessible par le processus dans lequel le pilote est en cours d’exécution.

Notez que InitializeObjectAttributes définit toujours le membre SecurityQualityOfService de OBJECT_ATTRIBUTES sur NULL. Les pilotes qui nécessitent une valeur non NULL peuvent définir SecurityQualityOfService directement.

Configuration requise

   
Plateforme cible Desktop (Expérience utilisateur)
En-tête ntdef.h (inclure Wdm.h, Ntddk.h, Ntdef.h)

Voir aussi

ExCreateCallback

IoCreateFile

OBJECT_ATTRIBUTES

PsCreateSystemThread

SECURITY_DESCRIPTOR

UNICODE_STRING

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwMakeTemporaryObject

ZwOpenFile

ZwOpenKey

ZwOpenSection

ZwOpenSymbolicLinkObject