다음을 통해 공유


MmLockPagableDataSection 함수(wdm.h)

MmLockPagableDataSection 루틴은 드라이버 데이터의 전체 섹션을 시스템 공간으로 잠급니다.

통사론

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

매개 변수

[in] AddressWithinSection

페이지 가능 섹션 내의 한 데이터 항목에 대한 기호 주소를 지정합니다.

반환 값

MmLockPagableDataSection 섹션을 식별하는 불투명 값을 반환합니다. 이 값은 이후에 mmLockPagableSectionByHandle 또는 mmUnlockPagableImageSection 전달되어야 합니다.

발언

드라이버는 이 루틴, MmLockPagableSectionByHandleMmUnlockPagableImageSection 사용하여 일반적으로 메모리에 페이징 가능한 프라이빗 데이터를 만들 수 있습니다.

다음과 같은 경우 데이터를 잠글 수 있습니다.

  • 데이터는 일반적으로 <= APC_LEVEL 액세스되지만 짧은 기간 동안 더 높은 IRQL 수준에서 액세스해야 할 수 있습니다.

  • 드라이버는 드물게 예측 가능하게 데이터를 사용합니다.

예를 들어 믹서 디바이스용 드라이버는 페이지 가능 데이터 섹션을 사용합니다. 드라이버는 충분한 데이터를 사용하여 페이지 가능한 데이터 섹션을 만드는 데 도움이 되므로 드라이버는 데이터가 필요한 시기를 알 수 있습니다. 이러한 드라이버는 MmLockPagableDataSection, MmLockPagableSectionByHandleMmUnlockPagableImageSection 사용하여 필요할 때 데이터 섹션을 시스템 공간으로 가져오고 필요하지 않은 경우 페이징할 수 있도록 합니다.

MmLockPagableDataSection 대한 단일 호출로 인해 참조된 데이터가 포함된 전체 섹션이 시스템 공간에 잠깁니다.

섹션을 잠그는 것은 비용이 많이 드는 작업입니다. 드라이버에서 페이징 가능한 데이터 섹션이 둘 이상의 위치에서 잠긴 경우 첫 번째 요청에 MmLockPagableDataSection 사용합니다. MmLockPagableSectionByHandle호출하고 MmLockPagableDataSection반환된 핸들을 전달하여 후속 잠금 요청을 만듭니다. 핸들에 의한 잠금은 드라이버 성능을 크게 향상시킵니다. 잠긴 섹션은 MmUnlockPagableImageSection호출하여 잠금 해제됩니다.

메모리 관리자는 섹션에 대한 참조 횟수를 유지 관리합니다. 페이지 가능 데이터 섹션은 참조 수가 0인 경우에만 페이징할 수 있습니다. 모든 잠금 요청은 개수를 증가합니다. 잠금 해제 요청마다 개수가 감소합니다. 드라이버는 섹션이 필요하지 않을 때 이러한 섹션을 페이징할 수 있도록 섹션을 잠그는 만큼 섹션의 잠금을 해제해야 합니다. 핸들은 개수에 관계없이 항상 유효합니다. 핸들의 개수가 0이고 MmLockPagableSectionByHandle 호출이 수행되면 개수가 1로 설정되고 섹션이 페이징된 경우 페이지가 지정됩니다.

Pageable-data 섹션의 데이터는 컴파일러 지시문으로 표시됩니다. 페이지 가능한 데이터 섹션을 만들려면 데이터 모듈의 시작 부분에 #pragma data_seg("PAGE")사용하고 모듈 끝에 #pragma data_seg()를 사용합니다. PAGE 키워드는 대/소문자를 구분합니다. 즉, PAGE 대문자로 합니다.

시스템 초기화 후 데이터를 삭제할 수 있도록 하는 데 사용되는 #pragma data_seg("INIT") 있습니다. PAGE 대신 INIT 사용하는 경우를 제외하고 구문은 동일합니다. 그러나 결과는 그렇지 않습니다. PAGE 지시문을 사용하면 데이터 섹션을 페이지할 수 있습니다. INIT 지시문을 사용하면 드라이버가 드라이버 항목 루틴 또는 드라이버에 있는 경우 다시 초기화 루틴에서 반환되는 즉시 섹션의 데이터가 삭제됩니다.

페이징 데이터에 대한 자세한 내용은 드라이버를 페이징할 수 있는.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm)

참고 항목

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection