次の方法で共有


GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION コールバック関数 (gpioclx.h)

CLIENT_ControllerSpecificFunction イベント コールバック関数は、特定の汎用 I/O (GPIO) コントローラーに固有の操作を実行します。

構文

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;

NTSTATUS GpioClientControllerSpecificFunction(
  [in]      PVOID Context,
  [in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}

パラメーター

[in] Context

GPIO コントローラー ドライバーの デバイス コンテキストへのポインター。

[in, out] Parameters

コントローラー固有の操作の入力バッファーと出力バッファーを含む GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS 構造体へのポインター。

戻り値

呼び出 しが 成功した場合、CLIENT_ControllerSpecificFunction関数は STATUS_SUCCESS を返します。 可能な戻り値には、次のエラー コードが含まれます。

リターン コード 説明
STATUS_NOT_SUPPORTED
GPIO コントローラーは、入力パラメーターで指定された操作をサポートしていません。
STATUS_BUFFER_TOO_SMALL
入力バッファーまたは出力バッファーのサイズが小さすぎます。

注釈

オプションとして、GPIO コントローラー ドライバーは IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 要求をサポートできます。 この種類の I/O 制御要求 (IOCTL) は、これらの操作を必要とする周辺機器ドライバーの利点のために、コントローラー固有の操作を実行します。 この IOCTL をサポートするために、GPIO コントローラー ドライバーは CLIENT_ControllerSpecificFunction 関数を実装します。

GPIO フレームワーク拡張機能 (GpioClx) では、特定のハードウェア プラットフォームの特定のニーズに対応する CLIENT_ControllerSpecificFunction 関数がサポートされています。 一般的な GPIO コントローラー ドライバーでは、この関数は実装されません。 IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION要求を使用して 1 つのプラットフォームでハードウェア固有の操作を実行する周辺機器ドライバーは、この操作をサポートしていない他のプラットフォームとの互換性が失われるリスクがあります。

通常、 CLIENT_ControllerSpecificFunction 関数は、一連の GPIO ピンに対してハードウェア固有の操作を実行するように GPIO コントローラーをプログラムします。 この操作の入力パラメーターと出力パラメーターは、GPIO コントローラー ドライバーの開発者によって定義されます。 GPIO コントローラー ドライバーによって実装される特定の操作を認識している周辺機器ドライバーのみが、これらの操作を要求できます。

GpioClx は 、IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 要求を受信すると、GPIO コントローラー ドライバーが CLIENT_ControllerSpecificFunction 関数を実装しているかどうかを確認します。 その場合、GpioClx は入出力バッファーの説明を IOCTL から GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS 構造体にコピーし、この構造体へのポインターを パラメーターとして CLIENT_ControllerSpecificFunction 関数に渡します。 GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS構造体のパラメーター値が有効な場合、関数は要求された操作を実行し、STATUS_SUCCESSを返します。

GpioClx が IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION 要求を受け取り、GPIO コントローラー ドライバーが CLIENT_ControllerSpecificFunction 関数を実装していない場合、GpioClx はエラー コード STATUS_NOT_IMPLEMENTEDを使用して IOCTL を完了します。

CLIENT_ControllerSpecificFunctionコールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数型のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、 という名前MyEvtGpioControllerSpecificFunctionのCLIENT_ControllerSpecificFunctionコールバック関数を定義するには、次のコード例に示すように、GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION関数型を使用します。

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;

次に、コールバック関数を次のように実装します。

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioControllerSpecificFunction(
    PVOID Context,
    PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
    )
{ ... }

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION関数の種類は、Gpioclx.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8 以降でサポートされています。
対象プラットフォーム デスクトップ
Header gpioclx.h
IRQL PASSIVE_LEVELで呼び出されます。

こちらもご覧ください

GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS

IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION