次の方法で共有


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 メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用できます。

InterruptTranslated

システム が割 り込みに割り当てた 変換されたリソース を記述するCM_PARTIAL_RESOURCE_DESCRIPTOR構造体へのポインター。 このメンバーは、割り込みが EvtDevicePrepareHardware コールバックで作成された場合にのみ使用されます。 InterruptTranslated メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用できます。

WaitLock

WdfWaitLockCreate または NULL の以前の呼び出しによって取得されたフレームワーク待機ロック オブジェクトへのハンドル。 WaitLockNULL 以外の場合は、PassiveHandlingTRUE に設定する必要があります。 WaitLock メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用できます。 WaitLock の詳細については、「解説」を参照してください。

PassiveHandling

デバイスの IRQL (DIRQL) での割り込み処理の 場合は FALSE に設定します。 パッシブ レベルの割り込み処理の 場合は TRUE に 設定します。 PassiveHandling メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用できます。 UMDF バージョン 2.0 以降では、 WDF_INTERRUPT_CONFIG_INIT 常にこのメンバーを TRUE に設定します。

ReportInactiveOnPowerDown

このメンバーは KMDF にのみ適用されます。

ドライバーWdfDeviceInitSetPowerNotPageable を呼び出していない場合にのみ適用されるWDF_TRI_STATE型指定の値。 このメンバーには、次のいずれかの値を指定できます。

WdfTrue - デバイスが低電力 (Dx) 状態に移行すると、KMDF は割り込みを非アクティブとして報告します。 Windows 8より前のオペレーティング システムでは、フレームワークの動作は WdfFalse について説明した動作と一致します。

メモCanWakeDeviceTRUE に設定され、ReportInactiveOnPowerDownWdfTrue に設定されている場合、デバイスが低電力状態に移行しても、フレームワークは割り込みを非アクティブとして報告しません。
 

WdfFalse - デバイスが低電力 (Dx) 状態に移行すると、KMDF によって割り込みが切断されます。

WdfDefault - ARM ベースのプラットフォームでは、フレームワークの動作は WdfTrue について説明した動作と一致します。 他のプラットフォームでは、フレームワークの動作は WdfFalse について説明した動作と一致します。

ReportInactiveOnPowerDown メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用できます。 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 を 指定しないでください。 この 2 番目のケースでは、割り込みオブジェクト自体をパッシブにすることができます。
ドライバーは、この構造体の 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
Header wdfinterrupt.h (Wdf.h を含む)

こちらもご覧ください

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate