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
SourceAddress에서 TargetAddress로 복사할 바이트 수입니다.
[in] Flags
SourceAddress가 가상 주소인지 실제 주소인지 여부를 나타내는 플래그입니다. 이 매개 변수에 대해 다음 플래그 비트가 정의됩니다.
플래그 비트 | Description |
---|---|
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 |