다음을 통해 공유


CcPrepareMdlWrite 함수(ntifs.h)

CcPrepareMdlWrite 루틴은 호출자가 파일에 데이터를 쓸 수 있도록 캐시된 파일 메모리에 대한 직접 액세스를 제공합니다.

통사론

void CcPrepareMdlWrite(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

매개 변수

[in] FileObject

캐시된 파일의 파일 개체에 대한 포인터입니다.

[in] FileOffset

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

[in] Length

시스템 캐시에 쓸 데이터의 길이(바이트)입니다.

[out] MdlChain

데이터를 쓸 페이지를 설명하는 하나 이상의 MDL(메모리 설명자 목록) 체인입니다.

[out] IoStatus

IO_STATUS_BLOCK 구조체에 대한 포인터입니다. CcPrepareMdlWrite 호출이 성공하면 IoStatus.Status STATUS_SUCCESS 설정됩니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드로 설정됩니다. IoStatus.Information MDL 체인에서 성공적으로 잠긴 실제 바이트 수로 설정됩니다.

반환 값

없음

발언

CcPrepareMdlWrite 데이터가 캐시된 파일에 복사되지 않는다는 점을 제외하고 CcCopyWrite비슷합니다. 대신 시스템 캐시에서 덮어쓸 실제 페이지는 메모리에 잠기고 CcPrepareMdlWrite 지정된 바이트 범위를 설명하는 하나 이상의 MDL(메모리 설명자 목록)을 반환합니다. 이러한 페이지는 CcMdlWriteComplete 또는 CcMdlWriteAbort 호출될 때까지 메모리에 잠겨 있습니다. 따라서 CcPrepareMdlWrite 대한 각 호출 뒤에 CcMdlWriteComplete 또는 CcMdlWriteAbort호출해야 합니다.

MDL에서 설명하는 페이지는 메모리에 잠겨 있지만 시스템 공간에 매핑되지는 않습니다. 호출자는 MmGetSystemAddressForMdlSafe호출하여 이 매핑을 수행할 수 있습니다.

ccPrepareMdlWrite 호출에 실패하더라도 하나 이상의 MDL이 할당되었을 수 있습니다. 호출자는 IoStatus.Information 값을 검사하여 이 문제가 발생했는지 여부를 확인할 수 있습니다. 호출자가 할당된 MDL을 해제하려면 CcMdlWriteComplete 호출해야 합니다.

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

파일을 캐시하려면 CcInitializeCacheMap사용합니다.

요구 사항

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

참고 항목

ccCopyWrite

ccInitializeCacheMap

CcMdlWriteAbort

CcMdlWriteComplete

IoAllocateMdl

IoBuildPartialMdl

MmGetMdlByteCount

MmGetMdlByteOffset

MmGetMdlPfnArray

MmGetMdlVirtualAddress

MmGetSystemAddressForMdl

MmGetSystemAddressForMdlSafe

MmInitializeMdl

mmMapLockedPages

MmPrepareMdlForReuse

mmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages