다음을 통해 공유


EVT_WDF_INTERRUPT_ISR 콜백 함수(wdfinterrupt.h)

[KMDF 및 UMDF에 적용]

드라이버의 EvtInterruptIsr 이벤트 콜백 함수는 하드웨어 인터럽트를 서비스합니다.

구문

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

매개 변수

[in] Interrupt

프레임워크 인터럽트 개체에 대한 핸들입니다.

[in] MessageID

디바이스가 MSI(메시지 신호 인터럽트)를 사용하는 경우 이 매개 변수는 디바이스의 하드웨어 인터럽트 메시지를 식별하는 메시지 번호입니다. 그렇지 않으면 이 값은 0입니다.

반환 값

함수가 하드웨어 인터럽트를 서비스하는 경우 EvtInterruptIsr 콜백 함수는 TRUE 를 반환해야 합니다. 그렇지 않으면 이 함수는 FALSE를 반환해야 합니다.

설명

EvtInterruptIsr 콜백 함수를 등록하려면 드라이버가 WdfInterruptCreate를 호출하기 전에 콜백 함수의 주소를 WDF_INTERRUPT_CONFIG 구조에 배치해야 합니다.

EvtInterruptIsr 콜백 함수는 하드웨어 인터럽트가 발생할 때 호출되는 프레임워크 기반 드라이버의 ISR(인터럽트 서비스 루틴)입니다.

인터럽트가 이 EvtInterruptIsr 콜백 함수 서비스인 하드웨어에서 온 것이 아닌 경우 드라이버는 FALSE를 반환해야 합니다. 인터럽트 벡터가 공유되는 경우 시스템은 다른 인터럽트 서비스 루틴을 호출합니다.

드라이버가 인터럽트 개체에 대한 수동 수준 처리를 요청하지 않은 경우 EvtInterruptIsr 콜백 함수를 호출하기 전에 프레임워크는 프로세서의 IRQL을 디바이스의 IRQL(DIRQL)로 올리고 드라이버가 인터럽트 개체의 WDF_INTERRUPT_CONFIG 구조에 지정한 스핀 잠금을 획득합니다.

EvtInterruptIsr 콜백 함수는 비교적 높은 IRQL에서 실행되므로 거의 프레임워크 개체 메서드 또는 시스템 루틴을 호출할 수 없습니다. 또한 이 콜백 함수는 페이지 가능한 코드에 액세스할 수 없습니다.

일반적으로 EvtInterruptIsr 콜백 함수는 하드웨어 인터럽트를 지우고 콜백 함수가 반환된 후 손실될 수 있는 모든 정보를 저장하고 시스템은 IRQL을 낮춥니다(IRQL을 낮추면 추가 인터럽트가 발생할 수 있기 때문). 프레임워크 기반 드라이버는 인터럽트 개체의 컨텍스트 공간에서 인터럽트 정보를 저장합니다.

드라이버는 일반적으로 낮은 IRQL에서 저장된 정보를 처리하는 EvtInterruptDpc 콜백 함수를 제공합니다. (일부 드라이버는 EvtInterruptDpc 콜백 함수 대신 하나 이상의 EvtDpcFunc 콜백 함수를 제공합니다.) 실행을 위해 EvtInterruptDpc 콜백 함수를 예약하는 방법에 대한 자세한 내용은 인터럽트 서비스를 참조하세요.

EvtInterruptIsr 콜백 함수는 EvtInterruptDpc 콜백 함수가 실행되기 전에 여러 인터럽트를 처리할 수 있어야 합니다. 따라서 드라이버는 여러 인터럽트에서 인터럽트 데이터를 저장해야 할 수 있으며 , EvtInterruptIsrEvtInterruptDpc 콜백 함수는 드라이버에서 완전히 처리된 인터럽트 데이터와 그렇지 않은 인터럽트 데이터를 결정해야 할 수 있습니다.

KMDF 버전 1.11부터 드라이버는 수동 수준 인터럽트 처리를 제공할 수 있습니다. 드라이버가 인터럽트 개체에 대해 수동 수준 처리를 요청한 경우 IRQL = PASSIVE_LEVEL 해당 인터럽트의 EvtInterruptIsr 콜백 함수를 호출하기 전에 프레임워크는 인터럽트 개체의 WDF_INTERRUPT_CONFIG 구조에서 드라이버가 구성한 수동 수준 인터럽트 잠금을 획득합니다. DIRQL에서 인터럽트 처리와 마찬가지로 드라이버의 EvtInterruptIsr 함수는 나중에 처리하기 위해 인터럽트에 대한 정보를 저장해야 합니다.

수동 수준 인터럽트 처리를 지원하는 드라이버는 EvtInterruptWorkItem 또는 EvtInterruptDpc 콜백 함수를 제공하여 저장된 정보를 처리할 수 있습니다.

프레임워크 기반 드라이버에서 인터럽트 처리에 대한 자세한 내용은 하드웨어 인터럽트 처리를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfinterrupt.h(Wdf.h 포함)
IRQL 설명 부분을 참조하십시오.

추가 정보

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt