Freigeben über


MmCopyMemory-Funktion (ntddk.h)

Die MmCopyMemory-Routine kopiert den angegebenen Bereich des virtuellen oder physischen Arbeitsspeichers 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 ausstellbaren Arbeitsspeicher befinden.

[in] SourceAddress

Eine MM_COPY_ADDRESS Struktur, die nach Wert übergeben wird und entweder die virtuelle Adresse oder die physische Adresse der Daten enthält, die in den Puffer kopiert werden sollen, auf den TargetAddress verweist.

[in] NumberOfBytes

Die Anzahl der Bytes, die von SourceAddress nach TargetAddress kopiert werden sollen.

[in] Flags

Flags, die angeben, ob SourceAddress eine virtuelle Oder eine physische Adresse ist. Für diesen Parameter werden die folgenden Flagbits 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 den einen oder den anderen festlegen, aber nicht beide.

[out] NumberOfBytesTransferred

Ein Zeiger auf einen Speicherort, an den die Routine die Anzahl der Bytes schreibt, die erfolgreich vom Speicherort SourceAddress in den Puffer bei TargetAddress kopiert wurden.

Rückgabewert

MmCopyMemory gibt STATUS_SUCCESS zurück, wenn der gesamte Bereich erfolgreich kopiert wurde. Andernfalls wird ein Fehler status zurückgegeben, und der Aufrufer muss den Ausgabewert überprüfen, auf den der Parameter NumberOfBytesTransferred verweist, um zu bestimmen, wie viele Bytes tatsächlich kopiert wurden.

Hinweise

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 den regulären Arbeitsspeicher verweisen, der vom Betriebssystem gesteuert wird. MmCopyMemory gibt einen Fehler status Code für physische Adressen zurück, die sich auf E/A-Speicherplatz beziehen, einschließlich speicherseitig zugeordneter Geräte und Firmwaretabellen. Für den Zugriff auf physischen Arbeitsspeicher im E/A-Bereich können Treiber die MmMapIoSpace-Routine verwenden.

Wenn das flag MM_COPY_MEMORY_VIRTUAL festgelegt ist, kann SourceAddress entweder auf einen Puffer im Systemadressraum oder auf einen Puffer im Benutzeradressraum des aktuellen Prozesses verweisen. Wenn der Aufrufer die Lebensdauer der Zuordnung nicht steuert, die die angegebene Quelladresse enthält, schlägt MmCopyMemory möglicherweise fehl oder gibt inkonsistente Daten zurück, verursacht aber keinen Systemabsturz – auch nicht für Systemadressen, die ungültig sind und eine Fehlerüberprüfung auslösen würden, wenn direkt verwiesen wird. MmCopyMemory gibt einen Fehler status Code für virtuelle Systemadressen zurück, die auf E/A-Speicherplatz verweisen.

Wenn der Arbeitsspeicher an der von SourceAddress angegebenen virtuellen Adresse nicht ansässig ist, versucht MmCopyMemory , ihn resident zu machen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.1.
Zielplattform Universell
Header ntddk.h
Bibliothek Ntoskrnl.lib
IRQL <= APC_LEVEL

Weitere Informationen

MM_COPY_ADDRESS

MmMapIoSpace