CcPinMappedData 함수(ntifs.h)

CcPinMappedData 루틴은 캐시된 파일의 지정된 바이트 범위를 고정합니다.

구문

BOOLEAN CcPinMappedData(
  [in]      PFILE_OBJECT   FileObject,
  [in]      PLARGE_INTEGER FileOffset,
  [in]      ULONG          Length,
  [in]      ULONG          Flags,
  [in, out] PVOID          *Bcb
);

매개 변수

[in] FileObject

데이터 범위를 고정할 캐시된 파일의 파일 개체에 대한 포인터입니다.

[in] FileOffset

원하는 데이터가 있는 캐시된 파일 내에서 시작 바이트 오프셋을 지정하는 변수에 대한 포인터입니다.

[in] Length

고정할 데이터의 길이(바이트)입니다.

[in] Flags

고정 작업을 수행하는 방법을 지정하는 플래그의 비트 마스크입니다. 다음 값 중 하나 이상의 ORed 조합:

플래그 의미
PIN_WAIT 호출자는 데이터가 고정될 때까지 대기 상태로 전환할 수 있습니다.
PIN_EXCLUSIVE BCB(버퍼 제어 블록)는 독점적으로 획득해야 합니다. 이 플래그가 설정되면 PIN_WAIT 설정해야 합니다.
PIN_NO_READ 메모리에 이미 상주하는 페이지만 고정해야 합니다. 이 플래그가 설정되면 PIN_WAIT 설정해야 합니다.
PIN_IF_BCB BCB가 이미 있는 경우에만 데이터를 고정해야 합니다. 그렇지 않으면 핀이 실패하고 BcbNULL로 설정됩니다.

[in, out] Bcb

첫 번째 호출에서 BCB(버퍼 제어 블록)에 대한 포인터를 반환합니다. 이 포인터는 이 버퍼에 대한 모든 후속 호출에 대한 입력으로 제공되어야 합니다.

반환 값

캐시된 파일의 데이터가 성공적으로 고정된 경우 CcPinMappedDataTRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

설명

CcPinMappedData에서 성공적으로 반환하면 이전에 CcMapData 호출에서 매핑된 데이터가 캐시에 고정되고 지정된 범위의 데이터를 안전하게 수정할 수 있습니다. 이후에 호출자가 CcPinMappedData에 의해 고정된 데이터를 수정하는 경우 수정된 데이터가 결국 디스크에 기록되도록 CcSetDirtyPinnedData 도 호출해야 합니다.

CcPinMappedData 는 캐시 관리자의 보기 경계를 넘어 데이터를 고정할 수 없습니다. 캐시 관리자는 256KB로 정렬된 보기에서 시스템의 파일을 관리합니다. (캐시 관리자의 뷰 크기는 ntifs.h에서 256KB로 설정된 시스템 정의 상수 VACB_MAPPING_GRANULARITY 의해 지정됩니다. 고정된 지역은 둘 이상의 256KB 뷰에 걸쳐 있습니다. 따라서 고정할 수 있는 가장 큰 영역은 파일의 256KB 정렬 오프셋에서 시작하여 256KB입니다.

캐시된 파일에 바이트 범위를 고정해도 페이지가 메모리에 상주하지 않습니다. 페이지가 고정되는 한 바이트 범위는 시스템 캐시 가상 주소 공간에 매핑된 상태를 유지하지만 메모리 관리자는 시스템의 메모리 요구 사항에 따라 실제 페이지를 페이징할 수 있습니다.

오류가 발생하면 CcPinMappedData는 해당 특정 오류에 대한 상태 예외를 발생합니다. 예를 들어 풀 할당 오류가 발생하면 CcPinMappedData에서 STATUS_INSUFFICIENT_RESOURCES 예외가 발생합니다. I/O 오류가 발생하면 CcPinMappedData는 I/O 오류의 상태 예외를 발생합니다. 따라서 오류가 발생하는 경우 제어하려면 드라이버는 try-except 또는 try-finally 문에서 CcPinMappedData에 대한 호출을 래핑해야 합니다.

캐시된 파일의 데이터를 매핑하려면 CcMapData 루틴을 사용합니다. 파일을 캐시하려면 CcInitializeCacheMap을 사용합니다.

Pin 참조가 CcMapData 와 일치하므로 CcPinMappedData 를 호출한 후에 는 CcUnpinData를 호출할 필요가 없습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

추가 정보

CcInitializeCacheMap

CcMapData

CcPinRead

CcPreparePinWrite

CcSetDirtyPinnedData

CcUnpinData