调用微型端口驱动程序的 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 调用微型端口的 HwStorAdapterControl,ScsiQuerySupportedControlTypes HBA 初始化后,但在第一个 I/O 之前。 微型端口驱动程序在 参数 填充 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作系统编写驱动程序的要求。
例如,若要定义 HwStorAdapterControl 名为 MyHwAdapterControl 的回调例程,请使用 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 | 请参阅“备注”。 |