WriteStructToModeAligned 宏根据指定的处理器模式安全地将结构写入内存,并通过对齐验证。
Syntax
void WriteStructToModeAligned(
  Destination,
  Source,
  Mode,
  Alignment
);
Parameters
Destination
[out]指向将写入结构的内存位置的指针。
Source
[in]指向要写入目标内存位置的结构的指针。
Mode
[in]确定内存访问的执行方式的处理器模式。 模式 可以是以下值之一。
| Value | Meaning | 
|---|---|
| KernelMode | 目标 指向内核模式内存。 该宏使用 memory_order_relaxed语义对指定地址执行写入作。 有关更多详细信息,请参阅“备注”。 | 
| UserMode | 目标 指向用户模式内存。 如果 Destination 不指向用户模式内存,则宏将引发异常;否则,它会使用 memory_order_relaxed语义执行对指定地址的写入。 有关更多详细信息,请参阅“备注”。 | 
Alignment
[in]目标地址所需的对齐方式(以字节为单位)。
Return value
None
Remarks
此宏提供了一种安全的方式,用于将结构写入内存,并在访问用户模式内存和强制对齐时进行额外的安全检查。 它确保提供的地址是有效且基于指定的处理器模式可访问的,并在访问用户模式内存时满足指定的对齐要求。
该宏验证 源 和 目标 是否指向兼容类型,并自动确定复制作的结构大小。
此宏通过验证目标地址是否满足访问用户模式内存时的指定对齐要求来强制对齐。 这有助于防止性能损失和访问未对齐的数据结构时可能发生的潜在硬件故障。
如果内存访问失败(例如目标地址无效或指定的处理器模式无法访问,或者不符合对齐要求),则会引发结构化异常。
编译器永远不会优化此宏,也不会在调用宏或宏返回之后(除非源代码显式执行这些访问)之前创建对此内存位置的其他访问权限。 内存访问是使用 memory_order_relaxed语义执行的。
此宏适用于所有版本的 Windows,而不仅仅是最新版本。 需要使用最新的 WDK 从 usermode_accessors.h 标头获取宏声明。 还需要最新的 WDK 中的库(umaccess.lib)。 但是,生成的驱动程序将在较旧版本的 Windows 上运行。
Requirements
| Requirement | Value | 
|---|---|
| 最低支持的客户端 | See Remarks | 
| Header | usermode_accessors.h | 
| Library | umaccess.lib | 
| IRQL | 小于或等于APC_LEVEL |