Memory Protection-Konstanten

Im Folgenden finden Sie die Speicherschutzoptionen: Sie müssen einen der folgenden Werte angeben, wenn Sie eine Seite im Arbeitsspeicher zuordnen oder schützen. Schutzattribute können einem Teil einer Seite nicht 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 aus Windows klassischen Beispielen auf GitHub.

Konstanten

Konstante/Wert BESCHREIBUNG
SEITE _ EXECUTE
0x10
Ermöglicht den Ausführungszugriff auf den Bereich der Seiten, für den ein Committed ausgeführt wurde. Der Versuch, in die Region zu schreiben, für die ein Schreibversuch unternommen wurde, führt zu einer Zugriffsverletzung.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
SEITE _ EXECUTE _ READ
0x20
Ermöglicht die Ausführung oder den schreibgeschützten Zugriff auf den Seitenbereich, für den ein Committed ausgeführt wurde. Der Versuch, in die Region zu schreiben, für die ein Schreibversuch unternommen wurde, führt zu einer Zugriffsverletzung.
Windows Server 2003 und Windows XP: Dieses Attribut wird erst von der CreateFileMapping-Funktion Windows XP mit SP2 und Windows Server 2003 mit SP1 unterstützt.
SEITE _ EXECUTE _ READWRITE-0x40
Ermöglicht den Ausführungs-, schreibgeschützten oder Lese-/Schreibzugriff auf den Seitenbereich, für den ein Committed ausgeführt wurde.
Windows Server 2003 und Windows XP: Dieses Attribut wird erst von der CreateFileMapping-Funktion Windows XP mit SP2 und Windows Server 2003 mit SP1 unterstützt.
SEITE _ EXECUTE _ WRITECOPY-0x80
Ermöglicht den Ausführungs-, schreibgeschützten oder Kopierzugriff bei Schreibzugriff auf eine zugeordnete Ansicht eines Dateizuordnungsobjekts. Der Versuch, auf eine Seite mit kopier- und schreibseitigem Schreibvorgang zu schreiben, führt dazu, dass eine private Kopie der Seite für den Prozess vorgenommen wird. Die private Seite ist als PAGE _ EXECUTE _ READWRITE gekennzeichnet, 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 unterstützt, wenn Windows Vista mit SP1 und Windows Server 2008 installiert wurde.

SEITE _ NOACCESS-0x01
Deaktiviert sämtlichen Zugriff auf den Bereich, für den ein Committed für Seiten verwendet wurde. Der Versuch, aus der Region zu lesen, in diese zu schreiben oder sie auszuführen, führt zu einer Zugriffsverletzung.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
SEITE _ READONLY-0x02
Aktiviert den schreibgeschützten Zugriff auf den Seitenbereich, für den ein Committed verwendet wurde. Der Versuch, in die Region zu schreiben, für die ein Schreibversuch unternommen wurde, führt zu einer Zugriffsverletzung. Wenn die Datenausführungsverhindung aktiviert ist, führt ein Versuch, Code in der region auszuführen, für die ein Committed ausgeführt wurde, zu einer Zugriffsverletzung.
SEITE _ READWRITE-0x04
Aktiviert den schreibgeschützten oder Lese-/Schreibzugriff auf den Bereich, für den ein Committed für Seiten verwendet wurde. Wenn die Datenausführungsverhindung aktiviert ist, führt der Versuch, Code in der region auszuführen, für die ein Code ausgeführt wurde, zu einer Zugriffsverletzung.
SEITE _ WRITECOPY-0x08
Aktiviert den schreibgeschützten Zugriff oder den Kopierzugriff auf eine zugeordnete Ansicht eines Dateizuordnungsobjekts. Der Versuch, auf eine Seite mit kopier- und schreibseitigem Schreibvorgang zu schreiben, führt dazu, dass eine private Kopie der Seite für den Prozess vorgenommen wird. Die private Seite ist als PAGE _ READWRITE gekennzeichnet, und die Änderung wird auf die neue Seite geschrieben. Wenn die Datenausführungsverhindung aktiviert ist, führt der Versuch, Code in der region auszuführen, für die ein Code ausgeführt wurde, zu einer Zugriffsverletzung.
Dieses Flag wird von den Funktionen VirtualAlloc oder VirtualAllocEx nicht unterstützt.
SEITE _ TARGETS _ INVALID
0x40000000
Legt alle Positionen auf den Seiten als ungültige Ziele für CFG fest. Wird zusammen mit jedem Seitenschutz wie PAGE _ EXECUTE, PAGE EXECUTE _ _ READ, PAGE EXECUTE _ _ READWRITE und PAGE EXECUTE _ _ WRITECOPY verwendet. Bei jedem indirekten Aufruf von Speicherorten auf diesen Seiten werden CFG-Überprüfungen nicht durchgeführt, und der Prozess wird beendet. Das Standardverhalten für zugeordnete ausführbare Seiten ist, als gültige Aufrufziele für CFG markiert zu werden.
Dieses Flag wird von den Funktionen VirtualProtect oder CreateFileMapping nicht unterstützt.
SEITE _ TARGETS _ NO _ UPDATE
0X40000000
Auf Seiten in der Region werden ihre CFG-Informationen nicht aktualisiert, während sich der Schutz für VirtualProtect ändert. Wenn die Seiten in der Region beispielsweise 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 die ausführbare Datei besteht im Markieren aller Speicherorte als gültige Aufrufziele für CFG.

