FLT_IO_PARAMETER_BLOCK 구조체(fltkernel.h)

FLT_IO_PARAMETER_BLOCK 구조에는 FLT_CALLBACK_DATA 콜백 데이터 구조로 표현되는 I/O 작업에 대한 매개 변수가 포함되어 있습니다.

구문

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

멤버

IrpFlags

I/O 작업의 다양한 측면을 지정하는 플래그의 비트 마스크입니다. 이러한 플래그는 IRP 기반 작업에만 사용됩니다. 다음 표에는 플래그 값이 나와 있습니다.

의미
IRP_BUFFERED_IO 작업은 버퍼링된 I/O 작업입니다.
IRP_CLOSE_OPERATION 작업은 정리 또는 닫기 작업입니다.
IRP_DEALLOCATE_BUFFER I/O 관리자는 IRP에 대한 완료 단계에서 버퍼를 해제합니다.
IRP_INPUT_OPERATION 작업은 입력 작업입니다.
IRP_NOCACHE 작업은 캐시되지 않은 I/O 작업입니다.
IRP_PAGING_IO 작업은 페이징 I/O 작업입니다.
IRP_SYNCHRONOUS_API I/O 작업은 동기식입니다.
IRP_SYNCHRONOUS_PAGING_IO 이 작업은 동기 페이징 I/O 작업입니다.
IRP_MOUNT_COMPLETION 작업에 대한 볼륨 탑재가 완료되었습니다.
IRP_CREATE_OPERATION 작업은 만들기 또는 열기 작업입니다.
IRP_READ_OPERATION I/O 작업은 읽기용입니다.
IRP_WRITE_OPERATION I/O 작업은 쓰기용입니다.
IRP_DEFER_IO_COMPLETION 작업의 I/O 완료가 지연됩니다.
IRP_ASSOCIATED_IRP 작업은 master IRP와 연결됩니다.
IRP_OB_QUERY_NAME 작업은 비동기 이름 쿼리입니다.
IRP_HOLD_DEVICE_QUEUE 예약되어 있습니다.
IRP_UM_DRIVER_INITIATED_IO 작업은 사용자 모드 드라이버에서 시작되었습니다.

MajorFunction

I/O 작업에 대한 주요 함수 코드입니다. 주요 함수 코드는 IRP 기반 작업, 빠른 I/O 작업 및 FSFilter(파일 시스템) 콜백 작업에 사용됩니다. 추가 작업에 대한 자세한 내용은 FLT_PARAMETERS.

MinorFunction

I/O 작업에 대한 부 함수 코드입니다. 이 멤버는 선택 사항이며 NULL일 수 있습니다. MajorFunction 멤버의 값에 따라 가능한 값이 결정됩니다. 부 함수 코드에 대한 자세한 내용은 FLT_PARAMETERS.

OperationFlags

I/O 작업의 다양한 측면을 지정하는 플래그의 비트 마스크입니다. 이러한 플래그는 IRP 기반 작업에만 사용됩니다. 필터 관리자는 IRP와 연결된 IO_STACK_LOCATION 구조체의 Flags 멤버에서 이러한 플래그를 복사합니다. 다음 표에는 가장 일반적으로 사용되는 플래그 값이 나와 있습니다.

