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 미니 필터 드라이버는 버퍼의 내용을 검사할 수 있지만 현재 위치에서 내용을 변경할 수 없음을 의미합니다. IoWriteAccess 및 IoModifyAccess동일합니다. 이는 미니 필터 드라이버가 버퍼에 대한 읽기 및 쓰기 액세스 권한을 가지고 있음을 의미합니다.
반환 값
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 | 모든 수준 |