다음을 통해 공유


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, ProbeForWriteMmProbeAndLockPages와 같은 루틴을 사용하여 try/except 블록의 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 버퍼링되지 않거나 직접 I/O 사용User-Space 주소 참조에서 오류를 참조하세요.

  • 둘 다.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWriteMmProbeAndLockPages와 같은 루틴을 사용하여 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.OutputBufferNeither.MdlAddress 버퍼가 모두 제공되는 경우 미니필터는 MDL을 사용하는 것이 좋습니다.

미니 필터가 Neither.MdlAddress 값을 변경한 다음, 작업 후 콜백 후 필터 관리자는 현재 Neither.MdlAddress에 저장된 MDL 을 해제하고 이전 값인 Neither.MdlAddress를 복원합니다.

IRP_MJ_FILE_SYSTEM_CONTROL IRP 기반 작업입니다.

요구 사항

요구 사항 유형 요구 사항
헤더 Fltkernel.h ( Fltkernel.h 포함)

추가 정보

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile