IoCsqInsertIrp 함수(wdm.h)

IoCsqInsertIrp 루틴은 드라이버의 취소 안전 IRP 큐에 IRP를 삽입합니다.

구문

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

매개 변수

[in, out] Csq

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

[in, out] Irp

큐에 대기할 IRP에 대한 포인터입니다.

[out, optional] Context

IO_CSQ_IRP_CONTEXT 구조체에 대한 포인터입니다. IoCsqInsertIrp 은 삽입된 IRP에 대한 컨텍스트 정보를 사용하여 이 구조를 초기화합니다. 드라이버는 이 값을 IoCsqRemoveIrp 에 전달하여 큐에서 IRP를 삭제합니다. 드라이버가 IoCsqRemoveIrp을 사용하여 큐에서 이 IRP를 제거하지 않는 경우 컨텍스트NULL일 수 있습니다.

반환 값

없음

설명

IoCsqInsertIrp 은 큐의 디스패치 루틴을 사용하여 IRP를 삽입합니다. IoCsqInsertIrp 루틴:

  1. 큐의 CsqAcquireLock 루틴을 호출하여 큐를 잠급니다.
  2. 큐의 CsqInsertIrp 루틴을 호출하여 IRP를 삽입합니다.
  3. IRP를 보류 중으로 표시합니다.
  4. 큐의 CsqReleaseLock 루틴을 호출하여 큐의 잠금을 해제합니다.
삽입할 IRP가 이미 취소된 경우 IoCsqInsertIrp 는 IRP를 큐에 삽입하려고 시도하지 않습니다.

드라이버는 IoCsqInsertIrpEx 를 사용하여 IRP를 큐에 삽입할 수도 있습니다. IoCsqInitializeEx로 지정된 큐의 경우 IoCsqInsertIrpEx는 추가 기능을 제공합니다. 자세한 내용은 Cancel-Safe IRP 큐를 참조하세요.

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

IoCsqInsertIrp의 호출자는 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(설명 섹션 참조)
DDI 규정 준수 규칙 IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm) , RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

추가 정보

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp