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 CopyToUserFromUser copia com segurança dados da memória do modo de usuário para a memória do modo de usuário.
Syntax
VOID CopyToUserFromUser(
volatile VOID *Destination,
volatile 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 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 entre locais de memória no modo de usuário. Isso permite operações de memória flexíveis entre buffers de modo de usuário diferentes quando o código do modo kernel precisa facilitar a transferência de dados entre locais 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 gera uma exceção estruturada se a operação de cópia falhar, como quando um dos endereços não é um endereço válido no modo de usuário ou está 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 |