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 |