다음을 통해 공유


MmLockPagableDataSection 함수(wdm.h)

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

구문

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

매개 변수

[in] AddressWithinSection

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

반환 값

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

설명

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

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

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

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

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

MmLockPagableDataSection을 한 번의 호출로 인해 참조된 데이터를 포함하는 전체 섹션이 시스템 공간에 잠깁니다.

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

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

pageable-data 섹션의 데이터는 컴파일러 지시문으로 표시됩니다. 페이지가 지정 가능한 데이터 섹션을 만들려면 데이터 모듈의 시작 부분에 #pragma data_seg("PAGE")를 사용하고 모듈 끝에 #pragma data_seg() 를 사용합니다. 키워드(keyword) 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