WDF_INTERRUPT_CONFIG 구조체(wdfinterrupt.h)

[KMDF 및 UMDF에 적용]

WDF_INTERRUPT_CONFIG 구조에는 디바이스 인터럽트 구성 정보가 포함됩니다.

구문

typedef struct _WDF_INTERRUPT_CONFIG {
  ULONG                           Size;
  WDFSPINLOCK                     SpinLock;
  WDF_TRI_STATE                   ShareVector;
  BOOLEAN                         FloatingSave;
  BOOLEAN                         AutomaticSerialization;
  PFN_WDF_INTERRUPT_ISR           EvtInterruptIsr;
  PFN_WDF_INTERRUPT_DPC           EvtInterruptDpc;
  PFN_WDF_INTERRUPT_ENABLE        EvtInterruptEnable;
  PFN_WDF_INTERRUPT_DISABLE       EvtInterruptDisable;
  PFN_WDF_INTERRUPT_WORKITEM      EvtInterruptWorkItem;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
  WDFWAITLOCK                     WaitLock;
  BOOLEAN                         PassiveHandling;
  WDF_TRI_STATE                   ReportInactiveOnPowerDown;
  BOOLEAN                         CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;

멤버

Size

이 구조체의 크기(바이트)입니다.

SpinLock

WdfSpinLockCreate 또는 NULL에 대한 이전 호출에서 가져온 프레임워크 스핀 잠금 개체에 대한 핸들입니다. 이 매개 변수가 NULL인 경우 프레임워크는 내부 스핀 잠금 개체를 사용합니다. 프레임워크는 드라이버의 EvtInterruptSynchronize 이벤트 콜백 함수를 호출하기 전과 드라이버가 WdfInterruptAcquireLock을 호출할 때 스핀 잠금을 획득합니다. 수동 수준 인터럽트 처리의 경우 NULL로 설정합니다.

UMDF 버전 2.0부터 UMDF는 항상 수동 수준 인터럽트 처리를 사용합니다. 이 경우 이 멤버를 NULL로 설정합니다.

ShareVector

WDF_TRI_STATE 형식의 값입니다. 이 값이 WdfTrue이면 인터럽트 벡터를 공유할 수 있습니다. 값이 WdfFalse이면 인터럽트 벡터를 공유할 수 없습니다. 값이 WdfDefault이면 PnP 관리자는 버스 드라이버의 값을 사용합니다.

FloatingSave

TRUE이면 디바이스가 중단될 때 시스템에서 프로세서의 부동 소수점 및 MMX 상태를 저장한다는 것을 나타내는 부울 값입니다. FALSE이면 시스템에서 부동 소수점 및 MMX 상태를 저장하지 않습니다. 드라이버는 EvtInterruptIsr 콜백 함수가 부동 소수점 또는 MMX 레지스터를 사용해야 하는 경우에만 이 값을 TRUE로 설정해야 합니다. 부동 소수점 및 MMX 상태를 저장하는 방법에 대한 자세한 내용은 WDM 드라이버에서 부동 소수점 또는 MMX 사용을 참조하세요.

이 멤버는 UMDF 버전 2.0부터 무시됩니다.

AutomaticSerialization

TRUE인 경우 프레임워크가 인터럽트 개체의 EvtInterruptDpc 또는 EvtInterruptWorkItem 콜백 함수의 실행을 인터럽트의 부모 개체 아래에 있는 다른 개체의 콜백 함수와 동기화한다는 것을 나타내는 부울 값입니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

EvtInterruptIsr

드라이버의 EvtInterruptIsr 콜백 함수에 대한 포인터입니다. 이 포인터는 NULL일 수 없습니다.

EvtInterruptDpc

드라이버의 EvtInterruptDpc 콜백 함수 또는 NULL에 대한 포인터입니다. 드라이버는 EvtInterruptWorkItem 또는 EvtInterruptDpc를 제공할 수 있지만 둘 다 제공할 수는 없습니다.

EvtInterruptEnable

드라이버의 EvtInterruptEnable 콜백 함수 또는 NULL에 대한 포인터입니다.

EvtInterruptDisable

드라이버의 EvtInterruptDisable 콜백 함수 또는 NULL에 대한 포인터입니다.

EvtInterruptWorkItem

드라이버의 EvtInterruptWorkItem 콜백 함수 또는 NULL에 대한 포인터입니다. 드라이버는 EvtInterruptWorkItem 또는 EvtInterruptDpc를 제공할 수 있지만 둘 다 제공할 수는 없습니다. EvtInterruptWorkItem 멤버는 버전 1.11 이상 버전의 KMDF에서 사용할 수 있습니다.

InterruptRaw

시스템이 인터럽트에 할당한 원시 리소스를 설명하는 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체에 대한 포인터입니다. 이 멤버는 인터럽트가 EvtDevicePrepareHardware 콜백에 만들어진 경우에만 사용됩니다. InterruptRaw 멤버는 KMDF 버전 1.11 이상에서 사용할 수 있습니다.

InterruptTranslated

시스템이 인터럽트에서 할당한 변환된 리소스를 설명하는 CM_PARTIAL_RESOURCE_DESCRIPTOR 구조체에 대한 포인터입니다. 이 멤버는 인터럽트가 EvtDevicePrepareHardware 콜백에 만들어진 경우에만 사용됩니다. InterruptTranslated 멤버는 KMDF 버전 1.11 이상에서 사용할 수 있습니다.

WaitLock

WdfWaitLockCreate 또는 NULL에 대한 이전 호출에서 가져온 프레임워크 대기 잠금 개체에 대한 핸들입니다. WaitLockNULL이 아닌 경우 PassiveHandling을TRUE로 설정해야 합니다. WaitLock 멤버는 KMDF 버전 1.11 이상에서 사용할 수 있습니다. WaitLock에 대한 자세한 내용은 비고를 참조하세요.

PassiveHandling

디바이스의 IRQL(DIRQL)에서 인터럽트 처리를 위해 FALSE 로 설정합니다. 수동 수준 인터럽트 처리의 경우 TRUE 로 설정합니다. PassiveHandling 멤버는 KMDF 버전 1.11 이상에서 사용할 수 있습니다. UMDF 버전 2.0부터 WDF_INTERRUPT_CONFIG_INIT 항상 이 멤버를 TRUE로 설정합니다.

ReportInactiveOnPowerDown

이 멤버는 KMDF에만 적용됩니다.

드라이버가 WdfDeviceInitSetPowerNotPageable을 호출하지 않은 경우에만 적용되는 WDF_TRI_STATE 형식의 값입니다. 이 멤버는 다음 값 중 하나를 가질 수 있습니다.

WdfTrue - KMDF는 디바이스가 저전력(Dx) 상태로 전환할 때 인터럽트 비활성 상태를 보고합니다. Windows 8 이전의 운영 체제에서 프레임워크의 동작은 WdfFalse에 대해 설명한 동작과 일치합니다.

참고CanWakeDeviceTRUE 로 설정되고 ReportInactiveOnPowerDownWdfTrue로 설정된 경우 디바이스가 저전력 상태로 전환할 때 프레임워크에서 인터럽트 비활성 상태를 보고하지 않습니다.
 

WdfFalse - KMDF는 디바이스가 저전력(Dx) 상태로 전환할 때 인터럽트 연결을 끊습니다.

WdfDefault - ARM 기반 플랫폼에서 프레임워크의 동작은 WdfTrue에 대해 설명된 동작과 일치합니다. 다른 플랫폼에서는 프레임워크의 동작이 WdfFalse에 대해 설명된 동작과 일치합니다.

ReportInactiveOnPowerDown 멤버는 KMDF 버전 1.11 이상에서 사용할 수 있습니다. UMDF 버전 2.0에서는 사용할 수 없습니다.

인터럽트 비활성 보고에 대한 자세한 내용은 ISR 활성 또는 비활성 만들기를 참조하세요.

CanWakeDevice

인터럽트 가 저전력 상태에서 디바이스를 절전 모드 해제하는 데 사용되는지 여부를 나타내는 부울 값입니다. FALSE이면 인터럽트는 디바이스를 절전 모드 해제하는 데 사용되지 않습니다. TRUE이면 인터럽트는 디바이스를 절전 모드 해제하는 데 사용됩니다. CanWakeDevice 멤버는 KMDF 버전 1.13 및 UMDF 버전 2.0부터 사용할 수 있습니다.

설명

WDF_INTERRUPT_CONFIG 구조체는 WdfInterruptCreate에 대한 입력으로 사용됩니다.

WDF_INTERRUPT_CONFIG 구조를 초기화하려면 드라이버가 먼저 WDF_INTERRUPT_CONFIG_INIT 호출한 다음 WDF_INTERRUPT_CONFIG_INIT 초기화하지 않는 구조체 멤버를 입력해야 합니다.

AutomaticSerialization이 TRUE이면 다음 규칙이 적용됩니다.

  • 인터럽트의 부모 개체의 실행 수준이 WdfExecutionLevelPassive인 경우 드라이버는 EvtInterruptWorkItem을 제공할 수 있지만 이 구성 구조에서 EvtInterruptDpc를 제공하지 않아야 합니다.
  • 인터럽트의 부모 개체의 실행 수준이 WdfExecutionLevelDispatch이면 드라이버는 EvtInterruptDpc를 제공할 수 있지만 이 구성 구조에서 EvtInterruptWorkItem을 제공하지 않아야 합니다. 이 두 번째 경우 인터럽트 개체 자체는 여전히 수동일 수 있습니다.
드라이버는 이 구조체의 WaitLock 멤버를 사용하여 수동 수준 인터럽트 처리를 위한 자체 인터럽트 잠금을 제공할 수 있습니다. 드라이버가 PassiveHandling 을 TRUE로 설정하지만 WaitLock을 제공하지 않는 경우 프레임워크는 내부적으로 인터럽트 잠금을 만듭니다. 프레임워크는 다음 콜백 함수를 호출하기 전에 수동 수준 인터럽트 잠금을 획득합니다.
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

AutomaticSerialization 및 동기화 드라이버 콜백 함수에 대한 자세한 내용은 Framework-Based 드라이버용 동기화 기술을 참조하세요.

기본적으로 KMDF 함수 드라이버는 전원 페이지가 지정됩니다. 드라이버는 WdfDeviceInitSetPowerNotPageable 을 호출하여 전원이 공급되지 않는 페이지로 지정합니다.

1.11 이전의 KMDF 버전에서 프레임워크는 디바이스가 저전력(Dx) 상태로 전환할 때 항상 전원 페이저블 드라이버의 인터럽트 연결을 끊습니다. KMDF 버전 1.11부터 이 구조체의 ReportInactiveOnPowerDown 멤버를 설정하여 이 동작을 변경할 수 있습니다. 전원이 공급되지 않는 드라이버의 경우 ReportInactiveOnPowerDown에 설정된 값에 관계없이 Dx 상태 전환이 발생할 때 인터럽트는 연결된 상태로 유지됩니다.

UMDF 드라이버가 ReportInactiveOnPowerDown을 설정하는 경우 값은 무시됩니다.

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

드라이버는 이 구조체의 CanWakeDevice 멤버를 사용하여 저전력 Dx 상태에서 D0으로 디바이스를 다시 가져오는 데 사용할 수 있는 인터럽트를 만들 수 있습니다. 드라이버의 EvtInterruptIsr 콜백 루틴은 디바이스가 D0에 진입한 후 IRQL = PASSIVE_LEVEL 실행되도록 예약됩니다.

자세한 내용은 인터럽트를 사용하여 디바이스 절전 모드 해제를 참조하세요.

요구 사항

요구 사항
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfinterrupt.h(Wdf.h 포함)

추가 정보

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate