Compartilhar via


Macro WriteStructToUserAligned (usermode_accessors.h)

A macro WriteStructToUserAligned grava com segurança uma estrutura na memória do modo de usuário com validação de alinhamento.

Syntax

void WriteStructToUserAligned(
  Destination,
  Source,
  Alignment
);

Parameters

Destination

[out] Um ponteiro para o local de memória do modo de usuário em que a estrutura será gravada.

Source

[in] Um ponteiro para a estrutura a ser gravada no local de memória de destino.

Alignment

[in] O alinhamento necessário para o endereço de destino, em bytes.

Return value

None

Remarks

Essa macro fornece uma maneira segura de gravar uma estrutura na memória do modo de usuário com imposição de alinhamento. Ele garante que o endereço fornecido seja um endereço no modo de usuário e atenda aos requisitos de alinhamento especificados antes de gravar nele.

A macro valida que a origeme o destino apontam para tipos compatíveis e determina automaticamente o tamanho da estrutura para a operação de cópia.

Essa macro impõe o alinhamento verificando se o endereço de destino atende ao requisito de alinhamento especificado. Isso ajuda a evitar penalidades de desempenho e possíveis falhas de hardware que podem ocorrer ao acessar estruturas de dados desalinhadas.

Ele gerará uma exceção estruturada se o acesso à memória falhar, como quando o endereço de destino não for um endereço no modo de usuário, estiver inacessível ou não atender aos requisitos de alinhamento.

Essa macro nunca será otimizada pelo compilador, nem o compilador criará acessos adicionais a esse local de memória antes que a macro seja chamada ou depois que a macro retornar (a menos que o código-fonte execute explicitamente esses acessos). O acesso à memória é executado com memory_order_relaxed semântica.

Essa macro funciona em todas as versões do Windows, não apenas nas mais recentes. Você precisa consumir o WDK mais recente para obter a declaração de macro do cabeçalho usermode_accessors.h . Você também precisa da biblioteca (umaccess.lib) do WDK mais recente. No entanto, o driver resultante será executado bem em versões mais antigas do Windows.

Requirements

Requirement Value
Cliente mínimo suportado See Remarks
Header usermode_accessors.h
Library umaccess.lib
IRQL Menor ou igual a APC_LEVEL

See also

WriteStructToUser

WriteStructToModeAligned

WriteStructToUserHelper

ReadStructFromUserAligned