GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS コールバック関数 (gpioclx.h)
CLIENT_QueryEnabledInterrupts イベント コールバック関数は、汎用 I/O (GPIO) ピンのセットの状態を照会して、割り込み入力として構成され、割り込みが有効になっているピンを決定します。
構文
GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS GpioClientQueryEnabledInterrupts;
NTSTATUS GpioClientQueryEnabledInterrupts(
[in] PVOID Context,
[in] PGPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS QueryEnabledParameters
)
{...}
パラメーター
[in] Context
GPIO コントローラー ドライバーの デバイス コンテキストへのポインター。
[in] QueryEnabledParameters
呼び出し元によって割り当てられた GPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS 構造体へのポインター。 この関数を呼び出す前に、呼び出し元は、この構造体の BankId メンバーに銀行 ID を書き込み、クエリを実行する GPIO ピンのバンクを指定します。 成功した場合、関数はこの構造体の EnabledMask メンバーにマスク値を書き込み、指定されたバンクでどの割り込みが有効になっているかを示します。
戻り値
呼び出しが成功した場合、 CLIENT_QueryEnabledInterrupts 関数はSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー コードを返します。
注釈
Windows 8.1以降、GPIO コントローラー ドライバーはオプションとして、CLIENT_QueryEnabledInterruptsコールバック関数を実装できます。 実装されている場合、この関数は GPIO フレームワーク拡張機能 (GpioClx) によって呼び出され、GPIO ピンのバンクで有効になっている割り込みを決定します。
QueryEnabledParameters パラメーターは、呼び出し元によって割り当てられたGPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS構造体を指します。 呼び出し元は、この構造体の BankId メンバーの値を設定します。 CLIENT_QueryEnabledInterrupts関数は、 構造体の EnabledMask メンバーに書き込みます。
ドライバーの CLIENT_QueryEnabledInterrupts コールバック関数を登録するには、 GPIO_CLX_RegisterClient メソッドを呼び出します。 このメソッドは、入力パラメーターとして、CLIENT_QueryEnabledInterrupts関数ポインターを含むGPIO_CLIENT_REGISTRATION_PACKET構造体へのポインターを受け取ります。
CLIENT_QueryEnabledInterrupts関数は省略可能です。 ドライバーがこの関数を実装していない場合は、GPIO_CLIENT_REGISTRATION_PACKET構造体のCLIENT_QueryEnabledInterrupts メンバーを NULL に設定します。
CLIENT_QueryEnabledInterrupts関数が実装されている場合、GpioClx はこの関数を使用してドライバーの信頼性と診断を向上させます。 GpioClx は、この関数を呼び出して、GPIO コントローラーで有効になっている割り込みのセットが GpioClx が想定しているものと一致することを確認します。 通常、不一致は、割り込みストームを引き起こす可能性があるドライバーのバグを示します。 GpioClx では、この関数を使用して、チェック (デバッグ) ビルドでより広範な状態検証を行い、無料 (小売) ビルドでこの関数の呼び出しの数を減らし、パフォーマンスに影響を与えないようにします。 実装されている場合、この関数は、キャッシュされたバージョンまたはソフトウェアで管理されているバージョンの状態を読み取る代わりに、ハードウェアの状態を直接読み取る必要があります。
GpioClx は 、CLIENT_QueryControllerBasicInformation コールバック関数が GpioClx に提供するデバイス情報に応じて、PASSIVE_LEVELまたは DIRQL で CLIENT_QueryEnabledInterrupts コールバック関数を呼び出します。 CLIENT_QueryControllerBasicInformation関数は、CLIENT_CONTROLLER_BASIC_INFORMATION構造の形式でデバイス情報を提供します。 MemoryMappedController フラグ ビットがこの構造体の Flags メンバーに設定されている場合、GpioClx は DIRQL で CLIENT_QueryEnabledInterrupts 関数を呼び出します。これは、GpioClx の ISR が実行される IRQL です。 それ以外の場合、この関数は PASSIVE_LEVEL で呼び出されます。 このフラグ ビットの詳細については、「 省略可能な GPIO コールバック関数」と「必要な GPIO コールバック関数」を参照してください。
例
CLIENT_QueryEnabledInterruptsコールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数型のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、 ドライバーのコード分析、 静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。
たとえば、 という名前MyEvtGpioQueryEnabledInterrupts
のCLIENT_QueryEnabledInterruptsコールバック関数を定義するには、次のコード例に示すように、GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS関数型を使用します。
GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS MyEvtGpioQueryEnabledInterrupts;
次に、コールバック関数を次のように実装します。
_Use_decl_annotations_
NTSTATUS
MyEvtGpioQueryEnabledInterrupts(
PVOID Context,
PGPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS QueryEnabledParameters
)
{ ... }
GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS関数の種類は、Gpioclx.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のGPIO_CLIENT_QUERY_ENABLED_INTERRUPTS関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1 以降でサポートされています。 |
対象プラットフォーム | デスクトップ |
Header | gpioclx.h |
IRQL | 「解説」を参照してください。 |
こちらもご覧ください
CLIENT_CONTROLLER_BASIC_INFORMATION
CLIENT_QueryControllerBasicInformation