Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A macro ReadStructFromUserAligned lê com segurança uma estrutura da memória do modo de usuário com validação de alinhamento.
Syntax
void ReadStructFromUserAligned(
Destination,
Source,
Alignment
);
Parameters
Destination
[out] Um ponteiro para a estrutura que recebe os dados lidos da memória do modo de usuário.
Source
[in] Um ponteiro para o local de memória do modo de usuário do qual ler a estrutura.
Alignment
[in] O alinhamento necessário para o endereço de origem, em bytes.
Return value
None
Remarks
Essa macro fornece uma maneira segura de ler uma estrutura da 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 lê-lo.
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 origem 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 origem 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 |