MmProbeAndLockPages 함수(wdm.h)
MmProbeAndLockPages 루틴은 지정된 가상 메모리 페이지를 검색하고, 상주하게 하고, 메모리에 잠깁니다(예: DMA 전송). 이렇게 하면 디바이스 드라이버(또는 하드웨어)가 계속 사용하는 동안 페이지를 해제하고 다시 할당할 수 없습니다.
통사론
void MmProbeAndLockPages(
[in, out] PMDL MemoryDescriptorList,
[in] KPROCESSOR_MODE AccessMode,
[in] LOCK_OPERATION Operation
);
매개 변수
[in, out] MemoryDescriptorList
가상 메모리 버퍼를 지정하는 MDL에 대한 포인터입니다. 루틴이 메모리의 페이지를 성공적으로 잠그면 기본 물리적 페이지를 설명하도록 MDL이 업데이트됩니다.
[in] AccessMode
KernelMode 또는 UserMode 인수를 검색할 액세스 모드입니다.
[in] Operation
호출자가 액세스 권한을 검색하고 페이지를 잠그려는 작업의 유형입니다. 이 매개 변수를 IoReadAccess, IoWriteAccess또는 IoModifyAccess설정합니다. IoReadAccess 드라이버가 버퍼의 내용을 검사할 수 있지만 내용을 변경할 수 없음을 나타냅니다. IoWriteAccess 및 IoModifyAccess동일합니다. 이는 드라이버가 버퍼에 대한 읽기 및 쓰기 액세스 권한을 모두 가지고 있음을 나타냅니다.
반환 값
없음
발언
직접 I/O를 사용하는 계층화된 드라이버 체인에서 가장 높은 수준의 드라이버는 이 루틴을 호출합니다. 버퍼링된 I/O를 사용하는 드라이버는 MmProbeAndLockPages호출하지 않습니다.
MmProbeAndLockPages 다음 작업을 수행합니다.
- 지정한 메모리 범위가 백업 저장소(디스크, 네트워크 등)에 페이징되는 경우 MmProbeAndLockPages 상주합니다.
- 그런 다음 이 루틴은 페이지에서 Operation 매개 변수로 지정된 작업을 허용하는지 확인합니다.
- 메모리 범위에서 지정된 작업을 허용하는 경우 루틴은 페이지를 페이징할 수 없도록 메모리의 페이지를 잠급니다. MmUnlockPages 루틴을 사용하여 페이지의 잠금을 해제합니다.
- 마지막으로, 루틴은 MDL의 PFN(페이지 프레임 번호) 배열을 업데이트하여 잠긴 실제 페이지를 설명합니다.
둘 이상의 MDL이 동일한 실제 페이지를 설명하는 경우 각 MDL에 대해 한 번씩 페이지를 여러 번 잠글 수 있습니다. 마지막 MDL이 잠금 해제된 상태로 설정되면 페이지가 잠금 해제됩니다.
MmBuildMdlForNonPagedPool 또는 IoBuildPartialMdl 같은 루틴은 MDL을 업데이트하여 페이지가 없거나 이미 잠겨 있는 페이지를 설명합니다. 이러한 MDL을 잠그거나 잠금을 해제하기 위해 MmProbeAndLockPages 또는 MmUnlockPages 호출은 허용되지 않습니다.
MmProbeAndLockPages 호출은 try/except 블록으로 묶어야 합니다. 페이지에서 지정된 작업을 지원하지 않는 경우 루틴은 STATUS_ACCESS_VIOLATION 또는 기타 예외를 발생합니다. 자세한 내용은 예외 처리 참조하세요.
MmProbeAndLockPages 호출자는 페이지가 지정 가능한 주소의 경우 IRQL <= APC_LEVEL 또는 페이지를 처리할 수 없는 주소의 경우 IRQL <= DISPATCH_LEVEL 실행되어야 합니다.
이 루틴은 이러한 페이지를 설명하는 가상 주소에 대한 보장을 제공하지 않습니다(즉, 가상 주소가 매핑 해제, 재사용 등일 수 있음). 그러나 반환이 성공하면 실제 페이지가 잠기도록 보장됩니다.
페이지 오류를 방지하려면 VirtualLock 사용하여 앱이 가상 주소를 잠금 해제하거나 VirtualFree 호출하거나 UnmapViewOfFile명시적으로 해제하지 않는 한 트리밍되지 않도록 가상 주소를 잠급니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 설명 섹션을 참조하세요. |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport) |