Fonction ZwMapViewOfSection (wdm.h)
La routine ZwMapViewOfSection mappe une vue d’une section dans l’espace d’adressage virtuel d’un processus d’objet.
Syntaxe
NTSYSAPI NTSTATUS ZwMapViewOfSection(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in] ULONG_PTR ZeroBits,
[in] SIZE_T CommitSize,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] SECTION_INHERIT InheritDisposition,
[in] ULONG AllocationType,
[in] ULONG Win32Protect
);
Paramètres
[in] SectionHandle
Gérer vers un objet de section. Ce handle est créé par un appel réussi à ZwCreateSection ou ZwOpenSection.
[in] ProcessHandle
Gérez l’objet qui représente le processus dans lequel la vue doit être mappée. Utilisez la macro ZwCurrentProcess pour spécifier le processus en cours. Le handle doit avoir été ouvert avec PROCESS_VM_OPERATION accès.
[in, out] BaseAddress
Pointeur vers une variable qui reçoit l’adresse de base de la vue. Si la valeur de ce paramètre n’est pas NULL, la vue est allouée à partir de l’adresse virtuelle spécifiée arrondie à la limite d’adresse de 64 kilo-octets suivante.
[in] ZeroBits
Spécifie le nombre de bits d’adresse d’ordre élevé qui doivent être zéro dans l’adresse de base de l’affichage de section. La valeur de ce paramètre doit être inférieure à 21 et est utilisée uniquement si BaseAddress a la valeur NULL, en d’autres termes, lorsque l’appelant permet au système de déterminer où allouer la vue.
[in] CommitSize
Spécifie la taille, en octets, de la région initialement validée de la vue. CommitSize est significatif uniquement pour les sections sauvegardées par un fichier de page et est arrondi au multiple le plus proche de PAGE_SIZE. (Pour les sections qui mappent des fichiers, les données et l’image sont validées au moment de la création de la section.)
[in, out, optional] SectionOffset
Pointeur vers une variable qui reçoit le décalage, en octets, entre le début de la section et la vue. Si ce pointeur n’a pas la valeur NULL, le décalage est arrondi à la limite de taille de granularité d’allocation suivante.
[in, out] ViewSize
Pointeur vers une variable SIZE_T. Si la valeur initiale de cette variable est zéro, ZwMapViewOfSection mappe une vue de la section qui commence à SectionOffset et continue à la fin de la section. Sinon, la valeur initiale spécifie la taille de la vue, en octets. ZwMapViewOfSection arrondit toujours cette valeur au multiple le plus proche de PAGE_SIZE avant de mapper la vue.
Au retour, la valeur reçoit la taille réelle, en octets, de la vue.
[in] InheritDisposition
Spécifie la façon dont la vue doit être partagée avec des processus enfants. Les valeurs possibles sont les suivantes :
ViewShare
La vue sera mappée dans tous les processus enfants qui seront créés à l’avenir.
ViewUnmap
La vue n’est pas mappée dans des processus enfants.
Les pilotes doivent généralement spécifier ViewUnmap pour ce paramètre.
[in] AllocationType
Spécifie un ensemble d’indicateurs qui décrit le type d’allocation à effectuer pour la région de pages spécifiée. Les indicateurs valides sont MEM_LARGE_PAGES, MEM_RESERVE et MEM_TOP_DOWN. Bien que MEM_COMMIT ne soit pas autorisé, il est implicite, sauf si MEM_RESERVE est spécifié. Pour plus d’informations sur les indicateurs MEM_XXX , consultez la description de la routine VirtualAlloc .
[in] Win32Protect
Spécifie le type de protection pour la région des pages initialement validées. Les pilotes d’appareil et intermédiaires doivent définir cette valeur sur PAGE_READWRITE.
Valeur retournée
ZwMapViewOfSection retourne une valeur NTSTATUS. Les valeurs de retour possibles sont les suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS | La routine a correctement effectué l’opération demandée. |
STATUS_CONFLICTING_ADDRESSES | La plage d’adresses spécifiée est en conflit avec une plage d’adresses déjà réservée, ou le type d’attribut de cache spécifié est en conflit avec l’attribut de cache existant de la plage d’adresses. Par exemple, si la mémoire en cours de mappage se trouve dans une grande page qui est déjà mappée comme entièrement mise en cache, il n’est pas possible de demander à mapper cette mémoire en tant que mémoire non mise en cache ou en écriture combinée. |
STATUS_INVALID_PAGE_PROTECTION | La valeur spécifiée pour le paramètre Protect n’est pas valide. |
STATUS_SECTION_PROTECTION | La valeur spécifiée pour le paramètre AllocationType n’est pas compatible avec le type de protection spécifié lors de la création de la section. |
Remarques
Plusieurs vues différentes d’une section peuvent être mappées simultanément dans l’espace d’adressage virtuel d’un ou plusieurs processus.
Si la section spécifiée n’existe pas ou si l’accès demandé n’est pas autorisé, ZwMapViewOfSection retourne une erreur.
N’utilisez pas ZwMapViewOfSection pour mapper une plage de mémoire de \Device\PhysicalMemory en mode utilisateur, sauf si votre pilote a alloué directement la plage de mémoire via MmAllocatePagesForMdl ou une autre méthode garantissant qu’aucun autre composant système n’a mappé la même plage de mémoire avec une valeur MEMORY_CACHING_TYPE différente.
Les applications utilisateur ne peuvent pas accéder directement à \Device\PhysicalMemory à partir de Windows Server 2003 avec Service Pack 1 (SP1) et ne peuvent y accéder que si le pilote transmet un handle à l’application.
Pour plus d’informations sur les objets de section, consultez Objets et vues de section.
Si l’appel à cette fonction se produit en mode utilisateur, vous devez utiliser le nom « NtMapViewOfSection » au lieu de « ZwMapViewOfSection ».
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, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport),PowerIrpDDis(wdm) |
Voir aussi
Utilisation des versions Nt et Zw des routines natives des services système natifs
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour