次の方法で共有


PO_FX_POWER_CONTROL_CALLBACK コールバック関数 (wdm.h)

PowerControlCallback コールバック ルーチンは、電源管理フレームワーク (PoFx) によって要求される電源制御操作を実行します。

構文

PO_FX_POWER_CONTROL_CALLBACK PoFxPowerControlCallback;

NTSTATUS PoFxPowerControlCallback(
                  PVOID DeviceContext,
  [in]            LPCGUID PowerControlCode,
  [in, optional]  PVOID InBuffer,
  [in]            SIZE_T InBufferSize,
  [out, optional] PVOID OutBuffer,
  [in]            SIZE_T OutBufferSize,
  [out, optional] PSIZE_T BytesReturned
)
{...}

パラメーター

DeviceContext

[in] PowerControlCode

電源制御コードへのポインター。 このコードは、要求された操作を指定する GUID 値です。

[in, optional] InBuffer

操作の入力データを格納しているバッファーへのポインター。 このバッファー内のデータの形式は、 PowerControlCode パラメーターで指定された電源制御コードによって異なります。 InBuffer パラメーターは省略可能であり、指定した操作で入力データが必要ない場合は NULL として指定できます。

[in] InBufferSize

InBuffer パラメーターによって指される入力バッファーのサイズ (バイト単位)。 InBuffer が NULL の場合、このパラメーターは 0 です。

[out, optional] OutBuffer

コールバック ルーチンが操作から出力データを書き込むバッファーへのポインター。 このバッファー内のデータの形式は、 PowerControlCode パラメーターで指定された電源制御コードによって異なります。 OutBuffer パラメーターは省略可能であり、指定した操作で出力データが生成されない場合は NULL として指定できます。

[in] OutBufferSize

OutBuffer パラメーターが指す出力バッファーのサイズ (バイト単位)。 OutBuffer が NULL の場合、このパラメーターは 0 です。

[out, optional] BytesReturned

OutBuffer が指すバッファーに書き込まれたデータのバイト数をルーチンが書き込む位置へのポインター。 書き込まれるバイト数は 、OutBufferSize 以下である必要があります。 このパラメーターは省略可能であり、呼び出し元が出力バッファーに書き込まれたバイト数を知る必要がない場合は NULL として指定できます。

戻り値

呼び出しが成功した場合、 PowerControlCallback ルーチンはSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー コードを返します。

注釈

PoFx は、このルーチンを呼び出して、デバイス ドライバーに電源制御要求を直接送信します。 電源制御要求は、I/O 制御要求 (IOCTL) に似ています。 ただし、IOCTL とは異なり、電源制御要求はドライバーに直接送信され、デバイス スタック内の他のデバイス ドライバーによって監視されません。 PowerControlCallback 呼び出し中に、ドライバーは要求された操作を同期的に実行します。

このルーチンは省略可能です。 PowerControlCallback ルーチンを実装するために、電源制御操作をサポートしていないデバイス ドライバーは必要ありません。

デバイス ドライバーは 、PoFxPowerControl ルーチンを呼び出して、電源制御要求を PoFx に送信できます。

電源制御要求の詳細については、「 PoFxPowerControl」を参照してください。

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

たとえば、 という名前MyPowerControlCallbackPowerControlCallback コールバック ルーチンを定義するには、次のコード例に示すように、PO_FX_POWER_CONTROL_CALLBACK型を使用します。

PO_FX_POWER_CONTROL_CALLBACK MyPowerControlCallback;

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

_Use_decl_annotations_
NTSTATUS
  MyPowerControlCallback(
    PVOID Context,
    LPCGUID PowerControlCode,
    PVOID InBuffer,
    SIZE_T InBufferSize,
    PVOID OutBuffer,
    SIZE_T OutBufferSize,
    PSIZE_T BytesReturned
    )
  {
      // Function body
  }

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

要件

要件
サポートされている最小のクライアント Windows 8 以降でサポートされています。
対象プラットフォーム デスクトップ
Header wdm.h (Wudfwdm.h を含む)
IRQL IRQL <= DISPATCH_LEVELで呼び出されます。

こちらもご覧ください

PO_FX_DEVICE

PoFxPowerControl