HW_ADAPTER_CONTROL コールバック関数 (storport.h)
ミニポート ドライバーの HwStorAdapterControl ルーチンは、電源管理のためにホスト バス アダプター (HBA) を停止または再起動するなど、アダプターの状態または動作を制御する同期操作を実行するために呼び出されます。
構文
HW_ADAPTER_CONTROL HwAdapterControl;
SCSI_ADAPTER_CONTROL_STATUS HwAdapterControl(
[in] PVOID DeviceExtension,
[in] SCSI_ADAPTER_CONTROL_TYPE ControlType,
[in] PVOID Parameters
)
{...}
パラメーター
[in] DeviceExtension
ミニポート ドライバーの HBA ごとの記憶域へのポインター。
[in] ControlType
各 コントロールの種類 がミニポート ドライバーによってアクションを開始するアダプター制御操作を指定するSCSI_ADAPTER_CONTROL_TYPE値。 詳細については 、「SCSI_ADAPTER_CONTROL_TYPE 」を参照してください。
[in] Parameters
ControlType に関連する情報を含む構造体または値へのポインター。コントロール型が構造体を使用しない場合は NULL。 すべての構造体は呼び出し元によって割り当てられます。 詳細については 、「SCSI_ADAPTER_CONTROL_TYPE 」を参照してください。
戻り値
コントロールの種類に応じて、 HwStorAdapterControl は 次のいずれかのSCSI_ADAPTER_CONTROL_STATUS値を返します。
リターン コード | 説明 |
---|---|
ScsiAdapterControlSuccess | ミニポート ドライバーは、要求された操作が正常に完了しました。 現在、 HwStorAdapterControl は、すべてのコントロール型に対してこの値を返す必要があります。 |
ScsiAdapterControlUnsuccessful | アダプター制御操作が成功しなかった。 |
注釈
HwStorAdapterControl は必須の関数です。
Storport は、HBA が初期化された後、最初の I/O の前に ScsiQuerySupportedControlTypes コントロール型を使用してミニポートの HwStorAdapterControl を呼び出します。 ミニポート ドライバーは、パラメーターでSCSI_SUPPORTED_CONTROL_TYPE_LIST構造体をサポートする操作を入力します。 HwStorAdapterControl がこの呼び出しから戻った後、Storport ドライバーは、ミニポート ドライバーがサポートする操作に対してのみ、ミニポート ドライバーの HwStorAdapterControl コールバックを呼び出します。
Storport ドライバーで動作するミニポート ドライバーは、プラグ アンド プレイ (PnP) をサポートする必要があるため、ミニポートは ScsiStopAdapter コントロールの種類と ScsiRestartAdapter コントロールの種類をサポートする必要があります。
次の表は、現在の IRQL と、コントロールの種類が発行されたときに取得されたスピンロックの一覧です。
コントロール型 | Irql | スピン ロック |
---|---|---|
ScsiQuerySupportedControlTypes | PASSIVE_LEVEL | なし |
ScsiStopAdapter | DIRQL | InterruptLock |
ScsiRestartAdapter | DIRQL | InterruptLock |
ScsiSetBootConfig | PASSIVE_LEVEL | なし |
ScsiSetRunningConfig | PASSIVE_LEVEL | なし |
ScsiPowerSettingNotification | PASSIVE_LEVEL | なし |
ScsiAdapterPower | <= DISPATCH_LEVEL | なし |
ScsiAdapterPoFxPowerRequired | <= DISPATCH_LEVEL | なし |
ScsiAdapterPoFxPowerActive | <= DISPATCH_LEVEL | なし |
ScsiAdapterPoFxPowerSetFState | <= DISPATCH_LEVEL | なし |
ScsiAdapterPoFxPowerControl | <= DISPATCH_LEVEL | なし |
ScsiAdapterPrepareForBusReScan | PASSIVE_LEVEL | なし |
ScsiAdapterSystemPowerHints | PASSIVE_LEVEL | なし |
ScsiAdapterFilterResourceRequirements | < DISPATCH_LEVEL | なし |
ScsiAdapterPoFxMaxOperationalPower | PASSIVE_LEVEL | なし |
ScsiAdapterPoFxSetPerfState | <= DISPATCH_LEVEL | なし |
ScsiAdapterSurpriseRemoval | < DISPATCH_LEVEL | なし |
ScsiAdapterSerialNumber | < DISPATCH_LEVEL | なし |
ScsiAdapterCryptoOperation | PASSIVE_LEVEL | なし |
ScsiAdapterQueryFruId | PASSIVE_LEVEL | なし |
ScsiAdapterSetEventLogging | PASSIVE_LEVEL | なし |
HwStorAdapterControl という名前は、単なるプレースホルダーです。 このルーチンの実際のプロトタイプは、 storport.h で次のように定義されています。
typedef
SCSI_ADAPTER_CONTROL_STATUS
HW_ADAPTER_CONTROL (
_In_ PVOID DeviceExtension,
_In_ SCSI_ADAPTER_CONTROL_TYPE ControlType,
_In_ PVOID Parameters
);
例
HwStorAdapterControl コールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
たとえば、MyHwAdapterControl という名前の HwStorAdapterControl コールバック ルーチンを定義するには、次のコード例に示すように、HW_ADAPTER_CONTROL型を使用します。
HW_ADAPTER_CONTROL MyHwAdapterControl;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
SCSI_ADAPTER_CONTROL_STATUS
MyHwAdapterControl (
_In_ PVOID DeviceExtension,
_In_ SCSI_ADAPTER_CONTROL_TYPE ControlType,
_In_ PVOID Parameters
);
{
...
}
HW_ADAPTER_CONTROL関数型は、Storport.h ヘッダー ファイルで定義されています。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のHW_ADAPTER_CONTROL関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 Storport ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 |
対象プラットフォーム | ユニバーサル |
Header | storport.h (Storport.h を含む) |
IRQL | 「解説」を参照してください。 |