FltDecodeParameters 함수(fltkernel.h)

FltDecodeParameters는 I/O 작업에 대한 MDL(메모리 설명자 목록) 주소, 버퍼 포인터, 버퍼 길이 및 원하는 액세스 매개 변수에 대한 포인터를 반환합니다. 이렇게 하면 미니 필터 드라이버가 스위치 문을 사용하여 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