Funzione MmCopyMemory (ntddk.h)
La routine MmCopyMemory 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 modificabile.
[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. Per questo parametro vengono definiti i bit di flag seguenti.
Flag bit | 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 il numero di byte copiati correttamente dal percorso SourceAddress nel buffer in 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 controllare il valore di output a cui punta il parametro NumberOfBytesTransferred per determinare il numero di byte effettivamente copiati.
Commenti
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 di 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.
Requisiti
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 |