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 |