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 オペレーティング システムのドライバーを記述するための要件になります。
たとえば、 という名前MyPowerControlCallback
の PowerControlCallback コールバック ルーチンを定義するには、次のコード例に示すように、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で呼び出されます。 |