다음을 통해 공유


MmCopyMemory 함수(ntddk.h)

MmCopyMemory 루틴은 지정된 범위의 가상 또는 물리적 메모리를 호출자가 제공한 버퍼에 복사합니다.

통사론

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

매개 변수

[in] TargetAddress

호출자가 제공한 버퍼에 대한 포인터입니다. 이 버퍼는 페이지가 아닌 메모리에 있어야 합니다.

[in] SourceAddress

TargetAddress가리키는 버퍼에 복사할 데이터의 실제 주소 또는 가상 주소를 포함하는 값으로 전달되는 MM_COPY_ADDRESS 구조체입니다.

[in] NumberOfBytes

SourceAddressTargetAddress복사할 바이트 수입니다.

[in] Flags

SourceAddress 가상 주소인지 아니면 실제 주소인지를 나타내는 플래그입니다. 이 매개 변수에 대해 다음 플래그 비트가 정의됩니다.

플래그 비트 묘사
MM_COPY_MEMORY_PHYSICAL SourceAddress 실제 주소를 지정합니다.
MM_COPY_MEMORY_VIRTUAL SourceAddress 가상 주소를 지정합니다.

이 두 플래그 비트는 함께 사용할 수 없습니다. 호출자는 하나 또는 다른 하나를 설정해야 하지만 둘 다 설정하지는 않습니다.

[out] NumberOfBytesTransferred

루틴이 SourceAddress 위치에서 성공적으로 복사한 바이트 수를 TargetAddress버퍼에 쓰는 위치에 대한 포인터입니다.

반환 값

MmCopyMemory 전체 범위가 성공적으로 복사된 경우 STATUS_SUCCESS 반환합니다. 그렇지 않으면 오류 상태가 반환되고 호출자는 NumberOfBytesTransferred 매개 변수가 가리키는 출력 값을 검사하여 실제로 복사된 바이트 수를 확인해야 합니다.

발언

커널 모드 드라이버는 이 루틴을 호출하여 임의의 물리적 또는 가상 주소에 안전하게 액세스할 수 있습니다.

MM_COPY_MEMORY_PHYSICAL 플래그가 설정된 경우 SourceAddress 운영 체제를 제어하는 일반 메모리를 가리킵니다. MmCopyMemory 메모리 매핑된 디바이스 및 펌웨어 테이블을 포함하는 I/O 공간을 참조하는 실제 주소에 대한 오류 상태 코드를 반환합니다. I/O 공간의 실제 메모리에 액세스하기 위해 드라이버는 MmMapIoSpace 루틴을 사용할 수 있습니다.

MM_COPY_MEMORY_VIRTUAL 플래그가 설정된 경우 SourceAddress 시스템 주소 공간의 버퍼 또는 현재 프로세스의 사용자 주소 공간에 있는 버퍼를 가리킬 수 있습니다. 호출자가 지정된 원본 주소를 포함하는 할당의 수명을 제어하지 않는 경우 MmCopyMemory 실패하거나 일관되지 않은 데이터를 반환할 수 있지만, 시스템 주소가 잘못되었으며 직접 참조되는 경우 버그 검사를 트리거하는 경우에도 시스템 작동이 중단되지 않습니다. MmCopyMemory I/O 공간을 참조하는 시스템 가상 주소에 대한 오류 상태 코드를 반환합니다.

SourceAddress 지정한 가상 주소의 메모리가 상주하지 않으면 MmCopyMemory 상주하려고 합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8.1부터 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 ntddk.h
라이브러리 Ntoskrnl.lib
IRQL <= APC_LEVEL

참고 항목

MM_COPY_ADDRESS

MmMapIoSpace