Constantes de protection de la mémoire

Voici les options de protection de la mémoire . vous devez spécifier l’une des valeurs suivantes lors de l’allocation ou de la protection d’une page en mémoire. Les attributs de protection ne peuvent pas être attribués à une partie d’une page ; ils ne peuvent être attribués qu’à une page entière.

Exemple

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 );
}

Exemple à partir d’exemples Windows classic sur GitHub.

Constantes

Constante/valeur Description
PAGE_EXECUTE
0x10
Permet d’exécuter l’accès à la région validée des pages. Une tentative d’écriture dans la région validée entraîne une violation d’accès.
Cet indicateur n’est pas pris en charge par la fonction CreateFileMapping .
PAGE_EXECUTE_READ
0x20
Active l’accès en lecture seule ou en exécution à la région validée des pages. Une tentative d’écriture dans la région validée entraîne une violation d’accès.
Windows Server 2003 et Windows XP : Cet attribut n’est pas pris en charge par la fonction CreateFileMapping tant que Windows XP avec SP2 et Windows Server 2003 avec SP1.
PAGE_EXECUTE_READWRITE
0x40
Active l’accès à l’exécution, en lecture seule ou en lecture/écriture à la région validée des pages.
Windows Server 2003 et Windows XP : Cet attribut n’est pas pris en charge par la fonction CreateFileMapping tant que Windows XP avec SP2 et Windows Server 2003 avec SP1.
PAGE_EXECUTE_WRITECOPY
0x80
Active l’accès en lecture seule ou en lecture seule à une vue mappée d’un objet de mappage de fichiers. Une tentative d’écriture dans une page de copie en écriture validée entraîne la création d’une copie privée de la page pour le processus. La page privée est marquée comme PAGE_EXECUTE_READWRITE et la modification est écrite dans la nouvelle page.
Cet indicateur n’est pas pris en charge par les fonctions VirtualAlloc ou VirtualAllocEx . Windows Vista, Windows Server 2003 et Windows XP : Cet attribut n’est pas pris en charge par la fonction CreateFileMapping tant que Windows Vista avec SP1 et Windows Server 2008.

PAGE_NOACCESS
0x01
Désactive tous les accès à la région validée des pages. Une tentative de lecture, d’écriture dans ou d’exécution de la région validée entraîne une violation d’accès.
Cet indicateur n’est pas pris en charge par la fonction CreateFileMapping .
PAGE_READONLY
0x02
Active l’accès en lecture seule à la région validée des pages. Une tentative d’écriture dans la région validée entraîne une violation d’accès. Si la prévention de l’exécution des données est activée, une tentative d’exécution de code dans la région validée entraîne une violation d’accès.
PAGE_READWRITE
0x04
Active l’accès en lecture seule ou en lecture/écriture à la région validée des pages. Si la prévention de l’exécution des données est activée, la tentative d’exécution du code dans la région validée entraîne une violation d’accès.
PAGE_WRITECOPY
0x08
Active l’accès en lecture seule ou en copie sur écriture à une vue mappée d’un objet de mappage de fichiers. Une tentative d’écriture dans une page de copie en écriture validée entraîne la création d’une copie privée de la page pour le processus. La page privée est marquée comme PAGE_READWRITE et la modification est écrite dans la nouvelle page. Si la prévention de l’exécution des données est activée, la tentative d’exécution du code dans la région validée entraîne une violation d’accès.
Cet indicateur n’est pas pris en charge par les fonctions VirtualAlloc ou VirtualAllocEx .
PAGE_TARGETS_INVALID
0x40000000
Définit tous les emplacements dans les pages en tant que cibles non valides pour CFG. Utilisé avec toute protection d’exécution de page comme PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE et PAGE_EXECUTE_WRITECOPY. Tout appel indirect à des emplacements dans ces pages échoue aux vérifications CFG et le processus est terminé. Le comportement par défaut pour les pages exécutables allouées est de marquer des cibles d’appel valides pour CFG.
Cet indicateur n’est pas pris en charge par les fonctions VirtualProtect ou CreateFileMapping .
PAGE_TARGETS_NO_UPDATE
0x40000000
Les informations CFG des pages de la région ne seront pas mises à jour pendant que la protection change pour VirtualProtect. Par exemple, si les pages de la région ont été allouées à l’aide de PAGE_TARGETS_INVALID, les informations non valides sont conservées pendant que la protection des pages change. Cet indicateur n’est valide que lorsque la protection passe à un type exécutable comme PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE et PAGE_EXECUTE_WRITECOPY. Le comportement par défaut de la protection VirtualProtect est de marquer tous les emplacements comme cibles d’appel valides pour CFG.

