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 루틴:
- 큐의 CsqAcquireLock 루틴을 호출하여 큐를 잠급니다.
- 큐의 CsqInsertIrp 루틴을 호출하여 IRP를 삽입합니다.
- IRP를 보류 중으로 표시합니다.
- 큐의 CsqReleaseLock 루틴을 호출하여 큐의 잠금을 해제합니다.
드라이버는 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) |