Windows 8부터 KMDF(커널 모드 드라이버 프레임워크) 및 UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 옵션으로 수동 수준에서 실행되도록 ISR(인터럽트 서비스 루틴)을 등록할 수 있습니다.
KMDF 및 UMDF 드라이버에 대한 수동 수준 ISR에 대한 자세한 내용은 다음 항목을 참조하세요.
주변 장치에서 GPIO(범용 I/O) 핀을 사용하여 인터럽트 요청을 프로세서에 릴레이하는 경우 Windows 인터럽트 추상화는 이 디바이스의 드라이버가 이 핀이 속한 GPIO 컨트롤러의 하드웨어별 세부 정보를 무시하도록 편리하게 합니다. 디바이스의 GPIO 릴레이 인터럽트 요청에 대한 응답으로 커널 트랩 처리기가 실행되면 필요에 따라 GPIO 하드웨어의 인터럽트를 자동으로 지우거나 마스크합니다. 또한 커널 트랩 처리기는 디바이스의 ISR을 직접 호출하거나 이 ISR이 다른 스레드에서 실행되도록 예약합니다.
GPIO 하드웨어 레지스터는 메모리 매핑되는 경우가 많으며, 이 경우 커널 트랩 처리기는 DIRQL에서 직접 액세스할 수 있습니다. 그러나 주변 디바이스의 하드웨어 레지스터는 메모리 매핑되지 않을 수 있습니다. 이 경우 주변 디바이스 드라이버는 I/O 요청을 사용하여 액세스해야 합니다. 그렇다면 I/O 요청을 사용하여 인터럽트를 무마하거나 초기 서비스를 수행하기 위해 주변 디바이스 드라이버의 ISR을 IRQL = PASSIVE_LEVEL에서 실행해야 합니다. 수동 수준 ISR은 I/O 요청을 동기적으로 보내고 필요한 경우 요청이 완료될 때까지 차단할 수 있습니다.
에지 트리거 인터럽트 요청 신호를 생성하는 주변 디바이스에 대해 수동 수준 ISR을 지원하기 위해 커널 트랩 처리기는 GPIO 핀에서 보류 중인 인터럽트를 지우고 ISR이 수동 수준 커널 스레드에서 실행되도록 예약합니다.
수준 트리거 인터럽트 요청 신호를 생성하는 주변 디바이스에 대해 수동 수준 ISR을 지원하기 위해 커널 트랩 처리기는 GPIO 핀에서 보류 중인 인터럽트를 마스크한 다음 수동 수준 커널 스레드에서 실행되도록 ISR을 예약합니다. ISR은 주변 장치에서 인터럽트 요청을 지울 책임이 있습니다. ISR이 반환되면 커널 스레드는 GPIO 핀에서 인터럽트 마스크를 해제합니다.
인터럽트는 ISR이 반환될 때까지 마스킹된 상태로 유지되므로 디바이스의 수동 수준 ISR은 인터럽트의 초기 서비스만 수행한 다음 다른 디바이스에 대해 수동 수준 ISR이 지연되지 않도록 반환해야 합니다. 일반적으로 드라이버는 ISR보다 낮은 우선 순위로 실행되는 인터럽트 작업자 스레드에 대한 추가 인터럽트 관련 처리를 연기해야 합니다.