Im Folgenden finden Sie Modifizierer, die zusätzlich zu den in der vorherigen Tabelle bereitgestellten Optionen verwendet werden können, sofern nicht anders angegeben.

Konstante/Wert BESCHREIBUNG
SEITE _ GUARD
0x100
Seiten in der Region werden zu Schutzseiten. Jeder Versuch, auf eine Wächterseite zu zugreifen, bewirkt, dass das System eine STATUS _ GUARD PAGE _ _ VIOLATION-Ausnahme auslöst und den Status der Schutzseite deaktiviert. Schutzseiten fungieren daher als einmaliger Zugriffsalarm. Weitere Informationen finden Sie unter dem Link zum Erstellen von Schutzseiten.
Wenn ein Zugriffsversuch dazu führt, dass das System den Status der Schutzseite deaktiviert, übernimmt der zugrunde liegende Seitenschutz.
Wenn während eines Systemdiensts eine Schutzseitenausnahme auftritt, gibt der Dienst in der Regel einen Fehlerstatusindikator zurück.
Dieser Wert kann nicht mit PAGE _ NOACCESS verwendet werden.
Dieses Flag wird von der CreateFileMapping-Funktion nicht unterstützt.
SEITE _ NOCACHE-0x200
Legt fest, dass alle Seiten nicht cachierbar sind. Anwendungen sollten dieses Attribut nur verwenden, wenn dies explizit für ein Gerät erforderlich ist. Die Verwendung der interlocked-Funktionen mit Speicher, der SEC _ NOCACHE zugeordnet ist, kann zu einer EXCEPTION ILLEGAL _ _ INSTRUCTION-Ausnahme führen.
Das PAGE _ NOCACHE-Flag kann nicht mit den Flags PAGE _ GUARD, PAGE _ NOACCESS oder PAGE _ WRITECOMBINE verwendet werden.
Das PAGE _ NOCACHE-Flag kann nur verwendet werden, wenn privater Arbeitsspeicher mit den Funktionen VirtualAlloc, VirtualAllocExoder VirtualAllocExNuma zugewiesen wird. Um nicht zwischengespeicherten Speicherzugriff für freigegebenen Arbeitsspeicher zu aktivieren, geben Sie beim Aufrufen der CreateFileMapping-Funktion das SEC _ NOCACHE-Flag an.
SEITE _ WRITECOMBINE-0x400
Legt fest, dass alle Seiten mit Schreibzugriff kombiniert werden sollen.
Anwendungen sollten dieses Attribut nur verwenden, wenn dies explizit für ein Gerät erforderlich ist. Die Verwendung der interlocked-Funktionen mit Speicher, der als kombinierter Schreibzugriff zugeordnet ist, kann zu einer EXCEPTION _ ILLEGAL _ INSTRUCTION-Ausnahme führen.
Das PAGE _ WRITECOMBINE-Flag kann nicht mit den FLAGs PAGE _ NOACCESS, PAGE _ GUARD und PAGE _ NOCACHE angegeben werden.
Das PAGE _ WRITECOMBINE-Flag kann nur verwendet werden, wenn privater Arbeitsspeicher mit den Funktionen VirtualAlloc, VirtualAllocExoder VirtualAllocExNuma zugewiesen wird. Geben Sie das SEC _ WRITECOMBINE-Flag an, wenn Sie die CreateFileMapping-Funktion aufrufen, um den Speicherzugriff mit kombiniertem Schreibzugriff für freigegebenen Speicher zu aktivieren.
Windows Server 2003 und Windows XP: Dieses Flag wird erst ab Windows Server 2003 mit SP1 unterstützt.

Die folgenden Konstanten können nur mit der LoadEnclaveData-Funktion verwendet werden, wenn Sie eine Enclave mit der Intel Software Guard Extensions-Architektur (SGX) angeben.

Konstante BESCHREIBUNG
_SEITEN-ENCLAVE-THREADSTEUERUNG _ _
Die Seite enthält eine Threadsteuerstruktur (THREAD Control Structure, TCS).
_SEITEN-ENCLAVE _ NICHTVALIDIERT
Die von Ihnen angezeigten Seiteninhalte werden mit der EEXTEND-Anweisung des Intel SGX-Programmiermodells von der Messung ausgeschlossen.

Requirements (Anforderungen)

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Nur [ XP-Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Nur Server [ 2003-Desktop-Apps]
Header
WinNT.h (include Windows.h)

Weitere Informationen

CreateFileMapping

Arbeitsspeicherschutz

Virtualalloc

VirtualAllocEx

LoadEnclaveData