다음을 통해 공유


IRP_MJ_DEVICE_CONTROL 및 IRP_MJ_INTERNAL_DEVICE_CONTROL 공용 구조체에 대한 FLT_PARAMETERS

작업에 대한 FLT_IO_PARAMETER_BLOCK 구조체의 MajorFunction 필드가 IRP_MJ_DEVICE_CONTROL또는IRP_MJ_INTERNAL_DEVICE_CONTROL 때 사용되는 공용 구조체 구성 요소입니다.

구문

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
    } Common;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
    } FastIo;
  } DeviceIoControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

멤버

  • 공통: 모든 버퍼링 메서드(둘 다, 버퍼링 및FastIo)에 사용되는 공용 구조체 구성 요소입니다.

  • OutputBufferLength: Neither.OutputBuffer, Direct.OutputBuffer 또는 FastIo.OutputBuffer 멤버가 가리키는 버퍼의 길이(바이트)입니다.

  • InputBufferLength: Neither.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer 또는 FastIo.InputBuffer 멤버가 가리키는 버퍼의 길이(바이트)입니다.

  • IoControlCode: 대상 디바이스의 디바이스 드라이버에 전달할 IOCTL 함수 코드입니다. IOCTL 요청에 대한 자세한 내용은 Microsoft Windows SDK 설명서에서 I/O 제어 코드 사용 및 "디바이스 입력 및 출력 제어 코드"를 참조하세요. (일부 언어 및 국가에서는 이 리소스를 사용할 수 없습니다.)

  • 둘 다: 버퍼링 메서드가 METHOD_NEITHER 때 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 커널 모드 아키텍처 가이드에서 I/O 제어 코드 정의를 참조하세요.

  • N.InputBuffer: 작업의 원래 요청자가 제공한 입력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWriteFltLockUserBuffer와 같은 루틴을 사용하여 try/except 블록에 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 User-Space 주소 참조에서버퍼링되지 않은 I/O 및 오류 사용을 참조하세요.

  • N.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWriteFltLockUserBuffer와 같은 루틴을 사용하여 try/except 블록에 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 커널 모드 아키텍처 가이드의 User-Space 주소 참조에서버퍼링되지 않은 I/O 및 오류 사용을 참조하세요.

  • Neither.OutputMdlAddress: Neither.OutputBuffer 멤버가 가리키는 버퍼를 설명하는 MDL(메모리 설명자 목록)의 주소입니다. 이 멤버는 선택 사항이며 NULL일 수 있습니다.

  • 버퍼링됨: 버퍼링 메서드가 METHOD_BUFFERED 때 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 I/O 제어 코드 정의를 참조하세요.

  • Buffered.SystemBuffer: 작업에 대해 시스템이 할당한 버퍼의 주소입니다. METHOD_BUFFERED I/O에서 이 버퍼는 입력 및 출력 모두에 사용됩니다. 자세한 내용은 데이터 버퍼에 액세스하는 메서드를 참조하세요.

  • 직접: 버퍼링 메서드가 METHOD_IN_DIRECT 또는 METHOD_OUT_DIRECT 때 사용되는 공용 구조체 구성 요소입니다. 버퍼링 메서드에 대한 자세한 내용은 I/O 제어 코드 정의를 참조하세요.

  • Direct.InputSystemBuffer: 작업에 대한 입력 버퍼의 주소입니다. 이 버퍼는 커널 모드에서 안전하게 액세스할 수 있도록 운영 체제에 의해 잠깁니다. 자세한 내용은 데이터 버퍼에 액세스하는 메서드를 참조하세요.

  • Direct.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. 직접 I/O에서는 METHOD_NEITHER I/O와 달리, 미니필터가 I/O 작업의 원래 요청자와 동일한 프로세스 컨텍스트에 있는 한 운영 체제는 커널 모드에서 안전하게 액세스할 수 있도록 이 버퍼를 잠깁니다. (그렇지 않으면 OutputMdlAddress 멤버가 가리키는 MDL(메모리 설명자 목록)에서 시스템 주소를 얻으려면 MmGetSystemAddressForMdlSafe를 호출해야 합니다. 자세한 내용은 Direct I/O에서 직접 I/O 및 오류 사용을 참조 하세요.

  • Direct.OutputMdlAddress: Direct.OutputBuffer 멤버가 가리키는 버퍼를 설명하는 MDL의 주소입니다. 이 멤버는 필수이며 NULL일 수 없습니다.

  • FastIo: FLT_CALLBACK_DATA 구조체가 빠른 I/O IRP_MJ_DEVICE_CONTROL 작업을 나타낼 때 사용되는 공용 구조체 구성 요소입니다.

  • FastIo.InputBuffer: 작업의 원래 요청자가 제공한 입력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWriteFltLockUserBuffer와 같은 루틴을 사용하여 try/except 블록에 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 User-Space 주소 참조의 오류를 참조하세요.

  • FastIo.OutputBuffer: 작업의 원래 요청자가 제공한 출력 버퍼의 사용자 모드 가상 주소입니다. I/O 관리자 및 필터 관리자는 이러한 주소의 유효성을 검사하지 않습니다. 사용자 공간 주소가 유효한지 확인하려면 미니필터는 ProbeForRead, ProbeForWriteFltLockUserBuffer와 같은 루틴을 사용하여 try/except 블록에 모든 버퍼 참조를 묶어야 합니다. 자세한 내용은 User-Space 주소 참조의 오류를 참조하세요.

설명

IRP_MJ_DEVICE_CONTROL 및 IRP_MJ_INTERNAL_DEVICE_CONTROL 작업에 대한 FLT_PARAMETERS 구조에는 콜백 데이터(FLT_CALLBACK_DATA) 구조로 표현되는 IRP 기반 디바이스-I/O 제어 정보 작업에 대한 매개 변수가 포함됩니다. FLT_IO_PARAMETER_BLOCK 구조체에 포함되어 있습니다.

IRP_MJ_DEVICE_CONTROL IRP 기반 작업 또는 빠른 I/O 작업일 수 있습니다.

IRP_MJ_INTERNAL_DEVICE_CONTROL IRP 기반 I/O 작업입니다.

요구 사항

요구 사항 유형 요구 사항
헤더 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

FltDeviceIoControlFile

FltLockUserBuffer

IoBuildDeviceIoControlRequest

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwDeviceIoControlFile