Константы защиты памяти
Ниже приведены параметры защиты памяти. При выделении или защите страницы в памяти необходимо указать одно из следующих значений. Атрибуты защиты не могут быть назначены части страницы; они могут быть назначены только целой странице.
Пример
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 );
}
Пример из классических примеров Windows на GitHub.
Константы
Констант/значение | Описание |
---|---|
|
Разрешает выполнение доступа к зафиксированной области страниц. Попытка записи в зафиксированный регион приводит к нарушению доступа. Этот флаг не поддерживается функцией CreateFileMapping . |
|
Обеспечивает доступ к зафиксированной области страниц в режиме выполнения или только для чтения. Попытка записи в зафиксированный регион приводит к нарушению доступа. Windows Server 2003 и Windows XP: Этот атрибут не поддерживается функцией CreateFileMapping до Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003 с пакетом обновления 1 (SP1). |
|
Предоставляет доступ на выполнение, только для чтения или чтение и запись к зафиксированной области страниц. Windows Server 2003 и Windows XP: Этот атрибут не поддерживается функцией CreateFileMapping до Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003 с пакетом обновления 1 (SP1). |
|
Позволяет выполнять, только для чтения или копировать при записи доступ к сопоставленным представлениям объекта сопоставления файлов. Попытка записи на зафиксированную страницу копирования при записи приводит к тому, что для процесса создается закрытая копия страницы. Частная страница помечается как PAGE_EXECUTE_READWRITE, а изменения записываются на новую страницу. Этот флаг не поддерживается функциями VirtualAlloc или VirtualAllocEx . Windows Vista, Windows Server 2003 и Windows XP: Этот атрибут не поддерживается функцией CreateFileMapping до Windows Vista с пакетом обновления 1 (SP1) и Windows Server 2008. |
|
Отключает весь доступ к зафиксированной области страниц. Попытка чтения, записи или выполнения зафиксированного региона приводит к нарушению доступа. Этот флаг не поддерживается функцией CreateFileMapping . |
|
Обеспечивает доступ только для чтения к зафиксированной области страниц. Попытка записи в зафиксированный регион приводит к нарушению доступа. Если включено предотвращение выполнения данных , попытка выполнить код в зафиксированном регионе приведет к нарушению доступа. |
|
Разрешает доступ только для чтения или для чтения и записи к зафиксированной области страниц. Если включено предотвращение выполнения данных , попытка выполнить код в зафиксированном регионе приводит к нарушению доступа. |
|
Разрешает доступ только для чтения или копирования при записи к сопоставленным представлениям объекта сопоставления файлов. Попытка записи на зафиксированную страницу копирования при записи приводит к тому, что для процесса создается закрытая копия страницы. Частная страница помечается как PAGE_READWRITE, а изменения записываются на новую страницу. Если включено предотвращение выполнения данных , попытка выполнить код в зафиксированном регионе приводит к нарушению доступа. Этот флаг не поддерживается функциями VirtualAlloc или VirtualAllocEx . |
|
Задает все расположения на страницах как недопустимые целевые объекты для CFG. Используется вместе с любой защитой страницы выполнения, например PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE и PAGE_EXECUTE_WRITECOPY. Любой косвенный вызов расположений на этих страницах не пройдет проверку CFG, и процесс будет завершен. Поведение по умолчанию для выделенных исполняемых страниц — помечать допустимые целевые объекты вызова для CFG. Этот флаг не поддерживается функциями VirtualProtect или CreateFileMapping . |
|
На страницах в регионе не будут обновляться сведения о CFG, пока изменяется защита для VirtualProtect. Например, если страницы в регионе были выделены с помощью PAGE_TARGETS_INVALID, то при изменении защиты страниц будут сохраняться недопустимые сведения. Этот флаг действителен, только если защита изменяется на исполняемый тип , например PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE и PAGE_EXECUTE_WRITECOPY. Поведение по умолчанию для изменения защиты VirtualProtect на исполняемый файл заключается в том, чтобы пометить все расположения как допустимые целевые объекты вызова для CFG. |
Ниже приведены модификаторы, которые можно использовать в дополнение к параметрам, указанным в предыдущей таблице, за исключением указанных ниже.
Констант/значение | Описание |
---|---|
|
Страницы в регионе становятся защищенными страницами. Любая попытка доступа к странице защиты приводит к тому, что система вызывает исключение STATUS_GUARD_PAGE_VIOLATION и отключает состояние страницы защиты. Таким образом, страницы защиты выступают в качестве одноразового оповещения о доступе. Дополнительные сведения см. в разделе Creating Guard Pages. Когда попытка доступа приводит к тому, что система отключает состояние защиты страницы, базовая защита страницы берет на себя. Если во время системной службы возникает исключение страницы защиты, служба обычно возвращает индикатор состояния сбоя. Это значение нельзя использовать с PAGE_NOACCESS. Этот флаг не поддерживается функцией CreateFileMapping . |
|
Устанавливает все страницы как некэшируемые. Приложения не должны использовать этот атрибут, за исключением случаев, когда это явно требуется для устройства. Использование взаимосвязанных функций с памятью, сопоставленной с SEC_NOCACHE , может привести к EXCEPTION_ILLEGAL_INSTRUCTION исключению. Флаг PAGE_NOCACHE нельзя использовать с флагами PAGE_GUARD, PAGE_NOACCESS или PAGE_WRITECOMBINE . Флаг PAGE_NOCACHE можно использовать только при выделении частной памяти с помощью функций VirtualAlloc, VirtualAllocEx или VirtualAllocExNuma . Чтобы включить доступ к общей памяти без кэширования, укажите флаг SEC_NOCACHE при вызове функции CreateFileMapping . |
|
Задает все страницы для объединения записей. Приложения не должны использовать этот атрибут, за исключением случаев, когда это явно требуется для устройства. Использование заблокированных функций с памятью, сопоставленной как объединенная для записи, может привести к EXCEPTION_ILLEGAL_INSTRUCTION исключению. Флаг PAGE_WRITECOMBINE нельзя указать с помощью флагов PAGE_NOACCESS, PAGE_GUARD и PAGE_NOCACHE . Флаг PAGE_WRITECOMBINE можно использовать только при выделении частной памяти с помощью функций VirtualAlloc, VirtualAllocEx или VirtualAllocExNuma . Чтобы включить объединенный доступ к памяти записи для общей памяти, укажите флаг SEC_WRITECOMBINE при вызове функции CreateFileMapping . Windows Server 2003 и Windows XP: Этот флаг не поддерживается до Windows Server 2003 с пакетом обновления 1 (SP1). |
Следующие константы можно использовать с поддерживаемой функцией только при указании анклава с архитектурой intel Software Guard Extensions (SGX).
Константа | Описание | Поддерживаемая функция |
---|---|---|
|
Указывает, что страница будет защищена, чтобы предотвратить дальнейшее использование в анклаве. Этот флаг не должен сочетаться с другими флагами. Этот флаг действителен только для анклавов SGX2. |
VirtualProtect |
|
Страница содержит структуру управления потоками (TCS). |
LoadEnclaveData VirtualProtect |
|
Указанное содержимое страницы исключается из измерения с помощью инструкции EEXTEND модели программирования Intel SGX. |
LoadEnclaveData |
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [только классические приложения] |
Минимальная версия сервера |
Windows Server 2003 [только классические приложения] |
Заголовок |
|