다음을 통해 공유


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 빠른 I/O 작업과 IRP 기반 작업에 사용할 수 있습니다. 이러한 작업에는 버퍼 매개 변수가 없기 때문에 파일 시스템 필터(FSFilter) 콜백 작업에는 의미가 없습니다.

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

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

매개 변수
mdlAddressPointer &(CallbackData->Iopb->Parameters.Read.MdlAddress)
버퍼 &(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