Partilhar via


Função CopyToUserNonTemporal (usermode_accessors.h)

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

Consulte também

CopyToUser

CopyToModeNonTemporal

CopyFromUserNonTemporal