IRP 취소

IRP가 무기한 대기 상태로 유지될 수 있는 드라이버(사용자가 이전에 제출한 I/O 요청을 취소할 수 있음)에는 사용자가 취소한 I/O 요청을 완료하려면 하나 이상의 취소 루틴이 있어야 합니다. 예를 들어 키보드, 마우스, 병렬, 직렬 및 사운드 디바이스 드라이버(또는 드라이버 위에 계층화된 드라이버)와 파일 시스템 드라이버에는 취소 루틴이 있어야 합니다.

Microsoft Windows XP 이상 운영 체제용 드라이버는 자체 취소 루틴을 구현하는 대신 취소 안전 IRP 큐를 사용할 수 있습니다.

"IRP 취소"는 시스템 무결성을 유지하면서 가능한 한 빨리 IRP를 완료하는 것을 의미합니다. IRP 완료에 대한 일반적인 논의는 IRP 완료를 참조하세요.

취소 프로세스는 시스템 또는 드라이버가 IoCancelIrp을 호출할 때 시작됩니다. 이 루틴은 아직 완전히 완료되지 않은 스레드와 연결된 각 IRP에 대해 호출됩니다. I/O 요청을 시작한 스레드가 종료되면 시스템에서 처리되지 않은 IRP를 취소합니다. 드라이버는 만든 IRP만 취소할 수 있습니다( Lower-Level 드라이버에 대한 IRP 만들기 참조).

취소된 IRP가 5분 이내에 완료되지 않으면 I/O 관리자는 IRP 시간 초과를 고려합니다. 이러한 IRP는 스레드에서 연결되지 않으며 현재 IRP를 소유하고 있는 디바이스에 대해 오류가 기록됩니다. 드라이버에서 완료하는 데 시간이 오래 걸릴 수 있는 모든 요청을 취소할 수 있는지 확인해야 합니다. 잠재적으로 긴 요청을 취소할 수 있도록 하려면 드라이버 개발자로부터 취소를 추상화하는 취소 안전 IRP 큐 또는 커널 모드 드라이버 프레임워크를 사용할 수 있습니다.

이 섹션에서는 다음 topics 제공합니다.

루틴 취소 소개

취소 루틴 등록

IRP 취소 동기화

취소 루틴 구현

IRP를 취소할 때 고려해야 할 사항