Partilhar via


Função CopyToUser (usermode_accessors.h)

A função CopyToUser copia com segurança os dados da memória do kernel para a memória do modo de usuário.

Syntax

VOID CopyToUser(
  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. Isso permite operações de memória flexíveis quando o código do modo kernel precisa transferir dados para buffers de modo de usuário.

A função tem as seguintes propriedades:

  • A função executa uma cópia volátil usando memory_order_relaxed semântica.

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

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

CopyToUserNonTemporal

CopyToMode

CopyFromUser

CopyToUserFromUser