Les éléments suivants sont des modificateurs qui peuvent être utilisés en plus des options fournies dans le tableau précédent, sauf indication contraire.

Constante/valeur Description
PAGE_GUARD
0x100
Les pages de la région deviennent des pages de protection. Toute tentative d’accès à une page de protection entraîne le déclenchement d’une exception STATUS_GUARD_PAGE_VIOLATION et la désactivation de la page de protection status. Les pages de protection agissent donc comme une alarme d’accès à usage unique. Pour plus d’informations, consultez Création de pages de garde.
Lorsqu’une tentative d’accès conduit le système à désactiver la page de protection status, la protection de la page sous-jacente prend le relais.
Si une exception de page de protection se produit pendant un service système, le service retourne généralement une défaillance status indicateur.
Cette valeur ne peut pas être utilisée avec PAGE_NOACCESS.
Cet indicateur n’est pas pris en charge par la fonction CreateFileMapping .
PAGE_NOCACHE
0x200
Définit toutes les pages pour qu’elles ne puissent pas être mises en cache. Les applications ne doivent pas utiliser cet attribut, sauf en cas d’obligation explicite pour un appareil. L’utilisation des fonctions verrouillées avec la mémoire mappée avec SEC_NOCACHE peut entraîner une exception EXCEPTION_ILLEGAL_INSTRUCTION .
L’indicateur PAGE_NOCACHE ne peut pas être utilisé avec les indicateurs PAGE_GUARD, PAGE_NOACCESS ou PAGE_WRITECOMBINE.
L’indicateur PAGE_NOCACHE ne peut être utilisé que lors de l’allocation de la mémoire privée avec les fonctions VirtualAlloc, VirtualAllocEx ou VirtualAllocExNuma. Pour activer l’accès à la mémoire non mise en cache pour la mémoire partagée, spécifiez l’indicateur SEC_NOCACHE lors de l’appel de la fonction CreateFileMapping .
PAGE_WRITECOMBINE
0x400
Définit toutes les pages à combiner en écriture.
Les applications ne doivent pas utiliser cet attribut, sauf en cas d’obligation explicite pour un appareil. L’utilisation des fonctions verrouillées avec la mémoire mappée en tant qu’écriture combinée peut entraîner une exception EXCEPTION_ILLEGAL_INSTRUCTION .
L’indicateur PAGE_WRITECOMBINE ne peut pas être spécifié avec les indicateurs PAGE_NOACCESS, PAGE_GUARD et PAGE_NOCACHE.
L’indicateur PAGE_WRITECOMBINE ne peut être utilisé que lors de l’allocation de la mémoire privée avec les fonctions VirtualAlloc, VirtualAllocEx ou VirtualAllocExNuma. Pour activer l’accès à la mémoire combinée en écriture pour la mémoire partagée, spécifiez l’indicateur SEC_WRITECOMBINE lors de l’appel de la fonction CreateFileMapping .
Windows Server 2003 et Windows XP : Cet indicateur n’est pas pris en charge tant que Windows Server 2003 avec SP1.

Les constantes suivantes ne peuvent être utilisées avec la fonction prise en charge que lorsque vous spécifiez une enclave qui a l’architecture d’Intel Software Guard Extensions (SGX).

Constante Description Fonction prise en charge
PAGE_ENCLAVE_DECOMMIT
Indique que la page sera protégée pour empêcher toute autre utilisation dans une enclave.
Cet indicateur ne doit pas être combiné avec d’autres indicateurs.
Cet indicateur est uniquement valide pour les enclaves SGX2.
VirtualProtect
PAGE_ENCLAVE_THREAD_CONTROL
La page contient une structure de contrôle de thread (TCS).
LoadEnclaveData
VirtualProtect
PAGE_ENCLAVE_UNVALIDATED
Le contenu de la page que vous fournissez est exclu de la mesure avec l’instruction EEXTEND du modèle de programmation Intel SGX.
LoadEnclaveData

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2003 [applications de bureau uniquement]
En-tête
WinNT.h (inclure Windows.h)

Voir aussi

CreateFileMapping

Protection de la mémoire

VirtualAlloc

VirtualAllocEx

LoadEnclaveData