Compartilhar via


Função CopyToModeNonTemporal (usermode_accessors.h)

A função CopyToModeNonTemporal copia com segurança os dados da memória do kernel para a memória do kernel ou do modo de usuário usando instruções não temporais com base no modo de processador especificado.

Syntax

VOID CopyToModeNonTemporal(
  VOID            *Destination,
  const VOID      *Source,
  SIZE_T          Length,
  KPROCESSOR_MODE Mode
);

Parameters

Destination

[out] Um ponteiro para o local da memória 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.

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 O destino aponta para a memória do modo kernel. A função executa uma cópia de memória direta usando instruções não temporais com memory_order_relaxed semântica.
UserMode O destino aponta para a memória do modo de usuário. A função gerará uma exceção se o Destino não apontar para a memória do modo de usuário; caso contrário, ele executa uma cópia para o endereço especificado usando instruções não temporais com memory_order_relaxed semântica.

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 kernel ou do modo de usuário usando instruções não temporais (streaming), com o mecanismo de cópia determinado pelo modo de processador especificado. Isso permite operações de memória flexíveis que podem se adaptar a diferentes contextos de execução, otimizando o desempenho do cache para grandes transferências de dados.

Quando o modo é KernelMode:

  • 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.

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 WriteStructToMode 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

CopyToMode

CopyToUserNonTemporal

CopyFromModeNonTemporal