FsRtlPrepareMdlWriteEx 함수(ntifs.h)
FsRtlPrepareMdlWriteEx 루틴은 캐시에 직접 데이터를 쓰기 위해 캐시된 파일 데이터의 지정된 범위를 가리키는 연결된 MDL(메모리 설명자 목록) 목록을 반환합니다. 쓰기에 대한 캐시 지원을 사용할 수 없는 경우 루틴은 IRP 기반 MDL 쓰기 작업으로 되돌아갑니다.
통사론
NTSTATUS FsRtlPrepareMdlWriteEx(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
매개 변수
[in] FileObject
파일 개체에 대한 포인터입니다.
[in] FileOffset
데이터를 보유하는 캐시 내의 시작 바이트 오프셋을 지정하는 값에 대한 포인터입니다.
[in] Length
캐시에 쓸 데이터의 길이(바이트)입니다.
[in] LockKey
잠글 바이트 범위와 연결된 값입니다. 잠글 범위가 비클러스터적 잠금으로 이미 잠겨 있는 다른 범위와 겹치거나 읽을 범위가 이미 비클러스터적으로 잠겨 있는 다른 범위의 하위 범위인 경우 이 매개 변수의 값은 해당 비클러스터형 잠금의 키여야 합니다. 잠금은 호출 스레드의 부모 프로세스에 의해 유지되어야 합니다. 그렇지 않으면 이 매개 변수는 영향을 주지 않습니다.
[out] MdlChain
출력에서 캐시된 데이터 내의 바이트 범위를 가리키는 MDL(메모리 설명자 목록)의 연결된 목록에 대한 포인터입니다.
[out] IoStatus
출력에 전송 상태가 포함된 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 작업이 성공하면 IoStatus.Status
반환 값
FsRtlPrepareMdlWriteExSTATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
반환 코드 | 묘사 |
---|---|
|
IRP 기반 쓰기에 대한 IRP를 할당할 수 없습니다. |
발언
파일 시스템에 대해 빠른 I/O를 사용할 수 있는 경우 FsRtlPrepareMdlWriteEx 루틴은 일반적인 IRP 쓰기 메커니즘을 무시하고 호출자가 파일 캐시에 직접 데이터를 쓰는 데 사용할 수 있는 MDL(메모리 설명자 목록)의 연결된 목록을 반환합니다. 버퍼링된 데이터를 캐시에 복사하는 대신 호출자가 덮어쓰는 실제 페이지는 메모리에 잠겨 직접 쓸 수 있습니다. FsRtlPrepareMdlWriteEx 지정된 바이트 범위를 가리키는 하나 이상의 MDL(메모리 설명자 목록)을 반환합니다.
빠른 I/O를 사용하도록 설정하지 않으면 FsRtlPrepareMdlWriteEx 동기 IRP 기반 MDL 쓰기 준비를 생성하고 요청에서 할당된 MDL을 반환합니다.
MDL이 가리키는 페이지는 메모리에 잠겨 있지만 시스템 공간에 매핑되지 않습니다. 호출자는 MmGetSystemAddressForMdlSafe호출하여 이 매핑을 수행할 수 있습니다.
FsRtlPrepareMdlWriteEx 대한 각 호출 뒤에 CcMdlWriteComplete호출해야 합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL |
PASSIVE_LEVEL |
참고 항목
ccPrepareMdlWrite