IoCsqInsertIrp 함수(wdm.h)
아티클
04/21/2022
읽는 데 3분 걸림
이 문서의 내용
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 루틴:
큐의 CsqAcquireLock 루틴을 호출하여 큐를 잠급니다.
큐의 CsqInsertIrp 루틴을 호출하여 IRP를 삽입합니다.
IRP를 보류 중으로 표시합니다.
큐의 CsqReleaseLock 루틴을 호출하여 큐의 잠금을 해제합니다.
삽입할 IRP가 이미 취소된 경우
IoCsqInsertIrp 는 큐에 IRP를 삽입하려고 시도하지 않습니다.
드라이버는 IoCsqInsertIrpEx 를 사용하여 큐에 IRP를 삽입할 수도 있습니다. IoCsqInitializeEx 로 지정된 큐의 경우 IoCsqInsertIrpEx 는 추가 기능을 제공합니다. 자세한 내용은 취소 금고 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) , RemoveLockReleaseRead(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