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