디바이스 드라이버에 StartIo 루틴이 있는 경우 디스패치 루틴은 주소를 IoStartPacket에 입력으로 제공하여 Cancel 루틴을 등록할 수 있습니다.
드라이버에 StartIo 루틴이 없는 경우 디스패치 루틴은 다른 드라이버 루틴에서 추가 처리를 위해 IRP를 큐에 대기하기 전에 다음을 수행해야 합니다.
IoAcquireCancelSpinLock함수를 호출합니다.
입력된 IRP와 드라이버가 제공한 취소 루틴의 진입점을 사용하여 IoSetCancelRoutine을 호출하십시오.
IoReleaseCancelSpinLock을 호출합니다.
취소 스핀 잠금에 대한 자세한 내용은 시스템의 취소 스핀 잠금 사용을 참조하세요.
I/O 관리자 제공 디바이스 큐를 사용하는 대신 자체 IRP 큐를 관리하는 드라이버는 IoSetCancelRoutine호출할 때 취소 스핀 잠금을 획득할 필요가 없습니다. 그러나 이러한 드라이버는 IoSetCancelRoutine이 반환하는 Cancel 루틴 포인터를 확인하여 취소 루틴이 이미 시작되었는지 확인해야 합니다.