FltFastIoPrepareMdlWrite 함수(fltkernel.h)
FltFastIoPrepareMdlWrite 루틴은 캐시에 직접 데이터를 쓰기 위해 지정된 범위의 캐시된 파일 데이터를 가리키는 MDL(메모리 설명자 목록)의 연결된 목록을 반환합니다.
구문
BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
PFLT_INSTANCE InitiatingInstance,
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
매개 변수
InitiatingInstance
호출자에 대한 불투명 instance 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[in] FileObject
파일 개체에 대한 포인터입니다.
[in] FileOffset
데이터를 보유하는 캐시 내의 시작 바이트 오프셋을 지정하는 값에 대한 포인터입니다.
[in] Length
캐시에서 읽을 데이터의 길이(바이트)입니다.
[in] LockKey
잠글 바이트 범위와 연결된 값입니다. 잠금할 범위가 비클러스터적 잠금으로 이미 잠겨 있는 다른 범위와 겹치거나 읽을 범위가 이미 비독점적으로 잠긴 다른 범위의 하위 범위인 경우 이 매개 변수의 값은 비클러스터형 잠금의 키여야 합니다. 잠금은 호출 스레드의 부모 프로세스에 의해 유지되어야 합니다. 그렇지 않으면 이 매개 변수는 영향을 주지 않습니다.
[out] MdlChain
출력에서 캐시된 데이터 내의 바이트 범위를 가리키는 MDL(메모리 설명자 목록)의 연결된 목록에 대한 포인터입니다.
[out] IoStatus
출력에 전송의 상태 포함하는 IO_STATUS_BLOCK 구조체에 대한 포인터입니다. 작업이 성공하면 IoStatus.Status 가 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드로 설정됩니다. IoStatus.Information 는 루틴이 성공적으로 잠근 실제 바이트 수로 설정됩니다.
반환 값
FltFastIoPrepareMdlWrite 루틴은 작업이 성공하면 TRUE를 반환하고 작업이 실패하면 FALSE를 반환합니다.
설명
FltFastIoPrepareMdlWrite 는 FsRtlCopyWrite와 비슷하지만 FltFastIoPrepareMdlWrite 는 캐시에 데이터를 복사하지 않습니다. 대신 호출자가 덮어쓸 실제 페이지는 메모리에 잠겨 있고 FltFastIoPrepareMdlWrite 는 지정된 바이트 범위를 가리키는 하나 이상의 MDL(메모리 설명자 목록)을 반환합니다. 잠긴 페이지는 호출자가 FltFastIoMdlWriteComplete를 호출할 때까지 잠긴 상태로 유지됩니다.
MDL이 가리키는 페이지는 메모리에 잠겨 있지만 시스템 공간에 매핑되지 않습니다. 호출자는 MmGetSystemAddressForMdlSafe를 호출하여 이 매핑을 수행할 수 있습니다.
FltFastIoPrepareMdlWrite에 대한 호출이 실패하더라도 하나 이상의 MDL이 할당되었을 수 있습니다. 호출자는 IoStatus.Information 값을 검사하여 이 문제가 발생했는지 확인할 수 있습니다. 이 경우 호출자는 FltFastIoMdlWriteComplete 를 호출하여 할당된 MDL을 해제해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |