Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Makro "ReadStructFromUserAligned " liest sicher eine Struktur aus dem Benutzermodusspeicher mit Ausrichtungsüberprüfung vor.
Syntax
void ReadStructFromUserAligned(
Destination,
Source,
Alignment
);
Parameters
Destination
[out] Ein Zeiger auf die Struktur, die die Vom Benutzermodus gelesenen Daten empfängt.
Source
[in] Ein Zeiger auf den Speicherort des Benutzermodusspeicherorts, aus dem die Struktur gelesen werden soll.
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 Benutzermodusspeicher mit Ausrichtungserzwingung zu lesen. Es stellt sicher, dass die angegebene Adresse eine Benutzermodusadresse ist und die angegebenen Ausrichtungsanforderungen erfüllt, bevor sie gelesen werden.
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 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 keine Benutzermodusadresse ist, nicht darauf zugreifen kann 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 |