Compartilhar via


Função MmCopyMemory (ntddk.h)

A rotina MmCopyMemory copia o intervalo especificado de memória virtual ou física no buffer fornecido pelo chamador.

Sintaxe

NTSTATUS MmCopyMemory(
  [in]  PVOID           TargetAddress,
  [in]  MM_COPY_ADDRESS SourceAddress,
  [in]  SIZE_T          NumberOfBytes,
  [in]  ULONG           Flags,
  [out] PSIZE_T         NumberOfBytesTransferred
);

Parâmetros

[in] TargetAddress

Um ponteiro para um buffer fornecido pelo chamador. Esse buffer deve estar na memória não pageable.

[in] SourceAddress

Uma estrutura MM_COPY_ADDRESS, passada por valor, que contém o endereço virtual ou o endereço físico dos dados a serem copiados para o buffer apontado por TargetAddress.

[in] NumberOfBytes

O número de bytes a serem copiados de sourceAddress para targetAddress.

[in] Flags

Sinalizadores que indicam se SourceAddress é um endereço virtual ou um endereço físico. Os bits de sinalizador a seguir são definidos para esse parâmetro.

Bit de sinalizador Descrição
MM_COPY_MEMORY_PHYSICAL SourceAddress especifica um endereço físico.
MM_COPY_MEMORY_VIRTUAL SourceAddress especifica um endereço virtual.

Esses dois bits de sinalizador são mutuamente exclusivos. O chamador deve definir um ou outro, mas não ambos.

[out] NumberOfBytesTransferred

Um ponteiro para um local no qual a rotina grava o número de bytes copiados com êxito do sourceAddress local para o buffer em TargetAddress.

Valor de retorno

MmCopyMemory retornará STATUS_SUCCESS se todo o intervalo tiver sido copiado com êxito. Caso contrário, um status de erro será retornado e o chamador deverá inspecionar o valor de saída apontado pelo parâmetro NumberOfBytesTransferred para determinar quantos bytes foram realmente copiados.

Observações

Os drivers no modo kernel podem chamar essa rotina para acessar com segurança endereços físicos ou virtuais arbitrários.

Se o sinalizador de MM_COPY_MEMORY_PHYSICAL estiver definido, SourceAddress deverá apontar para a memória regular que está sob controle do sistema operacional. MmCopyMemory retornará um código de status de erro para endereços físicos que se referem ao espaço de E/S, que inclui dispositivos mapeados pela memória e tabelas de firmware. Para acessar a memória física no espaço de E/S, os drivers podem usar a rotina de MmMapIoSpace.

Se o sinalizador MM_COPY_MEMORY_VIRTUAL estiver definido, SourceAddress poderá apontar para um buffer no espaço de endereço do sistema ou um buffer no espaço de endereço do usuário do processo atual. Se o chamador não controlar o tempo de vida da alocação que contém o endereço de origem especificado, MmCopyMemory poderá falhar ou retornar dados inconsistentes, mas não causará uma falha no sistema, mesmo para endereços do sistema inválidos e dispararia uma verificação de bug se referenciado diretamente. MmCopyMemory retornará um código de status de erro para endereços virtuais do sistema que fazem referência ao espaço de E/S.

Se a memória no endereço virtual especificado por SourceAddress não for residente, MmCopyMemory tentará torná-la residente.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 8.1.
da Plataforma de Destino Universal
cabeçalho ntddk.h
biblioteca Ntoskrnl.lib
IRQL <= APC_LEVEL

Consulte também

MM_COPY_ADDRESS

MmMapIoSpace