Funzione MmCopyMemory (ntddk.h)
Il MmCopyMemory routine copia l'intervallo specificato di memoria virtuale o fisica nel buffer fornito dal chiamante.
Sintassi
NTSTATUS MmCopyMemory(
[in] PVOID TargetAddress,
[in] MM_COPY_ADDRESS SourceAddress,
[in] SIZE_T NumberOfBytes,
[in] ULONG Flags,
[out] PSIZE_T NumberOfBytesTransferred
);
Parametri
[in] TargetAddress
Puntatore a un buffer fornito dal chiamante. Questo buffer deve essere in memoria non di paging.
[in] SourceAddress
Struttura MM_COPY_ADDRESS, passata per valore, che contiene l'indirizzo virtuale o l'indirizzo fisico dei dati da copiare nel buffer a cui punta TargetAddress.
[in] NumberOfBytes
Numero di byte da copiare da SourceAddress a TargetAddress.
[in] Flags
Flag che indicano se SourceAddress è un indirizzo virtuale o un indirizzo fisico. I bit di flag seguenti sono definiti per questo parametro.
Bit flag | Descrizione |
---|---|
MM_COPY_MEMORY_PHYSICAL | SourceAddress specifica un indirizzo fisico. |
MM_COPY_MEMORY_VIRTUAL | sourceAddress specifica un indirizzo virtuale. |
Questi due bit di flag si escludono a vicenda. Il chiamante deve impostare uno o l'altro, ma non entrambi.
[out] NumberOfBytesTransferred
Puntatore a una posizione in cui la routine scrive correttamente il numero di byte copiati dalla posizione SourceAddress nel buffer in corrispondenza del TargetAddress.
Valore restituito
MmCopyMemory restituisce STATUS_SUCCESS se l'intero intervallo è stato copiato correttamente. In caso contrario, viene restituito uno stato di errore e il chiamante deve esaminare il valore di output a cui punta il parametro NumberOfBytesTransferred per determinare il numero di byte effettivamente copiati.
Osservazioni
I driver in modalità kernel possono chiamare questa routine per accedere in modo sicuro a indirizzi fisici o virtuali arbitrari.
Se il flag MM_COPY_MEMORY_PHYSICAL è impostato, SourceAddress deve puntare alla memoria regolare sotto controllo del sistema operativo. MmCopyMemory restituirà un codice di stato di errore per gli indirizzi fisici che fanno riferimento allo spazio di I/O, che include i dispositivi mappati alla memoria e le tabelle del firmware. Per accedere alla memoria fisica nello spazio di I/O, i driver possono usare la routine MmMapIoSpace.
Se il flag MM_COPY_MEMORY_VIRTUAL è impostato, SourceAddress può puntare a un buffer nello spazio indirizzi di sistema o a un buffer nello spazio indirizzi utente del processo corrente. Se il chiamante non controlla la durata dell'allocazione contenente l'indirizzo di origine specificato, MmCopyMemory potrebbe non riuscire o restituire dati incoerenti, ma non causerà un arresto anomalo del sistema, anche per gli indirizzi di sistema non validi e attiverebbe un controllo dei bug se si fa riferimento direttamente. MmCopyMemory restituirà un codice di stato di errore per gli indirizzi virtuali di sistema che fanno riferimento allo spazio di I/O.
Se la memoria in corrispondenza dell'indirizzo virtuale specificato da sourceAddress non è residente, MmCopyMemory tenterà di renderla residente.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows 8.1. |
piattaforma di destinazione | Universale |
intestazione | ntddk.h |
libreria | Ntoskrnl.lib |
IRQL | <= APC_LEVEL |