Freigeben über


ReadStructFromModeAligned-Makro (usermode_accessors.h)

Das Makro ReadStructFromModeAligned liest sicher eine Struktur aus dem Arbeitsspeicher basierend auf dem angegebenen Prozessormodus mit Ausrichtungsüberprüfung.

Syntax

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

Parameters

Destination

[out] Ein Zeiger auf die Struktur, die die aus dem Speicher gelesenen Daten empfängt.

Source

[in] Ein Zeiger auf den Speicherspeicherort, von dem aus die Struktur gelesen werden soll.

Mode

[in] Der Prozessormodus, der bestimmt, wie der Speicherzugriff ausgeführt wird. Der Modus kann einen der folgenden Werte aufweisen.

Value Meaning
KernelMode Die Quelle verweist auf den Kernelmodusspeicher. Das Makro führt einen Lesevorgang aus der angegebenen Adresse mit memory_order_relaxed Semantik aus. Weitere Informationen finden Sie in den Hinweisen.
UserMode Die Quelle verweist auf den Arbeitsspeicher im Benutzermodus. Das Makro löst eine Ausnahme aus, wenn Die Quelle nicht auf den Arbeitsspeicher des Benutzermodus verweist. andernfalls wird ein Lesevorgang aus der angegebenen Adresse mit memory_order_relaxed Semantik ausgeführt. Weitere Informationen finden Sie in den Hinweisen.

Alignment

[in] Die erforderliche Ausrichtung für die Quelladresse in Byte.

Return value

None

Remarks

Dieses Makro bietet eine sichere Möglichkeit, eine Struktur aus dem Arbeitsspeicher zu lesen, mit zusätzlichen Sicherheitsüberprüfungen beim Zugriff auf den Arbeitsspeicher des Benutzermodus und die Erzwingung der Ausrichtung. Es stellt sicher, dass die angegebene Adresse gültig und zugänglich ist, basierend auf dem angegebenen Prozessormodus, und erfüllt die angegebenen Ausrichtungsanforderungen beim Zugriff auf den Benutzermodusspeicher.

Das Makro überprüft den Quell- und Zielpunkt auf kompatible Typen und bestimmt automatisch die Strukturgröße für den Kopiervorgang.

Dieses Makro erzwingt die Ausrichtung, indem überprüft wird, ob die Quelladresse beim Zugriff auf den Benutzermodusspeicher die angegebene Ausrichtungsanforderung erfüllt. Dadurch können Leistungsstrafen und potenzielle Hardwarefehler vermieden werden, die beim Zugriff auf falsch ausgerichtete Datenstrukturen auftreten können.

Es löst eine strukturierte Ausnahme aus, wenn der Speicherzugriff fehlschlägt, z. B. wenn die Quelladresse nicht gültig ist oder für den angegebenen Prozessormodus nicht zugänglich ist oder die Ausrichtungsanforderungen nicht erfüllt.

Dieses Makro wird niemals vom Compiler optimiert, oder der Compiler erstellt zusätzlichen Zugriff auf diesen Speicherspeicherort, bevor das Makro aufgerufen wird oder nachdem das Makro zurückgegeben wird (es sei denn, der Quellcode führt diese Zugriffe explizit aus). Der Speicherzugriff wird mit memory_order_relaxed Semantik ausgeführt.

Dieses Makro funktioniert auf allen Versionen von Windows, nicht nur auf dem neuesten. Sie müssen die neueste WDK verwenden, um die Makrodeklaration aus dem Header usermode_accessors.h abzurufen. Außerdem benötigen Sie die Bibliothek (umaccess.lib) aus dem neuesten 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

ReadStructFromMode

ReadStructFromUserAligned

ReadStructFromModeHelper

WriteStructToModeAligned