CcPinRead 함수(ntifs.h)
CcPinRead 루틴은 캐시된 파일의 지정된 바이트 범위를 고정하고 고정된 데이터를 메모리의 버퍼로 읽습니다.
통사론
BOOLEAN CcPinRead(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG Flags,
[out] PVOID *Bcb,
[out] PVOID *Buffer
);
매개 변수
[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 |
[out] Bcb
첫 번째 호출에서 BCB(버퍼 제어 블록)에 대한 포인터를 반환합니다. 이 포인터는 이 버퍼에 대한 모든 후속 호출에 대한 입력으로 제공되어야 합니다.
[out] Buffer
고정된 데이터를 포함하는 버퍼에 대한 포인터입니다.
반환 값
발언
PIN_WAIT 플래그가 설정된 경우
이후에 호출자가 CcPinRead읽은 데이터를 수정하는 경우 수정된 데이터가 결국 디스크에 기록되도록 CcSetDirtyPinnedData 호출해야 합니다.
CcPinRead 대한 모든 성공적인 호출은 CcUnpinData대한 후속 호출과 일치해야 합니다.
Buffer 반환된 포인터는 CcUnpinData 호출될 때까지 유효합니다. 이 포인터가 유효한 동안 CcPinMappedData 호출되는 경우 CcPinMappedData 호출한 후에도 포인터가 유효한 상태로 유지됩니다(하지만 CcUnpinData 호출될 때까지만).
CcPinRead 캐시 관리자의 뷰 경계를 넘어 데이터를 고정할 수 없습니다. 캐시 관리자는 256KB로 정렬된 보기로 시스템의 파일을 관리합니다. (캐시 관리자의 뷰 크기는 ntifs.h에서 256KB로 설정된 시스템 정의 상수 VACB_MAPPING_GRANULARITY 의해 지정됩니다. 고정된 영역은 둘 이상의 256KB 보기를 확장할 수 없습니다. 따라서 고정할 수 있는 가장 큰 영역은 파일의 256KB 정렬 오프셋부터 시작하여 256KB입니다.
캐시된 파일에 바이트 범위를 고정해도 페이지가 메모리에 남아 있는 것은 아닙니다. 페이지가 고정되어 있는 한 바이트 범위는 시스템 캐시 가상 주소 공간에 매핑된 상태를 유지하지만 메모리 관리자는 시스템의 메모리 요구 사항에 따라 실제 페이지를 페이징할 수 있습니다.
오류가 발생하면 ccPinRead
캐시된 파일에 대한 데이터를 매핑하려면 CcMapData 루틴을 사용합니다. 파일을 캐시하려면 CcInitializeCacheMap사용합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL |
< DISPATCH_LEVEL |
참고 항목
ccInitializeCacheMap
CcMapData
CcPinMappedData
CcPreparePinWrite
CcUnpinData