Поделиться через


Функция RtlFillDeviceMemory (wdm.h)

The RtlFillDeviceMemory routine fills a block of device memory with the specified fill value and returns a pointer to the filled memory. Эта функция безопасна для использования в памяти устройства, так как она использует соответствующие шаблоны доступа для регионов памяти устройства.

Syntax

volatile void * RtlFillDeviceMemory(
  [out] volatile void *Destination,
  [in]  size_t        Length,
  [in]  int           Fill
);

Parameters

[out] Destination

Указатель на начальный адрес блока переменной памяти устройства для заполнения.

[in] Length

Размер блока памяти для заполнения в байтах. This value must be less than or equal to the size of the Destination buffer.

[in] Fill

Значение байта, с помощью которого заполняется блок памяти.

Return value

RtlFillDeviceMemory returns a pointer to the filled volatile device memory block (Destination).

Remarks

The RtlFillDeviceMemory routine is designed for safe filling of device memory regions where standard memory filling functions might not be appropriate due to the special characteristics of device memory.

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

  • Функция оптимизирована для повышения производительности при сохранении безопасности шаблонов доступа к памяти устройства.

  • Функция может выполнять неуправляемый доступ к памяти, если платформа позволяет ей.

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

This function provides RtlFillMemory behavior specifically designed for device memory regions.

Callers of RtlFillDeviceMemory can be running at any IRQL if the destination memory block is in nonpaged system memory. В противном случае вызывающий объект должен работать в IRQL <= APC_LEVEL.

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

Example

volatile UCHAR* DeviceBuffer;
SIZE_T BufferSize = 1024;

// Allocate or map device memory
DeviceBuffer = MapDeviceMemory(BufferSize);

// Fill the device memory with a specific pattern
volatile void* result = RtlFillDeviceMemory(DeviceBuffer, BufferSize, 0xAA);

// Use the filled device memory
ProcessDeviceData(DeviceBuffer, BufferSize);

// Clean up
UnmapDeviceMemory(DeviceBuffer);

Requirements

Requirement Value
Target Platform Universal
Header wdm.h (включите Wdm.h, Ntddk.h, Ntifs.h)
Library volatileaccessk.lib (режим ядра), volatileaccessu.lib (режим пользователя)
DLL NtosKrnl.exe
IRQL Любой уровень (см. раздел "Примечания")

See also

RtlFillMemory

RtlSetVolatileMemory

RtlCompareDeviceMemory

RtlEqualDeviceMemory