의미
SL_CASE_SENSITIVE IRP_MJ_CREATE 사용됩니다. 이 플래그를 설정하면 파일 이름 비교는 대/소문자를 구분해야 합니다.
SL_EXCLUSIVE_LOCK IRP_MJ_LOCK_CONTROL 사용됩니다. 이 플래그를 설정하면 전용 바이트 범위 잠금이 요청됩니다. 그렇지 않으면 공유 잠금이 요청됩니다.
SL_FAIL_IMMEDIATELY IRP_MJ_LOCK_CONTROL 사용됩니다. 이 플래그를 설정하면 잠금 요청을 즉시 부여할 수 없는 경우 실패해야 합니다.
SL_FORCE_ACCESS_CHECK IRP_MJ_CREATE 사용됩니다. 이 플래그를 설정하면 IRP의 RequestorMode 멤버 값이 KernelMode인 경우에도 액세스 검사를 수행해야 합니다.
SL_FORCE_DIRECT_WRITE IRP_MJ_WRITE 및 IOCTL_DISK_COPY_DATA 사용됩니다. 이 플래그가 설정된 경우 커널 모드 드라이버는 보안상의 이유로 일반적으로 쓰기가 차단되는 볼륨 영역에 쓸 수 있습니다. 이 플래그는 파일 시스템 계층과 스토리지 스택 계층 모두에서 확인됩니다. SL_FORCE_DIRECT_WRITE 플래그는 Windows Vista 이상 버전의 Windows에서 사용할 수 있습니다.
SL_INDEX_SPECIFIED IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA 사용됩니다. 이 플래그를 설정하면 인덱스가 지정된 목록의 항목에서 디렉터리, 할당량 또는 확장 특성 정보에 대한 검색이 시작됩니다.
SL_OPEN_PAGING_FILE IRP_MJ_CREATE 사용됩니다. 이 플래그가 설정되면 파일은 페이징 파일입니다.
SL_OPEN_TARGET_DIRECTORY IRP_MJ_CREATE 사용됩니다. 이 플래그를 설정하면 파일의 부모 디렉터리를 열어야 합니다.
SL_OVERRIDE_VERIFY_VOLUME IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READIRP_MJ_WRITE 사용됩니다. 이 플래그를 설정하면 볼륨의 디바이스 개체에서 DO_VERIFY_VOLUME 플래그가 설정된 경우에도 I/O 작업을 수행해야 합니다.
SL_RESTART_SCAN IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA 사용됩니다. 이 플래그를 설정하면 디렉터리 또는 목록의 첫 번째 항목에서 디렉터리, 할당량 또는 확장 특성 정보 검색이 시작됩니다. 그렇지 않으면 이전 검사에서 검사를 다시 시작해야 합니다.
SL_RETURN_SINGLE_ENTRY IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA 사용됩니다. 이 플래그가 설정된 경우 디렉터리, 할당량 또는 확장 특성 정보에 대한 검색은 발견된 첫 번째 항목만 반환해야 합니다.
SL_WATCH_TREE IRP_MJ_DIRECTORY_CONTROL 사용됩니다. 이 플래그가 설정되면 이 디렉터리의 모든 하위 디렉터리도 확인해야 합니다. 그렇지 않으면 디렉터리 자체만 감시해야 합니다.
SL_WRITE_THROUGH IRP_MJ_WRITE 사용됩니다. 이 플래그가 설정된 경우 파일 데이터는 캐시에 기록되는 것이 아니라 영구 스토리지에 기록되어야 합니다.

Reserved

시스템에서 사용하도록 예약되었습니다. 사용하지 마십시오.

TargetFileObject

이 I/O 작업의 대상인 파일 또는 디렉터리에 대한 파일 개체 포인터입니다.

TargetInstance

이 I/O 작업의 대상인 미니필터에 대한 불투명 instance 포인터입니다.

Parameters

MajorFunctionMinorFunction 멤버에 의해 지정된 I/O 작업에 대한 매개 변수를 포함하는 FLT_PARAMETERS 구조체입니다.

설명

FLT_IO_PARAMETER_BLOCK 구조체에는 콜백 데이터(FLT_CALLBACK_DATA) 구조체로 표현되는 I/O 작업에 대한 매개 변수가 포함되어 있습니다. 콜백 데이터 구조에는 Iopb 멤버의 FLT_IO_PARAMETER_BLOCK 구조체에 대한 포인터가 포함되어 있습니다.

미니필터는 콜백 데이터 구조에 대한 포인터를 다음 콜백 루틴 형식에 대한 Data 또는 CallbackData 입력 매개 변수로 받습니다.

Minifilter의 사전 운용 및 사후 콜백 루틴은 MajorFunction예약 멤버를 제외하고 I/O 작업에 대한 FLT_IO_PARAMETER_BLOCK 구조체의 내용을 수정할 수 있습니다. 이 경우 작업에 대한 콜백 데이터 구조의 IoStatus 멤버도 수정하지 않는 한 FltSetCallbackDataDirty를 호출해야 합니다. 그렇지 않으면 수정된 값이 무시됩니다.

