FsRtlPrepareMdlWriteDev 함수(ntifs.h)

FsRtlPrepareMdlWriteDev 루틴은 캐시에 직접 데이터를 쓰기 위해 지정된 캐시된 파일 데이터 범위를 가리키는 MDL(메모리 설명자 목록)의 연결된 목록을 반환합니다.

구문

BOOLEAN FsRtlPrepareMdlWriteDev(
  [in]             PFILE_OBJECT     FileObject,
  [in]             PLARGE_INTEGER   FileOffset,
  [in]             ULONG            Length,
  [in]             ULONG            LockKey,
  [out]            PMDL             *MdlChain,
  [out]            PIO_STATUS_BLOCK IoStatus,
  [ in, optional ] PDEVICE_OBJECT   DeviceObject
);

매개 변수

[in] FileObject

파일 개체에 대한 포인터입니다.

[in] FileOffset

데이터를 보유하는 캐시 내의 시작 바이트 오프셋을 지정하는 값에 대한 포인터입니다.

[in] Length

캐시에서 읽을 데이터의 길이(바이트)입니다.

[in] LockKey

잠글 바이트 범위와 연결된 값입니다. 잠금할 범위가 비클러스터적 잠금으로 이미 잠겨 있는 다른 범위와 겹치거나 읽을 범위가 이미 비독점적으로 잠겨 있는 다른 범위의 하위 범위인 경우 이 매개 변수의 값은 비독점 잠금의 키여야 합니다. 잠금은 호출 스레드의 부모 프로세스에 의해 유지되어야 합니다. 그렇지 않으면 이 매개 변수가 적용되지 않습니다.

[out] MdlChain

출력에서 캐시된 데이터 내의 바이트 범위를 가리키는 MDL(메모리 설명자 목록)의 연결된 목록에 대한 포인터입니다.

[out] IoStatus

출력에서 전송의 상태 포함하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 작업이 성공하면 IoStatus.Status 가 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드로 설정됩니다. IoStatus.Information 는 루틴이 성공적으로 잠근 실제 바이트 수로 설정됩니다.

[ in, optional ] DeviceObject

파일이 열리는 디바이스 개체에 대한 포인터입니다.

반환 값

FsRtlPrepareMdlWriteDev 루틴은 작업이 성공하면 TRUE를 반환하고 작업이 실패하면 FALSE를 반환합니다.

설명

FsRtlPrepareMdlWriteDevFsRtlPrepareMdlWriteDev가 캐시에 데이터를 복사하지 않는다는 점을 제외하고 FsRtlCopyWrite와 유사합니다. 대신 호출자가 덮어쓸 실제 페이지가 메모리에 잠겨 있고 FsRtlPrepareMdlWriteDev 는 지정된 바이트 범위를 가리키는 하나 이상의 MDL(메모리 설명자 목록)을 반환합니다. 잠긴 페이지는 호출자가 FsRtlMdlWriteCompleteDev를 호출할 때까지 잠겨 있습니다.

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

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

요구 사항

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

추가 정보

FsRtlMdlWriteCompleteDev

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe