[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 の実行を同期するか、EvtInterruptWork Item 割り込みの親オブジェクトの下にある他のオブジェクトからのコールバック関数とコールバック関数を同期することを示すブール値。 詳細については、次の「解説」セクションを参照してください。
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 - KMDF は、デバイスが低電力 (Dx) 状態に遷移したときに、割り込みを非アクティブとして報告します。 Windows 8 より前のオペレーティング システムでは、フレームワークの動作は、WdfFalseについて説明したものと一致します。
WdfFalse - KMDF は、デバイスが低電力 (Dx) 状態に遷移したときに割り込みを切断します。
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 |
| ヘッダー | wdfinterrupt.h (Wdf.h を含む) |
こちらもご覧ください
WdfDeviceInitSetPowerNotPageable の
WdfDeviceInitSetPowerPageable の