다음을 통해 공유


IoCsqRemoveNextIrp 함수(wdm.h)

IoCsqRemoveNextIrp 루틴은 큐에서 일치하는 다음 IRP를 제거합니다.

통사론

PIRP IoCsqRemoveNextIrp(
  [in, out]      PIO_CSQ Csq,
  [in, optional] PVOID   PeekContext
);

매개 변수

[in, out] Csq

취소 안전 IRP 큐에 대한 드라이버의 디스패치 테이블에 대한 포인터입니다. 디스패치 테이블은 IoCsqInitialize 초기화해야 합니다.

[in, optional] PeekContext

드라이버 정의 컨텍스트 값에 대한 포인터입니다. IoCsqRemoveNextIrp 이 매개 변수를 드라이버의 CsqPeekNextIrp 루틴에 전달합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.

반환 값

이 루틴은 큐에서 일치하는 다음 IRP에 대한 포인터를 반환하거나 더 이상 사용할 수 없는 경우 NULL . 루틴은 아직 취소되지 않은 IRP만 반환합니다.

발언

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

  1. 큐의 CsqAcquireLock 루틴을 호출하여 큐를 잠급니다.
  2. 큐의 CsqPeekNextIrp 루틴을 호출하여 큐에서 일치하는 다음 IRP를 찾습니다. IoCsqRemoveNextIrpPeekContext 매개 변수의 값을 CsqPeekNextIrpPeekContext 매개 변수로 전달합니다. CsqPeekNextIrp 일치하는 다음 IRP에 대한 포인터를 반환하거나 일치하는 IRP가 없으면 NULL .
  3. CsqPeekNextIrp 반환 값이 비-NULL경우 IoCsqRemoveNextIrp 큐의 CsqRemoveIrp 루틴을 호출하여 IRP를 제거합니다.
  4. 큐의 CsqReleaseLock 루틴을 호출하여 큐의 잠금을 해제합니다.
자세한 내용은 Cancel-Safe IRP 큐참조하세요.

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

IoCsqRemoveNextIrp 호출자는 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

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp