다음을 통해 공유


인터럽트 활성화 및 비활성화

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

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

프레임워크는 드라이버의 EvtDeviceD0Entry 콜백 함수를 호출한 후, 디바이스가 작동(D0) 상태에 들어갈 때마다 드라이버의 EvtInterruptEnable, 그리고 EvtDeviceD0EntryPostInterruptsEnabled 콜백 함수를 호출합니다.

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

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

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

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