다음을 통해 공유


FltGetSwappedBufferMdlAddress 함수(fltkernel.h)

FltGetSwappedBufferMdlAddress 루틴은 미니필터 드라이버에서 교환된 버퍼에 대한 MDL(메모리 설명자 목록) 주소를 반환합니다.

구문

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

매개 변수

[in] CallbackData

작업에 대한 콜백 데이터 구조에 대한 포인터입니다.

반환 값

FltGetSwappedBufferMdlAddress 는 호출자가 교환한 버퍼의 MDL 주소를 반환합니다. FltGetSwappedBufferMdlAddress 는 다음과 같은 경우 NULL 을 반환합니다.

  • 작업은 빠른 I/O 작업입니다. 빠른 I/O 작업에서는 버퍼에 MDL이 있을 수 없습니다.
  • 호출자가 교환한 버퍼에 MDL이 없습니다.
  • 미니필터 드라이버는 사전 작업 콜백 루틴에서 버퍼를 교환하지 않았습니다.

설명

사전 작업 콜백 루틴의 새 버퍼에서 교환하는 미니필터 드라이버는 해당 사후 작업 콜백 루틴에서 FltGetSwappedBufferMdlAddress 를 호출하여 버퍼에 대한 MDL 주소를 가져올 수 있습니다.

FltGetSwappedBufferMdlAddress 루틴은 사후 작업 콜백 루틴이 호출자의 사전 운용 콜백 루틴에 의해 교환된 것이 아니라 원래 버퍼 및 MDL 주소가 포함된 콜백 데이터 구조를 수신하기 때문에 필요합니다.

FltGetSwappedBufferMdlAddress는 호출자가 교환된 버퍼에 대한 MDL을 만들지 않은 경우에도 NULL이 아닌 MDL 값을 반환할 수 있습니다. 미니필터 드라이버, 레거시 필터 드라이버 또는 미니필터 드라이버 또는 파일 시스템 드라이버 스택의 호출자 아래에 있는 파일 시스템 드라이버가 버퍼에 대해 MDL을 만들 때 발생합니다.

또한 FltGetSwappedBufferMdlAddress는 호출자가 사전 운용 콜백 루틴의 새 버퍼에서 교환하지 않은 경우에도 NULL이 아닌 MDL 값을 반환할 수 있습니다. 이는 버퍼가 NULL이고 호출자가 새 MDL 주소로 교환되는 페이징 I/O와 같은 작업에서 발생합니다.

호출자가 교환한 버퍼에 대한 MDL은 작업 후 콜백 루틴이 반환될 때 필터 관리자에 의해 자동으로 해제됩니다. 이 MDL이 해제되지 않도록 하려면 FltRetainSwappedBufferMdlAddress를 호출합니다.

FltGetSwappedBufferMdlAddress 는 사후 콜백 루틴에서만 호출할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL 모든 수준

추가 정보

FltDecodeParameters

FltRetainSwappedBufferMdlAddress