Freigeben über


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

Siehe auch

MM_COPY_ADDRESS

MmMapIoSpace-