通用串行总线规范的修订版 2.0 规定了 USB 选择性挂起功能。 通过使用此功能,Windows操作系统可以选择性地将空闲的 USB 设备挂起。 这样,Windows 就可以有效地管理整个系统的电源要求。 有关 Windows 如何支持 USB 选择性挂起功能的详细信息,请参阅 USB 选择性挂起。 (此资源或许不提供某些语言版本,或在某些国家或地区可能不可用。)
默认情况下,Windows 禁用 USB 选择性挂起,从而提供一致的用户体验,并避免因选择性挂起而导致的恢复延迟。
支持选择性挂起的 HID 设备必须符合以下设计要求:
- 从选择性暂停恢复时,保留第一个输入、触摸、移动或按键。
- 检测到移动时从选择性暂停状态中唤醒。
- 维护无线链接(如果适用)。
- 保持对任何活动状态的 LED(如数字锁定键或大写锁定键)供电。
- 从选择性暂停中恢复,而不会有用户感知不到的延迟。
Windows 8 支持为 HID USB 设备启用选择性暂停的两种方法。 如下所示:
- Microsoft OS 描述符 [PREFERRED]:Microsoft OS 描述符的扩展属性描述符可用于编写必要的注册表项,以支持 USB HID 选择性挂起功能。
- 供应商提供的 INF:硬件制造商可以提供 INF 文件(与 HID 设备节点的 USB 硬件 ID 匹配)来安装相应的注册表项。
Microsoft建议硬件供应商和电脑制造商使用第一个选项来启用 USB HID 选择性挂起。 此选项的优点包括:
- 硬件供应商和电脑制造商无需安装额外的 INF 文件。
- 新的 Windows 8 安装中会自动填充必要的注册表设置。
- 升级到 Windows 8 时,将保留必要的注册表设置。
- 用户无法通过卸载 INF 来丢失(或禁用)选择性挂起功能。
但是,希望仍使用 INF 方法的硬件供应商和电脑制造商可以使用以下示例。 下面是一个示例 INF 文件,演示如何在 Windows 中为 HID 设备启用此 USB 功能:
; Vendor INF File for USB HID devices
;
; A sample INF for a stand-alone USB HID device that supports
; selective suspend
[Version]
Signature ="$WINDOWS NT$"
Class =HIDClass
ClassGuid ={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider =%VendorName%
DriverVer =09/19/2008,6.0.0.0
CatalogFile =VendorXYZ.cat
PnpLockdown =1
; ================= Class section =====================
[ControlFlags]
ExcludeFromSelect=*
[SourceDisksNames]
1 = %DiskName%,,,""
;*****************************************
; Install Section
;*****************************************
[Manufacturer]
%VendorName% = VendorXYZDevice,NTx86,NTamd64,NTarm
[VendorXYZDevice.NTx86]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4
[VendorXYZDevice.NTamd64]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4
[VendorXYZDevice.NTarm]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4
[VendorXYZDevice_Install.NT]
include = input.inf
needs = HID_SelSus_Inst.NT
[VendorXYZDevice_Install.NT.HW]
include = input.inf
needs = HID_SelSus_Inst.NT.HW
[VendorXYZDevice_Install.NT.Services]
include = input.inf
needs = HID_SelSus_Inst.NT.Services
[Strings]
VendorName = "Vendor XYZ"
DiskName = "Vendor XYZ Installation Disk"
VendorXYZ.DeviceDesc = "VendorXYZ Device"
地点:
INF 版本部分应设置 CLASSGUID 和 DriverVer 指令,如下所示:
CLASSGUID 指令必须为 HID 设备指定Microsoft类 GUID。 此 GUID 具有值 {745a17a0-74d3-11d0-b6fe-00a0c90f57da}。
DriverVer 指令必须具有一个值,该值的日期和版本号大于 Input.inf 中 DriverVer 指令指定的值。
VendorXYZDevice* 部分指定供应商的 HID 设备的硬件标识符(ID)。 硬件 ID 由供应商标识符(VID)和产品标识符(PID)组成。 设备的每个硬件 ID 都必须具有供应商和设备唯一的 VID/PID 值。 这可确保相同的硬件 ID 与多个名称和设置不对应
VendorXYZDevice_Install.NT 和 VendorXYZDevice_Install.NT.HW 节是 INF DDInstall 节。 在此示例中,这些部分包含 INF Include 和 Needs 指令。
Include 指令引用了系统提供的 Input.inf 文件,该文件包含用于启用供应商 HID 设备的 USB 选择性挂起功能所需的 INF 段落。
Needs 指令指示在设备安装过程中应处理 Input.inf 中的哪些节。 在这种情况下,选择HID_SelSus_Inst节,而不是选择不支持选择性挂起功能的默认HID_Inst节。
VendorXYZDevice_Install.NT.Services 部分是 INF DDInstall.HW 部分。 在此示例中,该节还包含 INF Include 和 Needs 指令的相同值。