인터럽트 서비스(UMDF 1)
경고
UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다.
보관된 UMDF 1 샘플은 Windows 11 버전 22H2 - 2022년 5월 드라이버 샘플 업데이트에서 찾을 수 있습니다.
자세한 내용은 UMDF를 사용하여 시작 참조하세요.
인터럽트 서비스 는 다음 두 단계로 구성됩니다.
- 인터럽트 서비스 루틴에서 휘발성 정보(예: 콘텐츠 등록)를 신속하게 저장합니다.
- 작업 항목 루틴에서 저장된 휘발성 정보를 처리합니다.
디바이스가 하드웨어 인터럽트를 생성하면 프레임워크는 프레임워크 기반 드라이버가 OnInterruptIsr 콜백 함수로 구현하는 드라이버의 ISR(인터럽트 서비스 루틴)을 호출합니다.
PASSIVE_LEVEL 실행되는 OnInterruptIsr 콜백 함수는 콘텐츠를 등록하고, 데이터를 추가로 처리하기 위해 작업 항목을 큐에 대기하고, 인터럽트 줄이 공유되는 경우 다른 인터럽트의 서비스를 허용하도록 ISR에서 반환하는 등의 인터럽트 정보를 신속하게 저장해야 합니다. UMDF 드라이버의 ISR은 PASSIVE_LEVEL 실행되므로 PCI 줄 기반 인터럽트 처리는 권장되지 않습니다. 이러한 인터럽트는 일반적으로 여러 디바이스 간에 공유되며, 그 중 일부는 ISR 지연을 허용하지 않을 수 있습니다. 그러나 UMDF 드라이버에서 PCI MSI 인터럽트는 처리할 수 있습니다. 이러한 인터럽트는 에지 의미 체계를 가지며 공유되지 않습니다.
일반적으로 OnInterruptIsr 콜백 함수는 나중에 저장된 정보를 처리하도록 작업 사이트를 예약합니다. 프레임워크 기반 드라이버는 Workitem 루틴을 OnInterruptWorkItem 콜백 함수로 구현합니다.
대부분의 드라이버는 각 인터럽트 유형에 대해 단일 OnInterruptWorkItem 콜백 함수를 사용합니다. OnInterruptWorkItem 콜백 함수의 실행을 예약하려면 드라이버는 OnInterruptIsr 콜백 함수 내에서 IWDFInterrupt::QueueWorkItemForIsr를 호출해야 합니다.
드라이버가 각 디바이스에 대해 여러 프레임워크 큐 개체를 만드는 경우 각 큐에 대해 별도의 workitem 개체 및 OnWorkItem 콜백 함수를 사용하는 것이 좋습니다. OnWorkItem 콜백 함수의 실행을 예약하려면 드라이버는 먼저 드라이버의 IDriverEntry::OnDeviceAdd 콜백 함수에서 IWdfDevice3::CreateWorkItem을 호출하여 하나 이상의 작업 영역 개체를 만들어야 합니다. 그런 다음 드라이버의 OnInterruptIsr 콜백 함수는 IWDFWorkItem::Enqueue를 호출할 수 있습니다.
드라이버는 일반적으로 OnInterruptWorkItem 또는 OnWorkItem 콜백 함수에서 I/O 요청을 완료합니다.
인터럽트를 처리하는 UMDF 드라이버의 예는 Windows 8 WDK부터 사용할 수 있는 SpbAccelerometer 샘플 드라이버를 참조하세요.