FsRtlMdlReadDev 함수(ntifs.h)

FsRtlMdlReadDev 루틴은 파일 캐시에서 지정된 바이트 범위를 직접 가리키는 MDL(메모리 설명자 목록)을 반환합니다.

구문

BOOLEAN FsRtlMdlReadDev(
  [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

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

반환 값

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

설명

FsRtlMdlReadDev 루틴은 일반적인 IRP 메커니즘을 무시하고 호출자가 캐시된 파일 데이터에 직접 액세스하는 데 사용할 수 있는 MDL(메모리 설명자 목록)의 연결된 목록을 반환합니다. 이 작업은 데이터를 복사하거나 버퍼링하지 않으므로 일반 읽기보다 훨씬 빠릅니다.

루틴은 CcMdlReadFltFastIoMdlRead와 유사합니다. FltFastIoMdlRead, CcMdlReadFsRtlMdlReadDev 는 시스템이 이러한 페이지를 페이지 파일로 교환하지 못하도록 캐시된 파일 데이터가 포함된 페이지를 잠급니다. 호출자가 FsRtlMdlReadCompleteDev 루틴을 호출할 때까지 페이지는 메모리에 잠겨 있습니다.

요구 사항

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

추가 정보

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx