다음을 통해 공유


FltDecodeParameters 함수(fltkernel.h)

FltDecodeParameters는 I/O 작업에 대한 MDL(메모리 설명자 목록) 주소, 버퍼 포인터, 버퍼 길이 및 원하는 액세스 매개 변수에 대한 포인터를 반환합니다. 이렇게 하면 미니필터 드라이버가 switch 문을 갖지 않도록 하여 여러 작업 유형에 대한 MDL 주소, 버퍼 포인터, 버퍼 길이 및 원하는 액세스에 액세스하는 도우미 루틴에서 이러한 매개 변수의 위치를 찾을 수 있습니다.

구문

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

매개 변수

[in] CallbackData

I/O 작업에 대한 콜백 데이터(FLT_CALLBACK_DATA) 구조체에 대한 포인터입니다.

[out] MdlAddressPointer

콜백 데이터 매개 변수(FLT_PARAMETERS) 구조체의 MdlAddress(또는 OutputMdlAddress) 멤버에 대한 포인터를 수신하는 호출자 제공 변수에 대한 포인터입니다(이 멤버 자체는 포인터임). 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. I/O 작업에 MDL 필드가 없는 경우 이 매개 변수는 NULL을 받습니다.

[out] Buffer

콜백 데이터 매개 변수 구조에서 적절한 버퍼 멤버(주 함수 코드에 따라 다름)에 대한 포인터를 수신하는 호출자 제공 변수에 대한 포인터입니다(이 멤버 자체는 포인터임).

[out] Length

콜백 데이터 매개 변수 구조의 버퍼 길이 멤버에 대한 포인터를 수신하는 호출자 제공 변수에 대한 포인터입니다. 작업에 길이 필드가 없으면 이 매개 변수는 NULL을 받습니다.

[out, optional] DesiredAccess

이 유형의 I/O 작업, IoReadAccess, IoWriteAccess 또는 IoModifyAccess 중 하나에 적합한 액세스 유형을 수신하는 호출자 제공 변수에 대한 포인터입니다. IoReadAccess 는 미니필터 드라이버가 버퍼의 내용을 검사할 수 있지만 현재 위치에서 콘텐츠를 변경할 수 없음을 의미합니다. 동일한 IoWriteAccessIoModifyAccess는 미니필터 드라이버가 버퍼에 대한 읽기 및 쓰기 액세스 권한을 가지고 있음을 의미합니다.

반환 값

FltDecodeParameters는 STATUS_SUCCESS 또는 다음과 같은 적절한 NTSTATUS 값을 반환합니다.

반환 코드 설명
STATUS_INVALID_PARAMETER 콜백 데이터(FLT_CALLBACK_DATA) 구조는 버퍼 매개 변수가 없는 I/O 작업을 나타냅니다. 오류 코드입니다.

설명

FltDecodeParameters는 매개 변수 값이 아닌 I/O 작업에 대한 매개 변수에 대한 포인터를 반환하므로 호출자가 원하는 경우 매개 변수 값을 수정할 수 있습니다.

FltDecodeParameters는 IRP 기반 작업뿐만 아니라 빠른 I/O 작업에도 사용할 수 있습니다. 이러한 작업에는 버퍼 매개 변수가 없으므로 파일 시스템 필터(FSFilter) 콜백 작업에는 의미가 없습니다.

IOCTL 및 FSCTL 작업에는 사용되는 버퍼링 방법에 따라 하나 또는 두 개의 버퍼가 있을 수 있습니다. 작업에 두 개의 버퍼(및 두 개의 길이 필드)가 있는 경우 FltDecodeParametersOutputBuffer, OutputBufferLength 및/또는 OutputMdlAddress 필드를 적절하게 반환합니다.

모든 I/O 작업에 대해 네 개의 매개 변수가 모두 반환되는 것은 아닙니다. 예를 들어 IRP_MJ_READ 요청의 경우 FltDecodeParameters는 출력 매개 변수를 다음과 같이 설정합니다.

매개 변수
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
길이 &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

요구 사항

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

추가 정보

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer