Condividi tramite


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

Vedi anche

MM_COPY_ADDRESS

MmMapIoSpace