Funzione VirtualLock (memoryapi.h)

Blocca l'area specificata dello spazio indirizzi virtuale del processo nella memoria fisica, assicurando che l'accesso successivo all'area non incorra in un errore di pagina.

Sintassi

BOOL VirtualLock(
  [in] LPVOID lpAddress,
  [in] SIZE_T dwSize
);

Parametri

[in] lpAddress

Puntatore all'indirizzo di base dell'area delle pagine da bloccare.

[in] dwSize

Dimensioni dell'area da bloccare, in byte. L'area delle pagine interessate include tutte le pagine che contengono uno o più byte nell'intervallo dal parametro lpAddress a (lpAddress+dwSize). Ciò significa che un intervallo di 2 byte che stradding un limite di pagina causa il blocco di entrambe le pagine.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

È necessario eseguire il commit di tutte le pagine nell'area specificata. Impossibile bloccare la memoria protetta con PAGE_NOACCESS .

Il blocco delle pagine in memoria può ridurre le prestazioni del sistema riducendo la RAM disponibile e forzando il sistema a scambiare altre pagine critiche nel file di paging. Ogni versione di Windows ha un limite per il numero massimo di pagine che un processo può bloccare. Questo limite è intenzionalmente piccolo per evitare un grave degrado delle prestazioni. Le applicazioni che devono bloccare numeri maggiori di pagine devono prima chiamare la funzione SetProcessWorkingSetSize per aumentare le dimensioni minime e massime del set di lavoro. Il numero massimo di pagine che un processo può bloccare è uguale al numero di pagine nel set minimo di lavoro meno un sovraccarico ridotto.

Le pagine bloccate da un processo rimangono in memoria fisica fino a quando il processo li sblocca o termina. Queste pagine non devono essere scritte nel file di pagina mentre sono bloccate.

Per sbloccare un'area di pagine bloccate, usare la funzione VirtualUnlock . Le pagine bloccate vengono sbloccate automaticamente al termine del processo.

Questa funzione non è simile alla funzione GlobalLock o LocalLock in cui non incrementa un conteggio dei blocchi e converte un handle in un puntatore. Non esiste alcun conteggio dei blocchi per le pagine virtuali, quindi non sono mai necessarie più chiamate alla funzione VirtualUnlock per sbloccare un'area di pagine.

Esempio

Per un esempio, vedere Creazione di pagine guard.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (includono Windows.h, Memoryapi.h)
Libreria onecore.lib
DLL Kernel32.dll

Vedere anche

Funzioni di gestione della memoria

SetProcessWorkingSetSize

Funzioni di memoria virtuale

VirtualUnlock