필터 관리자가 미니필터에 대한 사전 작업 또는 사후 콜백을 실행하면 FltObjects-FileObject>TargetFileObject(CallbackData-Iopb-TargetFileObject>>)는 처음에 동일합니다. 미니필터가 TargetFileObject 또는 TargetInstance를 수정하는 경우 후속 FltSetCallbackDataDirty를 사전 작업 콜백에서 호출하면 필터 관리자가 FltObjects-FileObject> 및 FltObjects-Instance> 를 대체한 후 필터를 낮추기 위해 작업을 보냅니다.

미니필터의 사전 운용 콜백 루틴이 I/O 작업에 대한 매개 변수를 수정하는 경우 미니필터 instance 스택 아래의 모든 미니필터는 사전 작업 및 사후 콜백 루틴에서 수정된 매개 변수를 받습니다.

수정된 매개 변수는 미니필터의 자체 사후 콜백 루틴 또는 미니필터 instance 스택의 해당 미니필터 위의 미니 필터에서 수신되지 않습니다. 모든 경우에 미니필터의 사전 작업 및 사후 콜백 루틴은 동일한 입력 매개 변수 값을 받습니다.

미니 필터가 TargetInstance 멤버의 값을 변경하는 경우 새 값은 다른 볼륨의 동일한 고도에서 동일한 미니필터의 instance 대한 포인터여야 합니다. 또한 새 볼륨의 디바이스 개체에는 원래 볼륨의 디바이스 개체보다 크거나 같은 스택 크기가 있어야 합니다.

볼륨에 연결된 instance 대한 불투명 instance 포인터가 지정된 볼륨 디바이스 개체의 스택 크기를 얻으려면 다음을 수행합니다.

  • FltGetVolumeFromInstance를 호출하여 볼륨 포인터를 가져옵니다.
  • FltGetDeviceObject를 호출하여 볼륨 디바이스 개체에 대한 포인터를 가져옵니다. 이 포인터는 DeviceObject 매개 변수에 반환됩니다. 디바이스 개체의 스택 크기는 DeviceObject-StackSize>에서 찾을 수 있습니다.
  • 볼륨 포인터가 더 이상 필요하지 않으면 FltObjectDereference 를 호출하여 참조 수를 감소합니다.
  • 볼륨 디바이스 개체 포인터가 더 이상 필요하지 않으면 ObDereferenceObject 를 호출하여 참조 수를 감소합니다.

미니필터는 TargetFileObject 멤버의 값을 변경할 수 있습니다. 그러나 새 값은 TargetInstance 멤버가 지정한 instance 동일한 볼륨에 있는 파일의 파일 개체에 대한 포인터여야 합니다.

미니필터는 MajorFunction 멤버의 값을 안전하게 변경할 수 없습니다. 대신 새 I/O 작업을 시작해야 합니다.

미니필터는 FltReadFile 과 같은 지원 루틴을 호출하거나 FltAllocateCallbackData 를 호출하여 콜백 데이터 구조를 할당하여 I/O 작업을 시작할 수 있습니다. FLT_IO_PARAMETER_BLOCK 구조에서 I/O 매개 변수를 초기화하고 콜백 데이터 구조를 FltPerformSynchronousIo 또는 FltPerformAsynchronousIo에 전달합니다.

참고

I/O 작업을 시작할 때 가능한 경우 지원 루틴을 사용합니다. 미니필터는 특정 I/O 작업에 대한 지원 함수가 없는 경우에만 자체 콜백 데이터를 할당해야 합니다.

요구 사항

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

추가 정보

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_DIRECTORY_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_LOCK_CONTROL

IRP_MJ_PNP

IRP_MJ_QUERY_EA

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_QUOTA

IRP_MJ_QUERY_SECURITY

IRP_MJ_QUERY_VOLUME_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_EA

IRP_MJ_SET_INFORMATION

IRP_MJ_SET_QUOTA

IRP_MJ_SET_SECURITY

IRP_MJ_SET_VOLUME_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_WRITE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK