다음을 통해 공유


취소 루틴 등록

디바이스 드라이버에 StartIo 루틴이 있는 경우 해당 디스패치 루틴은 주소를 IoStartPacket에 대한 입력으로 제공하여 Cancel 루틴을 등록할 수 있습니다.

드라이버에 StartIo 루틴이 없는 경우 디스패치 루틴은 다른 드라이버 루틴에서 추가 처리를 위해 IRP를 큐에 대기하기 전에 다음을 수행해야 합니다.

  1. IoAcquireCancelSpinLock을 호출합니다.

  2. 입력 IRP 및 드라이버 제공 Cancel 루틴의 진입점을 사용하여 IoSetCancelRoutine을 호출합니다.

  3. IoReleaseCancelSpinLock을 호출합니다.

스핀 잠금 취소에 대한 자세한 내용은 시스템의 취소 스핀 잠금 사용을 참조하세요.

I/O 관리자에서 제공하는 디바이스 큐를 사용하는 대신 자체 IRP 큐를 관리하는 드라이버는 IoSetCancelRoutine을 호출할 때 취소 스핀 잠금을 획득할 필요가 없습니다. 그러나 이러한 드라이버는 취소 루틴이 이미 시작되었는지 여부를 확인하기 위해 IoSetCancelRoutine이 반환하는 취소 루틴 포인터를 검사 합니다.