다음을 통해 공유


FltCbdqInsertIo 함수(fltkernel.h)

FltCbdqInsertIo 는 I/O 작업에 대한 콜백 데이터 구조를 필터 드라이버의 콜백 데이터 큐에 삽입합니다.

구문

NTSTATUS FLTAPI FltCbdqInsertIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]           PFLT_CALLBACK_DATA                  Cbd,
  [in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
  [in, optional] PVOID                               InsertContext
);

매개 변수

[in, out] Cbdq

호출자의 취소 안전 콜백 데이터 큐에 대한 포인터입니다. FltCbdqInitialize를 호출하여 이 큐를 초기화해야 합니다.

[in] Cbd

큐에 대기할 I/O 작업에 대한 콜백 데이터(FLT_CALLBACK_DATA) 구조체에 대한 포인터입니다. 작업은 IRP 기반 I/O 작업이어야 합니다.

[in, optional] Context

I/O 요청에 대한 불투명 컨텍스트 포인터를 수신하는 호출자 제공 변수입니다. 필터 드라이버는 이 포인터를 사용하여 FltCbdqRemoveIo를 호출하여 제거할 수 있도록 큐의 특정 항목을 식별할 수 있습니다. 필터 드라이버가 큐에서 특정 I/O 요청을 제거할 필요가 없는 경우 이 매개 변수는 NULL일 수 있습니다.

[in, optional] InsertContext

필터 드라이버의 CbdqInsertIo 콜백 루틴에 전달할 컨텍스트 포인터입니다.

반환 값

FltCbdqInsertIo 는 콜백 데이터 구조가 콜백 데이터 큐에 삽입되거나 다음과 같은 적절한 NTSTATUS 값이 삽입될 때 STATUS_SUCCESS 반환합니다.

반환 코드 설명
STATUS_FLT_CBDQ_DISABLED 큐가 현재 비활성화되어 있으므로 콜백 데이터 구조가 콜백 데이터 큐에 삽입되지 않았습니다. 큐를 다시 활성화하려면 FltCbdqEnable을 호출합니다. 오류 코드입니다.

참고

성공의 경우 FltCbdqInsertIo 는 필터의 InsertIo 콜백이 반환하는 모든 것을 반환합니다. 예를 들어 필터는 성공을 나타내기 위해 STATUS_SUCCESS 또는 STATUS_PENDING 반환할 수 있습니다. 필터가 성공을 나타내는 데 사용하는 값에 대해 자체 일관성을 유지하는 것이 중요합니다.

설명

FltCbdqInsertIo 는 지정된 콜백 데이터(FLT_CALLBACK_DATA) 구조를 필터 드라이버의 콜백 데이터 큐에 삽입합니다.

  • 콜백 데이터를 삽입하는 필터 드라이버와 취소되는 관련 IRP 사이에는 잠재적인 경합 상태가 있습니다. IRP가 이미 취소된 경우 큐의 취소 루틴을 즉시 호출하여 이를 방지할 수 있습니다.

필터 드라이버는 FltCbdqXxx 루틴을 사용하여 IRP 기반 I/O 작업에 대한 콜백 데이터 큐를 구현할 수 있습니다. 필터 드라이버는 이러한 루틴을 사용하여 큐를 취소로부터 안전하게 만들 수 있습니다. 시스템은 필터 드라이버에 대한 I/O 취소를 투명하게 처리합니다.

FltCbdqXxx 루틴은 IRP 기반 I/O 작업에만 사용할 수 있습니다. 지정된 콜백 데이터 구조가 IRP 기반 I/O 작업을 나타내는지 여부를 확인하려면 FLT_IS_IRP_OPERATION 매크로를 사용합니다.

FltCbdqInitialize를 호출하여 콜백 데이터 큐를 초기화합니다. FltCbdqInsertIo 는 큐의 디스패치 테이블에 제공된 함수를 사용하여 큐를 잠그고 콜백 데이터 구조를 큐에 삽입합니다. 삽입 작업 자체는 큐의 CbdqInsertIo 루틴에 의해 수행됩니다.

콜백 데이터 큐를 만드는 방법에 대한 자세한 내용은 FltCbdqInitialize 를 참조하세요. FltCbdqRemoveIo를 사용하여 큐에서 특정 I/O 요청을 제거하거나 FltCbdqRemoveNextIo를 사용하여 사용 가능한 다음 I/O 요청을 제거합니다.

큐가 뮤텍스 개체 또는 리소스 변수가 아닌 스핀 잠금으로 보호되는 경우 FltCbdqInsertIo의 호출자는 IRQL <= DISPATCH_LEVEL 실행할 수 있습니다. 뮤텍스 또는 리소스를 사용하는 경우 호출자는 IRQL <= APC_LEVEL 실행 중이어야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
IRQL 설명 섹션을 참조하십시오.

추가 정보

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqRemoveIo

FltCbdqRemoveNextIo