IRP_MJ_FILE_SYSTEM_CONTROL 공용 구조체에 대한 FLT_PARAMETERS
작업에 대한 FLT_IO_PARAMETER_BLOCK 구조체의 MajorFunction 필드가 IRP_MJ_FILE_SYSTEM_CONTROL 때 사용되는 공용 구조체 구성 요소입니다.
구문
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
} VerifyVolume;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
} FileSystemControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
멤버
FileSystemControl: 다음 멤버를 포함하는 구조체입니다.
VerifyVolume: IRP_MN_VERIFY_VOLUME 작업에 사용되는 공용 구조체 구성 요소입니다.
Vpb: 확인할 볼륨의 VPB(볼륨 매개 변수 블록)에 대한 포인터입니다.
DeviceObject: 확인할 볼륨의 디바이스 개체에 대한 포인터입니다.
일반: IRP_MN_KERNEL_CALL 및 IRP_MN_USER_FS_REQUEST 작업에 대한 모든 버퍼링 메서드에 사용되는 공용 구조체 구성 요소입니다.
Common.OutputBufferLength: Neither.OutputBuffer 또는 Direct.OutputBuffer 멤버가 가리키는 버퍼의 길이(바이트) 입니다 .
Common.InputBufferLength: Neither.InputBuffer, Buffered.SystemBuffer 또는 Direct.InputSystemBuffer 멤버가 가리키는 버퍼의 길이(바이트)입니다.
Common.FsControlCode: 대상 디바이스의 파일 시스템, 파일 시스템 필터 또는 미니필터 드라이버에 전달할 FSCTL 함수 코드입니다.
IOCTL 및 FSCTL 요청에 대한 자세한 내용은 커널 모드 아키텍처 가이드의 I/O 제어 코드 사용 및 Microsoft Windows SDK 설명서의 "디바이스 입력 및 출력 제어 코드"를 참조하세요. (일부 언어 및 국가에서는 이 리소스를 사용할 수 없습니다.)
둘 다: 버퍼링 메서드가 METHOD_NEITHER 때 IRP_MN_KERNEL_CALL 및 IRP_MN_USER_FS_REQUEST 작업에 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 I/O 제어 코드 정의를 참조하세요.
둘 다.InputBuffer: 작업의 원래 요청자가 제공한 입력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWrite 및 MmProbeAndLockPages와 같은 루틴을 사용하여 try/except 블록의 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 버퍼링되지 않거나 직접 I/O 사용 및 User-Space 주소 참조에서 오류를 참조하세요.
둘 다.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWrite 및 MmProbeAndLockPages와 같은 루틴을 사용하여 try/except 블록의 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 버퍼링되지 않거나 직접 I/O 사용 및 User-Space 주소 참조에서 오류를 참조하세요. Neither.OutputBuffer 는 선택 사항이며 Neither.OutputMdlAddress에 MDL이 제공된 경우 NULL일 수 있습니다. 설명을 참조하세요.
Neither.OutputMdlAddress: Neither.OutputBuffer 멤버가 가리키는 버퍼를 설명하는 MDL(메모리 설명자 목록)의 주소입니다. 이 멤버는 선택 사항이며 Neither.OutputBuffer에 버퍼가 제공된 경우 NULL일 수 있습니다.
버퍼링됨: 버퍼링 메서드가 METHOD_BUFFERED 때 IRP_MN_KERNEL_CALL 및 IRP_MN_USER_FS_REQUEST 작업에 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 I/O 제어 코드 정의를 참조하세요.
Buffered.SystemBuffer: 작업에 대해 시스템이 할당한 버퍼의 주소입니다. METHOD_BUFFERED I/O에서 이 버퍼는 입력 및 출력 모두에 사용됩니다. 자세한 내용은 데이터 버퍼에 액세스하는 메서드를 참조하세요.
직접: 버퍼링 메서드가 METHOD_IN_DIRECT 또는 METHOD_OUT_DIRECT 경우 IRP_MN_KERNEL_CALL 및 IRP_MN_USER_FS_REQUEST 작업에 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 커널 모드 아키텍처 가이드에서 I/O 제어 코드 정의를 참조하세요.
Direct.InputSystemBuffer: 작업에 대한 입력 버퍼의 주소입니다. 이 버퍼는 커널 모드에서 안전하게 액세스할 수 있도록 운영 체제에 의해 잠깁니다. 자세한 내용은 데이터 버퍼에 액세스하는 메서드를 참조하세요.
Direct.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. 직접 I/O에서 METHOD_NEITHER I/O와 달리 운영 체제는 미니필터가 I/O 작업의 원래 요청자와 동일한 프로세스 컨텍스트에 있는 한 커널 모드에서 안전하게 액세스할 수 있도록 이 버퍼를 잠글 수 있습니다. 그렇지 않으면 MmGetSystemAddressForMdlSafe 를 호출하여 OutputMdlAddress 멤버가 가리키는 MDL에서 시스템 주소를 가져와야 합니다. 자세한 내용은 직접 I/O에서 직접 I/O 및 오류 사용을 참조 하세요.
Direct.OutputMdlAddress: Direct.OutputBuffer 멤버가 가리키는 버퍼를 설명하는 MDL(메모리 설명자 목록)의 주소입니다. 이 멤버는 필수이며 NULL일 수 없습니다.
설명
IRP_MJ_FILE_SYSTEM_CONTROL 작업에 대한 FLT_PARAMETERS 구조에는 콜백 데이터(FLT_CALLBACK_DATA) 구조로 표현되는 파일 시스템 제어 정보 작업에 대한 매개 변수가 포함됩니다. FLT_IO_PARAMETER_BLOCK 구조체에 포함되어 있습니다.
Neither.OutputBuffer와 Neither.MdlAddress 버퍼가 모두 제공되는 경우 미니필터는 MDL을 사용하는 것이 좋습니다.
미니 필터가 Neither.MdlAddress 값을 변경한 다음, 작업 후 콜백 후 필터 관리자는 현재 Neither.MdlAddress에 저장된 MDL 을 해제하고 이전 값인 Neither.MdlAddress를 복원합니다.
IRP_MJ_FILE_SYSTEM_CONTROL IRP 기반 작업입니다.
요구 사항
요구 사항 유형 | 요구 사항 |
---|---|
헤더 | Fltkernel.h ( Fltkernel.h 포함) |