Compartilhar via


Macro WriteStructToModeAligned (usermode_accessors.h)

A macro WriteStructToModeAligned grava com segurança uma estrutura na memória com base no modo de processador especificado com validação de alinhamento.

Syntax

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

Parameters

Destination

[out] Um ponteiro para o local da memória em que a estrutura será gravada.

Source

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

Mode

[in] O modo de processador que determina como o acesso à memória é executado. O modo pode ser um dos seguintes valores.

Value Meaning
KernelMode O destino aponta para a memória do modo kernel. A macro executa uma gravação no endereço especificado com memory_order_relaxed semântica. Consulte Comentários para obter mais detalhes.
UserMode O destino aponta para a memória do modo de usuário. A macro gerará uma exceção se o Destino não apontar para a memória do modo de usuário; caso contrário, ele executa uma gravação no endereço especificado com memory_order_relaxed semântica. Consulte Comentários para obter mais detalhes.

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, com verificações de segurança extras ao acessar a imposição de alinhamento e memória no modo de usuário. Ele garante que o endereço fornecido seja válido e acessível com base no modo de processador especificado e atenda aos requisitos de alinhamento especificados ao acessar a memória do modo de usuário.

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 ao acessar a memória do modo de usuário. 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 válido ou inacessível para o modo de processador especificado 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

WriteStructToMode

WriteStructToUserAligned

WriteStructToModeHelper

ReadStructFromModeAligned