Condividi tramite


Funzione ZwSetInformationVirtualMemory (ntifs.h)

La routine ZwSetInformationVirtualMemory esegue un'operazione su un elenco specificato di intervalli di indirizzi nello spazio degli indirizzi utente di un processo.

Sintassi

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

Parametri

[in] ProcessHandle

Specifica un handle aperto per il processo nel contesto di cui deve essere eseguita l'operazione. Questo handle non può essere valido. Utilizzare la macro NtCurrentProcess definita in Ntddk.h per specificare il processo corrente.

[in] VmInformationClass

Specifica il tipo di operazione da eseguire. Impostare su VmPrefetchInformation definito nell'enumerazione VIRTUAL_MEMORY_INFORMATION_CLASS, vedere ntddk.h.

[in] NumberOfEntries

Numero di voci nella matrice a cui punta il parametro VirtualAddresses. Questo parametro non può essere 0.

[in] VirtualAddresses

Puntatore a una matrice di strutture MEMORY_RANGE_ENTRY in cui ogni voce specifica un intervallo di indirizzi virtuali da elaborare. Gli intervalli di indirizzi virtuali possono coprire qualsiasi parte dello spazio indirizzi del processo accessibile dal processo di destinazione.

[in] VmInformation

Puntatore a un buffer che contiene informazioni sulla memoria. Il formato e il contenuto del buffer dipendono dalla classe di informazioni specificata.

Se VmInformationClass è VmPrefetchInformation, questo parametro non può essere NULL e deve puntare a una variabile ULONG impostata su 0.

[in] VmInformationLength

Dimensioni del buffer a cui punta VmInformation.

Se VmInformationClass è VmPrefetchInformation, deve essere sizeof (ULONG).

Valore restituito

ZwSetInformationVirtualMemory restituisce STATUS_SUCCESS in caso di esito positivo o il codice di errore NTSTATUS appropriato in caso di errore.

Osservazioni

La routine ZwSetInformationVirtualMemory viene chiamata dai driver che conoscono il set di indirizzi a cui accederanno. Se è probabile che questi indirizzi non siano più residenti in memoria (ovvero che sono stati sottoposti a paging su disco), chiamando questa routine su tali intervalli di indirizzi prima che l'accesso riduca la latenza complessiva perché porta in modo efficiente tali intervalli di indirizzi dal disco usando richieste di I/O simultanee di grandi dimensioni, dove possibile.

ZwSetInformationVirtualMemory consente ai driver di usare in modo efficiente l'hardware del disco eseguendo operazioni di I/O simultanee di grandi dimensioni, se possibile quando il driver fornisce un elenco di intervalli di indirizzi di processo a cui si accede. Anche per un singolo intervallo di indirizzi (ad esempio un mapping di file), la routine può offrire miglioramenti delle prestazioni eseguendo un singolo I/O di grandi dimensioni anziché il numero di operazioni di I/O più piccole che verrebbero rilasciate tramite errori di pagina.

I driver chiamano questa routine esclusivamente per l'ottimizzazione delle prestazioni: la prelettura non è necessaria per accedere agli intervalli di indirizzi di destinazione. La memoria prelettura non viene aggiunta al working set del processo di destinazione; viene memorizzato nella cache in memoria fisica. Quando gli intervalli di indirizzi prelettura sono accessibili dal processo di destinazione, vengono aggiunti al working set.

Poiché questa chiamata non è necessaria per il corretto funzionamento del driver, viene considerata come un suggerimento sicuro dal sistema ed è soggetta a normali vincoli di memoria fisica in cui può avere esito negativo completamente o parzialmente in condizioni di memoria insufficiente. Può anche creare un utilizzo elevato della memoria se viene chiamato con intervalli di indirizzi di grandi dimensioni, quindi le applicazioni devono preletturare gli intervalli di indirizzi effettivamente usati.

Fabbisogno

Requisito Valore
client minimo supportato Windows 10, versione 1511.
piattaforma di destinazione Universale
intestazione ntifs.h (include Ntddk.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs, PowerIrpDDis