IoSetCancelRoutine 함수(wdm.h)
IoSetCancelRoutine 루틴은 지정된 IRP가 취소될 경우 호출할 드라이버 제공 Cancel 루틴을 설정합니다.
구문
PDRIVER_CANCEL IoSetCancelRoutine(
[in] PIRP Irp,
[in] PDRIVER_CANCEL CancelRoutine
);
매개 변수
[in] Irp
취소 가능한 상태로 전환되거나 제거되는 IRP에 대한 포인터입니다.
[in] CancelRoutine
지정된 IRP가 취소되거나 지정된 IRP가 취소 가능한 상태에서 제거되는 경우 NULL인 경우 호출자가 제공한 Cancel 루틴의 진입점을 지정합니다. 이 루틴은 다음과 같이 선언됩니다.
VOID
(*PDRIVER_CANCEL)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
반환 값
IoSetCancelRoutine은Irp-CancelRoutine>의 이전 값을 반환합니다. 취소 루틴이 이전에 설정되지 않은 경우 또는 IRP 취소가 이미 진행 중인 경우 IoSetCancelRoutine은 NULL을 반환합니다.
설명
이 루틴은 현재 IRP에 설정된 취소 루틴을 사용하지 않도록 설정할 수 있습니다.
드라이버가 디바이스 개체에서 I/O 관리자 제공 디바이스 큐를 사용하는 경우 드라이버가 이 루틴을 호출할 때 시스템 취소 스핀 잠금을 보유해야 합니다. 드라이버는 IoReleaseCancelSpinLock 을 사용하여 취소 스핀 잠금을 해제할 때까지 IoAcquireCancelSpinLock을 호출한 후 IRQL = DISPATCH_LEVEL 실행됩니다.
드라이버가 자체 IRP 큐를 관리하는 경우 드라이버는 이 루틴을 호출할 때 취소 스핀 잠금을 유지할 필요가 없습니다. IoSetCancelRoutine 은 연동된 교환 내장 함수를 사용하여 취소 루틴의 주소를 원자성 작업으로 설정합니다. 취소 스핀 잠금의 사용량을 줄이면 드라이버 성능과 전반적인 시스템 성능이 향상될 수 있습니다.
드라이버 취소 루틴은 취소 스핀 잠금이 유지된 IRQL = DISPATCH_LEVEL 호출됩니다. 취소 루틴은 컨트롤을 반환하기 전에 취소 스핀 잠금을 해제해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 데스크톱 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL(설명 섹션 참조) |
DDI 규정 준수 규칙 | IrpCancelField(wdm), StartIoCancel(wdm) |