Freigeben über


VirtualLock-Funktion (memoryapi.h)

Sperrt den angegebenen Bereich des virtuellen Adressraums des Prozesses in den physischen Arbeitsspeicher, um sicherzustellen, dass beim nachfolgenden Zugriff auf die Region kein Seitenfehler auftritt.

Syntax

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

Parameter

[in] lpAddress

Ein Zeiger auf die Basisadresse des Bereichs der zu sperrenden Seiten.

[in] dwSize

Die Größe der zu sperrenden Region in Bytes. Der Bereich der betroffenen Seiten umfasst alle Seiten, die ein oder mehrere Bytes im Bereich vom parameter lpAddress bis enthalten (lpAddress+dwSize). Dies bedeutet, dass ein 2-Byte-Bereich, der eine Seitengrenze überspannt, dazu führt, dass beide Seiten gesperrt werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Alle Seiten in der angegebenen Region müssen committet werden. Speicher, der mit PAGE_NOACCESS geschützt ist, kann nicht gesperrt werden.

Das Sperren von Seiten im Arbeitsspeicher kann die Leistung des Systems beeinträchtigen, indem der verfügbare RAM reduziert und das System gezwungen wird, andere kritische Seiten in die Auslagerungsdatei auszutauschen. Jede Version von Windows hat ein Limit für die maximale Anzahl von Seiten, die ein Prozess sperren kann. Diese Grenze ist absichtlich klein, um eine schwerwiegende Leistungsbeeinträchtigung zu vermeiden. Anwendungen, die eine größere Anzahl von Seiten sperren müssen, müssen zuerst die SetProcessWorkingSetSize-Funktion aufrufen, um ihre minimalen und maximalen Arbeitssatzgrößen zu erhöhen. Die maximale Anzahl von Seiten, die ein Prozess sperren kann, entspricht der Anzahl der Seiten in seinem minimalen Arbeitssatz abzüglich eines kleinen Mehraufwands.

Seiten, die ein Prozess gesperrt hat, verbleiben im physischen Arbeitsspeicher, bis sie vom Prozess entsperrt oder beendet werden. Diese Seiten werden garantiert nicht in die Seitendatei geschrieben, während sie gesperrt sind.

Um einen Bereich gesperrter Seiten zu entsperren, verwenden Sie die VirtualUnlock-Funktion . Gesperrte Seiten werden automatisch entsperrt, wenn der Prozess beendet wird.

Diese Funktion ähnelt nicht der GlobalLock - oder LocalLock-Funktion , da sie eine Sperranzahl nicht erhöht und ein Handle in einen Zeiger übersetzt. Es gibt keine Sperranzahl für virtuelle Seiten, sodass nie mehrere Aufrufe der VirtualUnlock-Funktion erforderlich sind, um einen Bereich von Seiten zu entsperren.

Beispiele

Ein Beispiel finden Sie unter Erstellen von Schutzseiten.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile memoryapi.h (einschließlich Windows.h, Memoryapi.h)
Bibliothek onecore.lib
DLL Kernel32.dll

Siehe auch

Speicherverwaltungsfunktionen

SetProcessWorkingSetSize

Funktionen des virtuellen Speichers

VirtualUnlock