MoveToUserFromUser-Funktion (usermode_accessors.h)

The MoveToUserFromUser function safely moves data from user-mode memory to user-mode memory, supporting overlapping memory regions.

Syntax

VOID MoveToUserFromUser(
  volatile VOID       *Destination,
  volatile const VOID *Source,
  SIZE_T              Length
);

Parameters

Destination

[out] Ein Zeiger auf die Startadresse des Speicherorts für den Benutzermodus, an dem die Daten kopiert werden.

Source

[in] Ein Zeiger auf die Startadresse des Speicherorts des Benutzermodusspeicherorts, aus dem die Daten kopiert werden sollen.

Length

[in] Die Anzahl der zu verschiebenden Bytes.

Return value

None

Remarks

Diese Funktion bietet eine sichere Möglichkeit, Daten vom Benutzermodusspeicher in den Benutzermodusspeicher mit Unterstützung für überlappende Speicherbereiche zu verschieben.

Die Funktion weist die folgenden Eigenschaften auf:

  • The function performs a move using memory_order_relaxed semantics.

  • Die Funktion wird nicht als compilerintern erkannt, sodass der Compiler den Aufruf nie entfernt (entweder vollständig oder durch eine entsprechende Abfolge von Anweisungen ersetzen).

  • When the call returns, the data has been copied from Source to Destination. This function's memory accesses to the Source and Destination will only be performed within the function (for example, the compiler can't move memory accesses out of this function).

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

  • Die Funktion kann mehr als einmal im Rahmen des Ausfüllvorgangs auf Speicherspeicherorte zugreifen.

Die Funktion überprüft, ob beide Zeiger auf den Arbeitsspeicher des Benutzermodus verweisen und eine strukturierte Ausnahme auslöst, wenn der Verschiebungsvorgang fehlschlägt, z. B. wenn die Quell- oder Zieladressen keine gültigen Benutzermodusadressen sind oder nicht darauf zugreifen können.

Diese Funktion funktioniert auf allen Versionen von Windows, nicht nur auf dem neuesten. You need to consume the latest WDK to get the function declaration from the usermode_accessors.h header. You also need the library (umaccess.lib) from the latest WDK. Der resultierende Treiber wird jedoch in älteren Versionen von Windows einwandfrei ausgeführt.

Requirements

Requirement Value
Mindestens unterstützter Client See Remarks
Header usermode_accessors.h
Library umaccess.lib
IRQL Kleiner oder gleich APC_LEVEL

See also

CopyToUserFromUser

CopyToUser

CopyFromUser