다음을 통해 공유


IoCsqRemoveIrp 함수(wdm.h)

IoCsqRemoveIrp 루틴은 큐에서 특정 IRP를 제거합니다.

구문

PIRP IoCsqRemoveIrp(
  [in, out] PIO_CSQ             Csq,
  [in, out] PIO_CSQ_IRP_CONTEXT Context
);

매개 변수

[in, out] Csq

드라이버의 취소 안전 IRP 큐에 대한 IO_CSQ 구조체에 대한 포인터입니다. 이 구조체는 IoCsqInitialize 또는 IoCsqInitializeEx에 의해 초기화되어야 합니다.

[in, out] Context

제거할 IRP 를 식별하는 IO_CSQ_IRP_CONTEXT 구조체에 대한 포인터입니다. IO_CSQ_IRP_CONTEXT 구조는 IRP가 큐에 처음 삽입될 때 IoCsqInsertIrp 또는 IoCsqInsertIrpEx에 의해 초기화됩니다.

반환 값

이 루틴은 큐에서 제거된 IRP에 대한 포인터를 반환하거나 해당 IRP가 취소된 경우 NULL 을 반환합니다.

설명

IoCsqRemoveIrp 은 큐의 디스패치 루틴을 사용하여 IRP를 제거합니다. IoCsqRemoveIrp 루틴:

  1. 큐의 CsqAcquireLock 루틴을 호출하여 큐를 잠급니다.
  2. IrpContext 매개 변수를 사용하여 제거할 IRP를 확인하고 큐의 CsqRemoveIrp 루틴을 호출하여 해당 IRP를 제거합니다.
  3. 큐의 CsqReleaseLock 루틴을 호출하여 큐의 잠금을 해제합니다.
드라이버는 IoCsqRemoveNextIrp 루틴을 사용하여 특정 조건과 일치하는 IRP를 제거할 수 있습니다. 자세한 내용은 Cancel-Safe IRP 큐를 참조하세요.

IoCsqXxx 루틴은 IRP의 DriverContext[3] 멤버를 사용하여 IRP 컨텍스트 정보를 보유합니다. 이러한 루틴을 사용하여 IRP를 큐에 대기시키는 드라이버는 해당 멤버를 사용하지 않은 상태로 두어야 합니다.

IoCsqRemoveIrp의 호출자는 IRQL <= DISPATCH_LEVEL 실행 중이어야 합니다. 드라이버의 콜백 루틴은 해당 IRQL에서 올바르게 작동해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP 이상 버전의 Windows에서 사용할 수 있습니다. Windows 2000 및 Windows 98/Me에서도 작동해야 하는 드라이버는 대신 Csq.lib에 연결하여 루틴을 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL(설명 섹션 참조)

추가 정보

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveNextIrp