Funzione ZwSetInformationVirtualMemory (ntifs.h)

La routine ZwSetInformationVirtualMemory esegue un'operazione su un elenco specificato di intervalli di indirizzi nello spazio 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 eseguire l'operazione. L'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 contenente 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.

Commenti

La routine ZwSetInformationVirtualMemory viene chiamata dai driver che conoscono il set di indirizzi a cui accederanno. Se è probabile che questi indirizzi non si trovino più nella memoria (ad esempio, sono stati caricati su disco), chiamando questa routine su tali intervalli di indirizzi prima che l'accesso riduca la latenza complessiva perché consente di inserire in modo efficiente gli intervalli di indirizzi dal disco usando richieste di I/O simultanee di grandi dimensioni laddove possibile.

ZwSetInformationVirtualMemory consente ai driver di usare in modo efficiente l'hardware del disco tramite l'emissione di 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 più piccolo di operazioni di I/O che verrebbero rilasciate tramite errori di pagina.

I driver chiamano questa routine esclusivamente per l'ottimizzazione delle prestazioni: il prelettura non è necessario 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 nella 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 ai soliti vincoli di memoria fisica in cui può essere completamente o parzialmente negativo in condizioni di memoria insufficiente. Può anche creare un utilizzo elevato della memoria se chiamato con intervalli di indirizzi di grandi dimensioni, quindi le applicazioni devono eseguire il prelettura degli intervalli di indirizzi che useranno effettivamente.

Requisiti

   
Client minimo supportato Disponibile a partire da 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