Partager via


MmCopyMemory, fonction (ntddk.h)

La routine MmCopyMemory copie la plage spécifiée de mémoire virtuelle ou physique dans la mémoire tampon fournie par l’appelant.

Syntaxe

NTSTATUS MmCopyMemory(
  [in]  PVOID           TargetAddress,
  [in]  MM_COPY_ADDRESS SourceAddress,
  [in]  SIZE_T          NumberOfBytes,
  [in]  ULONG           Flags,
  [out] PSIZE_T         NumberOfBytesTransferred
);

Paramètres

[in] TargetAddress

Pointeur vers une mémoire tampon fournie par l’appelant. Cette mémoire tampon doit être en mémoire non modifiable.

[in] SourceAddress

Structure MM_COPY_ADDRESS, passée par valeur, qui contient l’adresse virtuelle ou l’adresse physique des données à copier dans la mémoire tampon pointée par TargetAddress.

[in] NumberOfBytes

Nombre d’octets à copier de SourceAddress vers TargetAddress.

[in] Flags

Indicateurs qui indiquent si SourceAddress est une adresse virtuelle ou une adresse physique. Les bits d’indicateur suivants sont définis pour ce paramètre.

Bit d’indicateur Description
MM_COPY_MEMORY_PHYSICAL SourceAddress spécifie une adresse physique.
MM_COPY_MEMORY_VIRTUAL SourceAddress spécifie une adresse virtuelle.

Ces deux bits d’indicateur s’excluent mutuellement. L’appelant doit définir l’un ou l’autre, mais pas les deux.

[out] NumberOfBytesTransferred

Pointeur vers un emplacement vers lequel la routine écrit le nombre d’octets correctement copiés à partir de l’emplacement SourceAddress dans la mémoire tampon à TargetAddress.

Valeur de retour

mmCopyMemory retourne STATUS_SUCCESS si la plage entière a été copiée avec succès. Sinon, un état d’erreur est retourné et l’appelant doit inspecter la valeur de sortie pointée par le paramètre NumberOfBytesTransferred pour déterminer le nombre d’octets réellement copiés.

Remarques

Les pilotes en mode noyau peuvent appeler cette routine pour accéder en toute sécurité aux adresses physiques ou virtuelles arbitraires.

Si l’indicateur MM_COPY_MEMORY_PHYSICAL est défini, SourceAddress doit pointer vers la mémoire normale sous contrôle du système d’exploitation. mmCopyMemory retourne un code d’état d’erreur pour les adresses physiques qui font référence à l’espace d’E/S, qui inclut des appareils mappés en mémoire et des tables de microprogramme. Pour accéder à la mémoire physique dans l’espace d’E/S, les pilotes peuvent utiliser la routine MmMapIoSpace.

Si l’indicateur MM_COPY_MEMORY_VIRTUAL est défini, SourceAddress peut pointer vers une mémoire tampon dans l’espace d’adressage système ou une mémoire tampon dans l’espace d’adressage utilisateur du processus actuel. Si l’appelant ne contrôle pas la durée de vie de l’allocation contenant l’adresse source spécifiée, MmCopyMemory peut échouer ou retourner des données incohérentes, mais ne provoque pas de blocage du système, même pour les adresses système non valides et déclenche une vérification de bogue si elle est référencée directement. mmCopyMemory retourne un code d’état d’erreur pour les adresses virtuelles système qui font référence à l’espace d’E/S.

Si la mémoire à l’adresse virtuelle spécifiée par SourceAddress n’est pas résidente, mmCopyMemory tentera de le rendre résident.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 8.1.
plateforme cible Universel
d’en-tête ntddk.h
bibliothèque Ntoskrnl.lib
IRQL <= APC_LEVEL

Voir aussi

MM_COPY_ADDRESS

MmMapIoSpace