다음을 통해 공유


인터럽트 사용 및 사용 안 함

드라이버가 디바이스 인터럽트를 처리하는 경우 인터럽트를 사용하도록 설정하고 사용하지 않도록 설정하는 EvtInterruptEnableEvtInterruptDisable 콜백 함수를 제공해야 합니다. 일반적으로 이러한 콜백 함수는 디바이스의 DIRQL에서 실행되며 디바이스의 인터럽트 메커니즘을 사용하도록 설정하고 사용하지 않도록 설정하는 데 필요한 모든 작업을 수행해야 합니다. 수동 수준 인터럽트에서 이러한 콜백 함수는 수동 수준 인터럽트 잠금을 유지하면서 IRQL = PASSIVE_LEVEL 실행됩니다.

드라이버가 인터럽트 사용 또는 비활성화와 관련된 추가 작업을 수행해야 하고 IRQL = DIRQL에서 이러한 추가 작업을 수행할 수 없는 경우 드라이버는 EvtDeviceD0EntryPostInterruptsEnabledEvtDeviceD0ExitPreInterruptsDisabled 콜백 함수를 제공할 수도 있습니다. 이러한 두 콜백 함수는 인터럽트 잠금이 유지되지 않은 IRQL = PASSIVE_LEVEL 실행되며 IRQL = DIRQL에서 사용할 수 없는 프레임워크 개체 메서드를 호출할 수 있습니다.

프레임워크는 프레임워크가 드라이버의 EvtDeviceD0Entry 콜백 함수를 호출한 후 디바이스가 작동(D0) 상태가 될 때마다 드라이버의 EvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabled 콜백 함수를 호출합니다.

프레임워크는 드라이버의 EvtDeviceD0ExitPreInterruptsDisabled 및 EvtInterruptDisable 콜백 함수를 호출하고, 프레임워크가 드라이버의 EvtDeviceD0Exit 콜백 함수를 호출하기 전에 디바이스가 작동 상태를 떠날 때마다 EvtInterruptDisable 콜백 함수를 호출합니다. 프레임워크가 드라이버의 콜백 함수를 호출하는 경우에 대한 자세한 내용은 PnP 및 전원 관리 시나리오를 참조하세요.

프레임워크가 드라이버의 EvtInterruptEnable 콜백 함수를 호출할 때마다 디바이스가 동일한 인터럽트 리소스를 사용한다고 가정해서는 안 됩니다. 경우에 따라 PnP 관리자는 시스템 리소스를 재배포하고 디바이스에 새 인터럽트 리소스를 할당할 수 있습니다.

드라이버는 WdfInterruptGetInfo 를 호출하여 디바이스의 인터럽트 리소스를 확인할 수 있습니다. 드라이버는 WdfInterruptGetDevice 를 호출하여 인터럽트 개체가 속한 디바이스를 확인할 수 있습니다. (몇몇 드라이버는 WdfInterruptWdmGetInterrupt를 호출할 수 있습니다.)

인터럽트를 직접 사용하도록 설정하고 사용하지 않도록 설정하려면 드라이버는 인터럽트 개체의 WdfInterruptEnableWdfInterruptDisable 메서드를 호출하여 드라이버의 EvtInterruptEnable 및 EvtInterruptDisable 이벤트 콜백 함수를 호출 할 수 있습니다. 그러나 대부분의 드라이버는 프레임워크가 적절한 시간에 EvtInterruptEnableEvtInterruptDisable 콜백 함수를 호출하도록 허용해야 합니다.