Partilhar via


Macro WriteStructToMode (usermode_accessors.h)

A macro WriteStructToMode grava com segurança uma estrutura na memória com base no modo de processador especificado.

Syntax

void WriteStructToMode(
  Destination,
  Source,
  Mode
);

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.

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 memória do modo de usuário. Ele garante que o endereço fornecido seja válido e acessível com base no modo de processador especificado.

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 não impõe alinhamento.

Ele gera uma exceção estruturada se o acesso à memória falhar, como quando o endereço de destino não é válido ou está inacessível para o modo de processador especificado.

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

WriteStructToModeHelper

WriteStructToUser

ReadStructFromMode