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는 IRP 기반 작업뿐만 아니라 빠른 I/O 작업에도 사용할 수 있습니다. 이러한 작업에는 버퍼 매개 변수가 없으므로 파일 시스템 필터(FSFilter) 콜백 작업에는 의미가 없습니다.
IOCTL 및 FSCTL 작업에는 사용되는 버퍼링 방법에 따라 하나 또는 두 개의 버퍼가 있을 수 있습니다. 작업에 두 개의 버퍼(및 두 개의 길이 필드)가 있는 경우 FltDecodeParameters는 OutputBuffer, 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 | 모든 수준 |