Speicherschutzkonstanten

Im Folgenden sind die Optionen für den Speicherschutz aufgeführt. Sie müssen einen der folgenden Werte angeben, wenn Sie eine Seite im Arbeitsspeicher zuweisen oder schützen. Schutzattribute können keinem Teil einer Seite zugewiesen werden. sie können nur einer ganzen Seite zugewiesen werden.

Beispiel

STDMETHODIMP CExtBuffer::FInit
    (
    ULONG cItemMax,     //@parm IN | Maximum number of items ever
    ULONG cbItem,       //@parm IN | Size of each item, in bytes
    ULONG cbPage        //@parm IN | Size of system page size (from SysInfo)
    )
{
    BYTE  *pb;

    m_cbReserved = ((cbItem *cItemMax) / cbPage + 1) *cbPage;
    m_rgItem = (BYTE *) VirtualAlloc( NULL, m_cbReserved, MEM_RESERVE, PAGE_READWRITE );

    if (m_rgItem == NULL)
        return ResultFromScode( E_OUTOFMEMORY );

    m_cbItem  = cbItem;
    m_dbAlloc = (cbItem / cbPage + 1) *cbPage;
    pb = (BYTE *) VirtualAlloc( m_rgItem, m_dbAlloc, MEM_COMMIT, PAGE_READWRITE );
    if (pb == NULL)
        {
        VirtualFree((VOID *) m_rgItem, 0, MEM_RELEASE );
        m_rgItem = NULL;
        return ResultFromScode( E_OUTOFMEMORY );
        }

    m_cbAlloc = m_dbAlloc;
    return ResultFromScode( S_OK );
}

Beispiel hierfür aus klassischen Windows-Beispielen auf GitHub.

Konstanten

Konstante/Wert BESCHREIBUNG
PAGE_EXECUTE
0x10
Ermöglicht den Ausführungszugriff auf den zugesicherten Bereich der Seiten. Ein Versuch, in die region zu schreiben, führt zu einer Zugriffsverletzung.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
PAGE_EXECUTE_READ
0x20
Ermöglicht den Ausführungs- oder schreibgeschützten Zugriff auf den zugesicherten Seitenbereich. Ein Versuch, in die region zu schreiben, führt zu einer Zugriffsverletzung.
Windows Server 2003 und Windows XP: Dieses Attribut wird von der CreateFileMapping-Funktion erst unter Windows XP mit SP2 und Windows Server 2003 mit SP1 unterstützt.
PAGE_EXECUTE_READWRITE
0x40
Ermöglicht den Ausführungs-, schreibgeschützten oder Lese-/Schreibzugriff auf den zugesicherten Seitenbereich.
Windows Server 2003 und Windows XP: Dieses Attribut wird von der CreateFileMapping-Funktion erst unter Windows XP mit SP2 und Windows Server 2003 mit SP1 unterstützt.
PAGE_EXECUTE_WRITECOPY
0x80
Ermöglicht den Ausführungs-, Schreib- oder Kopierzugriff auf eine zugeordnete Ansicht eines Dateizuordnungsobjekts. Ein Versuch, auf eine zugesagte Copy-on-Write-Seite zu schreiben, führt zu einer privaten Kopie der Seite, die für den Prozess erstellt wird. Die private Seite wird als PAGE_EXECUTE_READWRITE markiert, und die Änderung wird auf die neue Seite geschrieben.
Dieses Flag wird von den Funktionen VirtualAlloc oder VirtualAllocEx nicht unterstützt. Windows Vista, Windows Server 2003 und Windows XP: Dieses Attribut wird von der CreateFileMapping-Funktion erst unter Windows Vista mit SP1 und Windows Server 2008 unterstützt.

PAGE_NOACCESS
0x01
Deaktiviert den gesamten Zugriff auf die festgelegte Region der Seiten. Ein Versuch, aus der zugesicherten Region zu lesen, in diese zu schreiben oder auszuführen, führt zu einer Zugriffsverletzung.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
PAGE_READONLY
0x02
Ermöglicht schreibgeschützten Zugriff auf den zugesicherten Seitenbereich. Ein Versuch, in die region zu schreiben, führt zu einer Zugriffsverletzung. Wenn die Datenausführungsvermeidung aktiviert ist, führt ein Versuch, Code in der region auszuführen, zu einer Zugriffsverletzung.
PAGE_READWRITE
0x04
Ermöglicht schreibgeschützten oder schreibgeschützten Zugriff auf den zugesicherten Seitenbereich. Wenn die Datenausführungsvermeidung aktiviert ist, führt der Versuch, Code in der region auszuführen, zu einer Zugriffsverletzung.
PAGE_WRITECOPY
0x08
Ermöglicht schreibgeschützten oder kopiergeschützten Zugriff auf eine zugeordnete Ansicht eines Dateizuordnungsobjekts. Ein Versuch, auf eine zugesagte Copy-on-Write-Seite zu schreiben, führt zu einer privaten Kopie der Seite, die für den Prozess erstellt wird. Die private Seite wird als PAGE_READWRITE markiert, und die Änderung wird auf die neue Seite geschrieben. Wenn die Datenausführungsvermeidung aktiviert ist, führt der Versuch, Code in der region auszuführen, zu einer Zugriffsverletzung.
Dieses Flag wird von den Funktionen VirtualAlloc oder VirtualAllocEx nicht unterstützt.
PAGE_TARGETS_INVALID
0x40000000
Legt alle Speicherorte auf den Seiten als ungültige Ziele für CFG fest. Wird zusammen mit allen Ausführungsseitenschutz wie PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE und PAGE_EXECUTE_WRITECOPY verwendet. Jeder indirekte Aufruf von Speicherorten auf diesen Seiten schlägt CFG-Überprüfungen fehl, und der Prozess wird beendet. Das Standardverhalten für ausführbare Seiten, die zugewiesen werden, besteht darin, gültige Aufrufziele für CFG zu markieren.
Dieses Flag wird von den Funktionen VirtualProtect oder CreateFileMapping nicht unterstützt.
PAGE_TARGETS_NO_UPDATE
0x40000000
Für Seiten in der Region werden die CFG-Informationen nicht aktualisiert, während sich der Schutz für VirtualProtect ändert. Wenn beispielsweise die Seiten in der Region mithilfe von PAGE_TARGETS_INVALID zugeordnet wurden, werden die ungültigen Informationen beibehalten, während sich der Seitenschutz ändert. Dieses Flag ist nur gültig, wenn sich der Schutz in einen ausführbaren Typ wie PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE und PAGE_EXECUTE_WRITECOPY ändert. Das Standardverhalten für die Änderung des VirtualProtect-Schutzes in ausführbare Dateien besteht darin, alle Speicherorte als gültige Aufrufziele für CFG zu markieren.

