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 の以前の呼び出しによって取得されたフレームワーク待機ロック オブジェクトへのハンドル。 WaitLock が NULL 以外の場合は、PassiveHandling を TRUE に設定する必要があります。 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 について説明した動作と一致します。
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 番目のケースでは、割り込みオブジェクト自体をパッシブにすることができます。
ドライバーコールバック関数 の 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 を含む) |