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 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | storport.h (Storport.h を含む) |
IRQL | 「解説」を参照してください。 |
関連項目
HwStorFindAdapterの
HwStorInitializeの
HwStorUnitControlの