Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A função CopyFromUserNonTemporal copia com segurança dados da memória do modo de usuário para a memória do kernel usando instruções não temporais.
Syntax
VOID CopyFromUserNonTemporal(
VOID *Destination,
volatile const VOID *Source,
SIZE_T Length
);
Parameters
Destination
[out] Um ponteiro para o local de memória do kernel em que os dados serão copiados.
Source
[in] Um ponteiro para o local de memória do modo de usuário do qual copiar os dados.
Length
[in] O número de bytes a serem copiados.
Valor de retorno
None
Remarks
Essa função fornece uma maneira segura de copiar dados da memória do modo de usuário para a memória do kernel usando instruções não temporais (streaming). Isso permite operações de memória flexíveis quando o código do modo kernel precisa recuperar dados de buffers de modo de usuário, otimizando o desempenho do cache para grandes transferências de dados.
A função tem as seguintes propriedades:
A função executa uma cópia volátil usando memory_order_relaxed semântica com instruções não temporais.
A função não é reconhecida como um compilador intrínseco, portanto, o compilador nunca otimizará a chamada (totalmente ou substituirá a chamada por uma sequência equivalente de instruções).
Quando a chamada é retornada, os dados foram copiados de Origem para Destino. Os acessos de memória dessa função à origem e ao destino só serão executados dentro da função (por exemplo, o compilador não pode mover acessos de memória para fora dessa função).
A função poderá executar acessos de memória não assinados se a plataforma permitir.
A função pode acessar locais de memória mais de uma vez como parte de sua operação de cópia.
A função não dá suporte a operações de cópia quando a origem e o destino se sobrepõem.
A função usa instruções não temporais que podem melhorar o desempenho de grandes transferências de dados ignorando o cache do processador, reduzindo a poluição do cache.
A função gera uma exceção estruturada se a operação de cópia falhar, como quando o endereço de origem não é um endereço válido no modo de usuário ou está inacessível.
Essa função é particularmente útil ao copiar grandes quantidades de dados que dificilmente serão acessados novamente em breve, pois evita remover outros dados úteis do cache.
Se você estiver copiando de uma estrutura de tamanho fixo, deverá usar ReadStructFromUser para evitar o risco de passar o tamanho errado.
Essa função nunca será otimizada pelo compilador, nem o compilador criará acessos adicionais a esse local de memória antes que a função seja chamada ou depois que a função retornar (a menos que o código-fonte execute explicitamente esses acessos).
Essa função 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 função 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 | Ver Comentários |
| Header | usermode_accessors.h |
| Library | umaccess.lib |
| IRQL | Menor ou igual a APC_LEVEL |