다음을 통해 공유


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 취소가 이미 진행 중인 경우 IoSetCancelRoutineNULL을 반환합니다.

설명

이 루틴은 현재 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)

추가 정보

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock