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 |