다음을 통해 공유


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가 이미 있는 경우에만 데이터를 고정해야 합니다. 그렇지 않으면 핀이 실패하고 bcb NULL설정됩니다.

[in, out] Bcb

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

반환 값

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

발언

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

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

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

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

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

핀 참조가 CcMapData일치하기 때문에 CcPinMappedData 호출한 후에는 CcUnpinData 호출할 필요가 없습니다.

요구 사항

요구
대상 플랫폼 보편적
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

참고 항목

ccInitializeCacheMap

CcMapData

CcPinRead

CcPreparePinWrite

CcSetDirtyPinnedData

CcUnpinData