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 |