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 função CopyToUserNonTemporal copia com segurança dados da memória do kernel para a memória do modo de usuário usando instruções não temporais.
Syntax
VOID CopyToUserNonTemporal(
volatile VOID *Destination,
const VOID *Source,
SIZE_T Length
);
Parameters
Destination
[out] Um ponteiro para o local de memória do modo de usuário em que os dados serão copiados.
Source
[in] Um ponteiro para o local de memória do kernel 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 kernel para a memória do modo de usuário usando instruções não temporais (streaming). Isso permite operações de memória flexíveis quando o código do modo kernel precisa transferir dados para buffers no 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 gerará uma exceção estruturada se a operação de cópia falhar, como quando o endereço de destino não for um endereço válido no modo de usuário ou estiver 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 uma estrutura de tamanho fixo, deverá usar WriteStructToUser 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 |