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.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 |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기