Fonction ZwCreateSection (wdm.h)

La routine ZwCreateSection crée un objet section.

Syntaxe

NTSYSAPI NTSTATUS ZwCreateSection(
  [out]          PHANDLE            SectionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PLARGE_INTEGER     MaximumSize,
  [in]           ULONG              SectionPageProtection,
  [in]           ULONG              AllocationAttributes,
  [in, optional] HANDLE             FileHandle
);

Paramètres

[out] SectionHandle

Pointeur vers une variable HANDLE qui reçoit un handle vers l’objet de section.

[in] DesiredAccess

Spécifie une valeur ACCESS_MASK qui détermine l’accès demandé à l’objet. En plus des droits d’accès définis pour tous les types d’objets (voir ACCESS_MASK), l’appelant peut spécifier l’un des droits d’accès suivants, qui sont spécifiques aux objets de section :

Indicateur DesiredAccess Permet à l’appelant d’effectuer cette opération
SECTION_EXTEND_SIZE Étendez dynamiquement la taille de la section.
SECTION_MAP_EXECUTE Exécutez les vues de la section.
SECTION_MAP_READ Lire les vues de la section.
SECTION_MAP_WRITE Écrire des vues de la section.
SECTION_QUERY Interrogez l’objet de section pour obtenir des informations sur la section. Les pilotes doivent définir cet indicateur.
SECTION_ALL_ACCESS Tous les indicateurs précédents combinés à STANDARD_RIGHTS_REQUIRED.

[in, optional] ObjectAttributes

Pointeur vers une structure OBJECT_ATTRIBUTES qui spécifie le nom de l’objet et d’autres attributs. Utilisez InitializeObjectAttributes pour initialiser cette structure. Si l’appelant n’est pas en cours d’exécution dans un contexte de thread système, il doit définir l’attribut OBJ_KERNEL_HANDLE lorsqu’il appelle InitializeObjectAttributes.

[in, optional] MaximumSize

Spécifie la taille maximale, en octets, de la section. ZwCreateSection arrondit cette valeur au multiple le plus proche de PAGE_SIZE. Si la section est sauvegardée par le fichier de pagination, MaximumSize spécifie la taille réelle de la section. Si la section est sauvegardée par un fichier ordinaire, MaximumSize spécifie la taille maximale à laquelle le fichier peut être étendu ou mappé.

[in] SectionPageProtection

Spécifie la protection à placer sur chaque page de la section. Utilisez l’une des quatre valeurs suivantes : PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE ou PAGE_WRITECOPY. Pour obtenir une description de ces valeurs, consultez CreateFileMapping.

[in] AllocationAttributes

Spécifie un masque de bits d’indicateurs SEC_XXX qui détermine les attributs d’allocation de la section. Pour obtenir une description de ces indicateurs, consultez CreateFileMapping.

[in, optional] FileHandle

Spécifie éventuellement un handle pour un objet de fichier ouvert. Si la valeur de FileHandle est NULL, la section est sauvegardée par le fichier de pagination. Sinon, la section est sauvegardée par le fichier spécifié.

Valeur retournée

ZwCreateSection retourne STATUS_SUCCESS en cas de réussite ou le code d’erreur NTSTATUS approprié en cas d’échec. Les codes de status d’erreur possibles incluent les éléments suivants :

Code de retour Description
STATUS_FILE_LOCK_CONFLICT Le fichier spécifié par le paramètre FileHandle est verrouillé.
STATUS_INVALID_FILE_FOR_SECTION Le fichier spécifié par FileHandle ne prend pas en charge les sections.
STATUS_INVALID_PAGE_PROTECTION La valeur spécifiée pour le paramètre SectionPageProtection n’est pas valide.
STATUS_MAPPED_FILE_SIZE_ZERO La taille du fichier spécifié par FileHandle est égale à zéro et MaximumSize à zéro.
STATUS_SECTION_TOO_BIG La valeur de MaximumSize est trop grande. Cela se produit lorsque MaximumSize est supérieur au maximum défini par le système pour les sections, ou si MaximumSize est supérieur au fichier spécifié et que la section n’est pas accessible en écriture.

Remarques

Une fois que le handle pointé par SectionHandle n’est plus utilisé, le pilote doit appeler ZwClose pour le fermer.

Si l’appelant n’est pas en cours d’exécution dans un contexte de thread système, il doit s’assurer que tous les handles qu’il crée sont des handles privés. Sinon, le handle est accessible par le processus dans lequel le pilote est en cours d’exécution. Pour plus d’informations, consultez Handles d’objet.

Pour plus d’informations sur la configuration des sections mappées et des vues de mémoire, consultez Sections et vues.

Si l’appel à cette fonction se produit en mode utilisateur, vous devez utiliser le nom « NtCreateSection » au lieu de « ZwCreateSection ».

Pour les appels à partir de pilotes en mode noyau, les versions NtXxx et ZwXxx d’une routine Windows Native System Services peuvent se comporter différemment dans la façon dont elles gèrent et interprètent les paramètres d’entrée. Pour plus d’informations sur la relation entre les versions NtXxx et ZwXxx d’une routine, consultez Utilisation des versions Nt et Zw des routines des services système natifs.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Voir aussi

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection