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 |