Fonction MmCopyMemory (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 pagéable.

[in] SourceAddress

Une structure MM_COPY_ADDRESS , transmise 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 vers la mémoire tampon sur TargetAddress.

Valeur retournée

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

Remarques

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

Si l’indicateur MM_COPY_MEMORY_PHYSICAL est défini, SourceAddress doit pointer vers la mémoire régulière qui est sous contrôle du système d’exploitation. MmCopyMemory retourne une erreur status code pour les adresses physiques qui font référence à l’espace d’E/S, y compris les appareils mappés en mémoire et les tables de microprogrammes. 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 en cours. 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 provoquera pas d’incident système, même pour les adresses système qui ne sont pas valides et déclenchent un bogue case activée si elles sont référencées directement. MmCopyMemory retourne une erreur status code 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 essaiera de la rendre résidente.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.1.
Plateforme cible Universal
En-tête ntddk.h
Bibliothèque Ntoskrnl.lib
IRQL <= APC_LEVEL

Voir aussi

MM_COPY_ADDRESS

MmMapIoSpace