Partilhar via


Macro ReadStructFromMode (usermode_accessors.h)

A macro ReadStructFromMode lê com segurança uma estrutura da memória com base no modo de processador especificado.

Syntax

void ReadStructFromMode(
  Destination,
  Source,
  Mode
);

Parameters

Destination

[out] Um ponteiro para a estrutura que recebe os dados lidos da memória.

Source

[in] Um ponteiro para o local de memória do qual ler a estrutura.

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 A origem aponta para a memória do modo kernel. A macro executa uma leitura do endereço especificado com memory_order_relaxed semântica. Consulte Comentários para obter mais detalhes.
UserMode A origem aponta para a memória do modo de usuário. A macro gerará uma exceção se a origem não apontar para a memória do modo de usuário; caso contrário, ele executa uma leitura do 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 ler uma estrutura da 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 origem 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

ReadStructFromModeHelper

ReadStructFromUser

WriteStructToMode