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 가 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드로 설정됩니다. IoStatus.Information 는 루틴이 성공적으로 잠근 실제 바이트 수로 설정됩니다.
반환 값
FsRtlPrepareMdlWriteEx 는 STATUS_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 |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기