将 PCI Express 扩展机箱附加到基于 Windows 的计算机时出现错误消息:“Code 12”或“Code 31”

本文提供了将 PCI Express 扩展机箱附加到计算机时发生的错误的解决方法。

原始 KB 数: 942959

重要

本文包含有关如何修改注册表的信息。 修改注册表之前,一定要先对其进行备份。 并且一定要知道在发生问题时如何还原注册表。 有关如何备份、还原和修改注册表的详细信息,请单击以下文章编号以查看Microsoft知识库中的文章: 322756 如何在 Windows 中备份和还原注册表

现象

假设出现了下面这种情景:

  • PCI Express 扩展机箱连接到计算机。
  • 有连接到 PCI Express 扩展机箱的设备。

在这种情况下,设备可能无法正确枚举,或者设备可能无法正确启动。 此外,在查看设备管理器中的设备属性时,可能会收到以下错误消息之一:

  • 错误 1:

    此设备找不到它可以使用的足够可用资源。 (代码 12)

  • 错误 2:

    设备无法正常工作,因为 Windows 无法加载此设备所需的驱动程序。 (代码 31)

原因

错误原因 1

由于扩展机箱中 PCI Express 桥设备的初始状态,可能会出现此问题。 默认情况下,启动或重置 PCI Express Bridge 设备时,网桥资源窗口的限制寄存器的初始值小于网桥资源窗口的基本寄存器的初始值。 此行为被解释为表明桥资源窗口已禁用的指示。 此外,不会生成 PCI Express Bridge 设备的网桥资源窗口要求。 因此,需要桥资源窗口中资源的任何 PCI Express 网桥设备都将失败枚举。 在这种情况下,将生成代码 12 错误。

错误原因 2

如果操作系统耗尽外围组件互连(PCI)总线编号,则可能会出现此问题。 通常,计算机 BIOS 为 PCI Express 桥设备配置有限的总线编号范围。 当将包含 PCI Express 复杂交换机的扩展机箱与深层设备层次结构一起添加到计算机时,操作系统将耗尽可用总线号。 因此,系统无法启动扩展机箱中的设备。

解决方法

错误 1 的解决方法

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可以解决这些问题。 您应自行承担修改注册表的风险。 若要解决此问题,请执行以下步骤:

  1. 单击“开始”,在“开始搜索”框中键入 regedit,然后在“程序”列表中单击“regedit”。

    如果系统提示输入管理员密码或进行确认,请键入密码,或单击“ 继续”。

  2. 找到以下注册表子项,然后单击它:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PnP\Pci

  3. 如果 HackFlags 注册表项不存在,请执行以下步骤:

    1. “编辑 ”菜单上,指向 “新建”,然后单击 “DWORD”(32 位)值
    2. 键入 HackFlags,然后按 Enter。
    3. “编辑 ”菜单上,单击“ 修改”。
    4. “值”数据框中,键入 400,单击区域中的十六进制,然后单击“确定”。
    5. 退出注册表编辑器。
  4. 如果存在 HackFlags 注册表项,请执行以下步骤:

    1. 右键单击 HackFlags,然后单击“ 修改”。
    2. “值”数据框中,键入 400,单击区域中的十六进制,然后单击“确定”。
    3. 退出注册表编辑器。

错误 2 的解决方法

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可以解决这些问题。 您应自行承担修改注册表的风险。 若要解决此问题,请执行以下步骤:

  1. 单击“开始”,在“开始搜索”框中键入 regedit,然后在“程序”列表中单击“regedit”。

    如果系统提示输入管理员密码或进行确认,请键入密码,或单击“ 继续”。

  2. 找到以下注册表子项,然后单击它:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PnP\Pci

  3. 如果 HackFlags 注册表项不存在,请执行以下步骤:

    1. “编辑 ”菜单上,指向 “新建”,然后单击 “DWORD”(32 位)值
    2. 键入 HackFlags,然后按 Enter。
    3. “编辑 ”菜单上,单击“ 修改”。
    4. “值”数据框中,键入 200,单击区域中的十六进制,然后单击“确定”。
    5. 退出注册表编辑器。
  4. 如果存在 HackFlags 注册表项,请执行以下步骤:

    1. 右键单击 HackFlags,然后单击“ 修改”。
    2. “值”数据框中,键入 200,单击区域中的十六进制,然后单击“确定”。
    3. 退出注册表编辑器。

同时为错误 1 和错误 2 启用解决方法

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可以解决这些问题。 您应自行承担修改注册表的风险。

  1. 单击“开始”,在“开始搜索”框中键入 regedit,然后在“程序”列表中单击“regedit”。

    如果系统提示输入管理员密码或进行确认,请键入密码,或单击“ 继续”。

  2. 找到以下注册表子项,然后单击它:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PnP\Pci

  3. 如果 HackFlags 注册表项不存在,请执行以下步骤:

    1. “编辑 ”菜单上,指向 “新建”,然后单击 “DWORD”(32 位)值
    2. 键入 HackFlags,然后按 Enter。
    3. “编辑 ”菜单上,单击“ 修改”。
    4. “值”数据框中,键入 600,单击区域中的十六进制,然后单击“确定”。
    5. 退出注册表编辑器。
  4. 如果存在 HackFlags 注册表项,请执行以下步骤:

    1. 右键单击 HackFlags,然后单击“ 修改”。
    2. “值”数据框中,键入 600,单击区域中的十六进制,然后单击“确定”。
    3. 退出注册表编辑器。

数据收集

如果需要 Microsoft 支持方面的帮助,建议按照使用 TSS 针对与部署相关的问题收集信息中所述的步骤收集信息。