Arbeiten mit Seiten

Um die Größe einer Seite auf dem aktuellen Computer zu bestimmen, verwenden Sie die GetSystemInfo-Funktion .

Die Funktionen VirtualQuery und VirtualQueryEx geben Informationen zu einer Region aufeinanderfolgender Seiten zurück, die bei einer angegebenen Adresse im Adressraum eines Prozesses beginnen. VirtualQuery gibt Informationen zum Arbeitsspeicher im aufrufenden Prozess zurück. VirtualQueryEx gibt Informationen zum Arbeitsspeicher in einem angegebenen Prozess zurück und wird verwendet, um Debugger zu unterstützen, die Informationen zu einem zu debuggenden Prozess benötigen. Der Bereich der Seiten wird durch die angegebene Adresse begrenzt, die auf die nächste Seitengrenze gerundet ist. Sie erstreckt sich über alle nachfolgenden Seiten mit den folgenden Attributen:

  • Der Zustand aller Seiten ist identisch: entweder committet, reserviert oder frei.
  • Wenn die anfangse Seite nicht frei ist, sind alle Seiten in der Region Teil derselben anfänglichen Zuordnung von Seiten, die durch einen Aufruf von VirtualAlloc reserviert wurden.
  • Der Zugriffsschutz für alle Seiten ist identisch (d.a. PAGE_READONLY, PAGE_READWRITE oder PAGE_NOACCESS).

Die VirtualLock-Funktion ermöglicht es einem Prozess, eine oder mehrere Seiten des gebundenen Arbeitsspeichers in den physischen Arbeitsspeicher (RAM) zu sperren, wodurch verhindert wird, dass das System die Seiten in die Auslagerungsdatei auswechselt. Es kann verwendet werden, um sicherzustellen, dass auf kritische Daten ohne Datenträgerzugriff zugegriffen werden kann. Das Sperren von Seiten im Arbeitsspeicher ist gefährlich, da dies die Fähigkeit des Systems zur Verwaltung des Arbeitsspeichers einschränkt. Eine übermäßige Verwendung von VirtualLock kann die Systemleistung beeinträchtigen, da ausführbarer Code in die Auslagerungsdatei ausgetauscht wird. Die VirtualUnlock-Funktion entsperrt den von VirtualLock gesperrten Speicher.

Mit der VirtualProtect-Funktion kann ein Prozess den Zugriffsschutz einer beliebigen committeten Seite im Adressraum eines Prozesses ändern. Beispielsweise kann ein Prozess Lese-/Schreibseiten zuordnen, um vertrauliche Daten zu speichern, und dann kann er den Zugriff auf schreibgeschützt oder keinen Zugriff ändern, um vor versehentlichem Überschreiben zu schützen. VirtualProtect wird in der Regel mit Seiten verwendet, die von VirtualAlloc zugeordnet sind, aber es funktioniert auch mit Seiten, die von einer der anderen Zuordnungsfunktionen committet werden. VirtualProtect ändert jedoch den Schutz ganzer Seiten, und zeiger, die von den anderen Funktionen zurückgegeben werden, werden nicht unbedingt an Seitengrenzen ausgerichtet. Die VirtualProtectEx-Funktion ähnelt VirtualProtect, mit der Ausnahme, dass sie den Schutz des Arbeitsspeichers in einem angegebenen Prozess ändert. Das Ändern des Schutzes ist nützlich für Debugger beim Zugriff auf den Arbeitsspeicher eines zu debuggenden Prozesses.