MmCopyMemory-Funktion (ntddk.h)
Die MmCopyMemory Routine kopiert den angegebenen Bereich des virtuellen oder physischen Speichers in den vom Aufrufer bereitgestellten Puffer.
Syntax
NTSTATUS MmCopyMemory(
[in] PVOID TargetAddress,
[in] MM_COPY_ADDRESS SourceAddress,
[in] SIZE_T NumberOfBytes,
[in] ULONG Flags,
[out] PSIZE_T NumberOfBytesTransferred
);
Parameter
[in] TargetAddress
Ein Zeiger auf einen vom Aufrufer bereitgestellten Puffer. Dieser Puffer muss sich im nicht ausgelagerten Speicher befinden.
[in] SourceAddress
Eine MM_COPY_ADDRESS Struktur, die nach Wert übergeben wird, die entweder die virtuelle Adresse oder die physische Adresse der Daten enthält, die in den Puffer kopiert werden sollen, auf TargetAddressverweist.
[in] NumberOfBytes
Die Anzahl der Bytes, die von SourceAddress in TargetAddresskopiert werden sollen.
[in] Flags
Flags, die angeben, ob SourceAddress eine virtuelle Adresse oder eine physische Adresse ist. Die folgenden Flagbits werden für diesen Parameter definiert.
Flagbit | Beschreibung |
---|---|
MM_COPY_MEMORY_PHYSICAL | SourceAddress- gibt eine physische Adresse an. |
MM_COPY_MEMORY_VIRTUAL | SourceAddress- gibt eine virtuelle Adresse an. |
Diese beiden Flagbits schließen sich gegenseitig aus. Der Aufrufer muss einen oder den anderen festlegen, aber nicht beides.
[out] NumberOfBytesTransferred
Ein Zeiger auf eine Position, an die die Routine die Anzahl der Bytes schreibt, die erfolgreich von der SourceAddress Speicherort in den Puffer bei TargetAddresskopiert wurden.
Rückgabewert
MmCopyMemory gibt STATUS_SUCCESS zurück, wenn der gesamte Bereich erfolgreich kopiert wurde. Andernfalls wird ein Fehlerstatus zurückgegeben, und der Aufrufer muss den Ausgabewert prüfen, auf den der NumberOfBytesTransferred Parameter verweist, um zu bestimmen, wie viele Bytes tatsächlich kopiert wurden.
Bemerkungen
Kernelmodustreiber können diese Routine aufrufen, um sicher auf beliebige physische oder virtuelle Adressen zuzugreifen.
Wenn das MM_COPY_MEMORY_PHYSICAL Flag festgelegt ist, sollte SourceAddress- auf normalen Arbeitsspeicher verweisen, der unter Kontrolle des Betriebssystems ist. MmCopyMemory- gibt einen Fehlerstatuscode für physische Adressen zurück, die auf den E/A-Bereich verweisen, der speicherzuordnungsfähige Geräte und Firmwaretabellen enthält. Um auf physischen Speicher im E/A-Raum zuzugreifen, können Treiber die MmMapIoSpace- Routine verwenden.
Wenn das MM_COPY_MEMORY_VIRTUAL-Flag festgelegt ist, kann SourceAddress- entweder auf einen Puffer im Systemadressraum oder auf einen Puffer im Benutzeradressbereich des aktuellen Prozesses verweisen. Wenn der Aufrufer die Lebensdauer der Zuordnung, die die angegebene Quelladresse enthält, nicht steuert, MmCopyMemory- möglicherweise fehlschlägt oder inkonsistente Daten zurückgibt, führt aber nicht zu einem Systemabsturz – auch bei Systemadressen, die ungültig sind und eine Fehlerüberprüfung auslösen würden, wenn direkt darauf verwiesen wird. mmCopyMemory gibt einen Fehlerstatuscode für virtuelle Systemadressen zurück, die auf den E/A-Bereich verweisen.
Wenn der Durch SourceAddress- angegebene Arbeitsspeicher nicht vorhanden ist, versucht MmCopyMemory-, es zu residentieren.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows 8.1. |
Zielplattform- | Universal |
Header- | ntddk.h |
Library | Ntoskrnl.lib |
IRQL- | <= APC_LEVEL |