Im Folgenden sind Modifizierer aufgeführt, die zusätzlich zu den in der vorherigen Tabelle angegebenen Optionen verwendet werden können, sofern nicht wie angegeben.

Konstante/Wert BESCHREIBUNG
PAGE_GUARD
0x100
Seiten in der Region werden zu Schutzseiten. Jeder Versuch, auf eine Schutzseite zuzugreifen, führt dazu, dass das System eine STATUS_GUARD_PAGE_VIOLATION Ausnahme auslöst und die Schutzseite status deaktiviert. Schutzseiten fungieren somit als einmaliger Zugriffsalarm. Weitere Informationen finden Sie unter dem Link zum Erstellen von Schutzseiten.
Wenn ein Zugriffsversuch dazu führt, dass das System die Schutzseite status deaktiviert, übernimmt der zugrunde liegende Seitenschutz.
Wenn während eines Systemdiensts eine Ausnahme für eine Schutzseite auftritt, gibt der Dienst in der Regel einen Fehler status Indikators zurück.
Dieser Wert kann nicht mit PAGE_NOACCESS verwendet werden.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
PAGE_NOCACHE
0x200
Legt fest, dass alle Seiten nicht cachierbar sind. Anwendungen sollten dieses Attribut nur verwenden, wenn sie für ein Gerät explizit erforderlich sind. Die Verwendung der verriegelten Funktionen mit Speicher, der SEC_NOCACHE zugeordnet ist, kann zu einer EXCEPTION_ILLEGAL_INSTRUCTION Ausnahme führen.
Das PAGE_NOCACHE-Flag kann nicht mit dem PAGE_GUARD-, PAGE_NOACCESS- oder PAGE_WRITECOMBINE-Flag verwendet werden.
Das PAGE_NOCACHE-Flag kann nur verwendet werden, wenn der private Arbeitsspeicher mit den Funktionen VirtualAlloc, VirtualAllocEx oder VirtualAllocExNuma zugewiesen wird. Um den Zugriff auf nicht zwischengespeicherten Arbeitsspeicher für gemeinsam genutzten Arbeitsspeicher zu aktivieren, geben Sie beim Aufrufen der CreateFileMapping-Funktion das SEC_NOCACHE-Flag an.
PAGE_WRITECOMBINE
0x400
Legt fest, dass alle Seiten kombiniert werden sollen.
Anwendungen sollten dieses Attribut nur verwenden, wenn sie für ein Gerät explizit erforderlich sind. Die Verwendung der verriegelten Funktionen mit Arbeitsspeicher, der als kombiniertes Schreiben zugeordnet ist, kann zu einer EXCEPTION_ILLEGAL_INSTRUCTION Ausnahme führen.
Das PAGE_WRITECOMBINE-Flag kann nicht mit den PAGE_NOACCESS-, PAGE_GUARD- und PAGE_NOCACHE-Flags angegeben werden.
Das PAGE_WRITECOMBINE-Flag kann nur verwendet werden, wenn der private Arbeitsspeicher mit den Funktionen VirtualAlloc, VirtualAllocEx oder VirtualAllocExNuma zugewiesen wird. Um den kombinierten Schreibzugriff für gemeinsam genutzten Arbeitsspeicher zu aktivieren, geben Sie beim Aufrufen der CreateFileMapping-Funktion das flag SEC_WRITECOMBINE an.
Windows Server 2003 und Windows XP: Dieses Flag wird erst unter Windows Server 2003 mit SP1 unterstützt.

Die folgenden Konstanten können nur mit der unterstützten Funktion verwendet werden, wenn Sie eine Enclave angeben, die über die Intel Software Guard Extensions (SGX)-Architektur verfügt.

Konstante BESCHREIBUNG Unterstützte Funktion
PAGE_ENCLAVE_DECOMMIT
Gibt an, dass die Seite geschützt wird, um die weitere Verwendung in einer Enclave zu verhindern.
Dieses Flag darf nicht mit anderen Flags kombiniert werden.
Dieses Flag ist nur für SGX2-Enclaves gültig.
VirtualProtect
PAGE_ENCLAVE_THREAD_CONTROL
Die Seite enthält eine Threadsteuerelementstruktur (Thread Control Structure, TCS).
LoadEnclaveData
VirtualProtect
PAGE_ENCLAVE_UNVALIDATED
Die von Ihnen angegebenen Seiteninhalte sind von der Messung mit der EEXTEND-Anweisung des Intel SGX-Programmiermodells ausgeschlossen.
LoadEnclaveData

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
Header
WinNT.h (windows.h einschließen)

Siehe auch

CreateFileMapping

Arbeitsspeicherschutz

VirtualAlloc

VirtualAllocEx

LoadEnclaveData