Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция CopyFromMode безопасно копирует данные из ядра или пользовательского режима памяти в память ядра на основе указанного режима процессора.
Syntax
VOID CopyFromMode(
VOID *Destination,
const volatile VOID *Source,
SIZE_T Length,
KPROCESSOR_MODE Mode
);
Parameters
Destination
[out] Указатель на расположение памяти ядра, в котором будут скопированы данные.
Source
[in] Указатель на расположение памяти, из которого копируются данные.
Length
[in] Количество байтов для копирования.
Mode
[in] Режим процессора, определяющий, как выполняется доступ к памяти. Режим может быть одним из следующих значений.
| Value | Meaning |
|---|---|
| KernelMode | Источник указывает на память в режиме ядра. Функция выполняет прямую копию памяти с семантикой memory_order_relaxed. Дополнительные сведения см. в примечаниях. |
| UserMode | Источник указывает на память в пользовательском режиме. Функция вызывает исключение, если источник не указывает на память в пользовательском режиме; в противном случае он выполняет копию из указанного адреса с семантикой memory_order_relaxed. |
Возвращаемое значение
None
Remarks
Эта функция обеспечивает безопасный способ копирования данных из ядра или пользовательского режима памяти в память ядра с механизмом копирования, определенным заданным режимом процессора. Это позволяет выполнять гибкие операции памяти, которые могут адаптироваться к разным контекстам выполнения.
Если используется режимKernelMode:
Функция выполняет переменную копию с помощью семантики memory_order_relaxed.
Функция не распознается как встроенный компилятор, поэтому компилятор никогда не оптимизирует вызов (полностью или замените вызов эквивалентной последовательностью инструкций).
Когда вызов возвращается, данные копируются из источника в назначение. Доступ к памяти этой функции к источнику и назначению будет выполняться только в функции (например, компилятор не может перемещать доступ к памяти из этой функции).
Функция может выполнять неуправляемый доступ к памяти, если платформа позволяет ей.
Функция может получить доступ к расположениям памяти более одного раза в рамках операции копирования.
Функция не поддерживает операции копирования , когда источник и назначение перекрываются друг с другом.
При копировании из структуры фиксированного размера следует использовать ReadStructFromMode , чтобы избежать риска передачи неправильного размера.
Эта функция никогда не будет оптимизирована компилятором, и компилятор не создаст дополнительные доступы к этому расположению памяти до вызова функции или после возврата функции (если исходный код явно не выполняет эти доступы).
Эта функция работает во всех версиях Windows, а не только на последних версиях. Чтобы получить объявление функции из заголовка usermode_accessors.h , необходимо использовать последнюю версию WDK. Вам также нужна библиотека (umaccess.lib) из последней версии WDK. Однако результирующий драйвер будет работать в более ранних версиях Windows.
Requirements
| Requirement | Value |
|---|---|
| Минимальный поддерживаемый клиент | См. примечания |
| Header | usermode_accessors.h |
| Library | umaccess.lib |
| IRQL | Меньше или равно APC_LEVEL |