Freigeben über


RtlFillDeviceMemory-Funktion (wdm.h)

The RtlFillDeviceMemory routine fills a block of device memory with the specified fill value and returns a pointer to the filled memory. Diese Funktion ist für die Verwendung im Gerätespeicher sicher, da sie geeignete Zugriffsmuster für Gerätespeicherbereiche verwendet.

Syntax

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

Parameters

[out] Destination

Ein Zeiger auf die Startadresse des zu füllenden Speicherblocks für veränderliche Geräte.

[in] Length

Die Größe des Speicherblocks, der in Bytes ausgefüllt werden soll. This value must be less than or equal to the size of the Destination buffer.

[in] Fill

Der Bytewert, mit dem der Speicherblock gefüllt werden soll.

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.

  • Die Funktion verwendet veränderliche Speicherzugriffe, um eine ordnungsgemäße Behandlung des Gerätespeichers sicherzustellen, die Nebenwirkungen oder spezielle Zugriffsanforderungen aufweisen kann.

  • Die Funktion ist für die Leistung optimiert, während die Sicherheit für Gerätespeicherzugriffsmuster beibehalten wird.

  • Die Funktion kann nicht ausgerichtete Speicherzugriffe ausführen, wenn die Plattform dies zulässt.

  • Die Funktion kann optimierte Füllmuster für größere Speicherblöcke verwenden und gleichzeitig die Sicherheit des Gerätespeichers sicherstellen.

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. Andernfalls muss der Aufrufer unter IRQL <= APC_LEVEL ausgeführt werden.

Diese Funktion funktioniert auf allen Versionen von Windows, nicht nur auf dem neuesten. Sie müssen die neueste WDK verwenden, um die Funktionsdeklaration aus dem wdm.h-Header abzurufen. Außerdem benötigen Sie die Bibliothek (volatileaccessk.lib) aus dem neuesten WDK. Der resultierende Treiber wird jedoch in älteren Versionen von Windows einwandfrei ausgeführt.

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 (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Library volatileaccessk.lib (Kernelmodus), volatileaccessu.lib (Benutzermodus)
DLL NtosKrnl.exe
IRQL Beliebige Ebene (Siehe Abschnitt "Hinweise")

See also

RtlFillMemory

RtlSetVolatileMemory

RtlCompareDeviceMemory

RtlEqualDeviceMemory