Макрос ReadStructFromModeAligned (usermode_accessors.h)

Макрос ReadStructFromModeAligned безопасно считывает структуру из памяти на основе указанного режима процессора с проверкой выравнивания.

Syntax

void ReadStructFromModeAligned(
  Destination,
  Source,
  Mode,
  Alignment
);

Parameters

Destination

[out] Указатель на структуру, которая получает данные, считываемые из памяти.

Source

[in] Указатель на расположение памяти, из которого следует считывать структуру.

Mode

[in] Режим процессора, определяющий, как выполняется доступ к памяти. Режим может быть одним из следующих значений.

Value Meaning
KernelMode Источник указывает на память в режиме ядра. Макрос выполняет чтение из указанного адреса с семантикой memory_order_relaxed. Дополнительные сведения см. в примечаниях.
UserMode Источник указывает на память в пользовательском режиме. Макрос вызывает исключение, если источник не указывает на память в пользовательском режиме; в противном случае он выполняет чтение из указанного адреса с memory_order_relaxed семантикой. Дополнительные сведения см. в примечаниях.

Alignment

[in] Необходимое выравнивание исходного адреса в байтах.

Return value

None

Remarks

Этот макрос предоставляет безопасный способ чтения структуры из памяти с дополнительными проверками безопасности при доступе к памяти в пользовательском режиме и принудительном выравнивании. Он гарантирует, что указанный адрес является допустимым и доступным на основе указанного режима процессора, и соответствует указанным требованиям выравнивания при доступе к памяти в пользовательском режиме.

Макрос проверяет, что точка источника и назначения совместима с типами и автоматически определяет размер структуры для операции копирования.

Этот макрос обеспечивает выравнивание, убедившись, что исходный адрес соответствует указанному требованию выравнивания при доступе к памяти в пользовательском режиме. Это помогает предотвратить штрафы производительности и потенциальные ошибки оборудования, которые могут возникнуть при доступе к неправильным структурам данных.

Он вызывает структурированное исключение, если доступ к памяти завершается сбоем, например если исходный адрес недействителен или недоступен для указанного режима процессора или не соответствует требованиям к выравниванию.

Этот макрос никогда не будет оптимизирован компилятором, и компилятор не создаст дополнительные доступы к этому расположению памяти до вызова макроса или после возврата макроса (если исходный код явно не выполняет эти доступы). Доступ к памяти выполняется с memory_order_relaxed семантикой.

Этот макрос работает во всех версиях Windows, а не только на последних версиях. Чтобы получить объявление макроса из заголовка usermode_accessors.h , необходимо использовать последнюю версию WDK. Вам также нужна библиотека (umaccess.lib) из последней версии WDK. Однако результирующий драйвер будет работать в более ранних версиях Windows.

Requirements

Requirement Value
Минимальный поддерживаемый клиент See Remarks
Header usermode_accessors.h
Library umaccess.lib
IRQL Меньше или равно APC_LEVEL

See also

ReadStructFromMode

ReadStructFromUserAligned

ReadStructFromModeHelper

WriteStructToModeAligned