다음을 통해 공유


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 콜백 데이터 구조가 콜백 데이터 큐에 삽입될 때 STATUS_SUCCESS 반환하거나 다음과 같은 적절한 NTSTATUS 값을 반환합니다.

반환 코드 묘사
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