Microsoft KB Archive/942959

= Error message when you attach a PCI Express expansion chassis to a computer that is running Windows Vista or Windows Server 2008: &quot;Code 12&quot; or &quot;Code 31&quot; =

Article ID: 942959

Article Last Modified on 10/9/2007

-

APPLIES TO

 Windows Vista Service Pack 1, when used with:  Windows Vista Ultimate

 Windows Vista Enterprise

 Windows Vista Business

 Windows Vista Home Premium</li></ul>

 Windows Vista Home Basic</li></ul>

 Windows Vista Starter</li></ul> </li> Microsoft Windows Code Name “Longhorn”</li></ul>

-

<div class="notice_section">

<div class="notice_section">

Beta Information
This article discusses a beta release of a Microsoft product. The information in this article is provided as-is and is subject to change without notice.

No formal product support is available from Microsoft for this beta product. For information about how to obtain support for a beta release, see the documentation that is included with the beta product files, or check the Web location where you downloaded the release.

<div class="notice_section">

Important This article contains information about how to modify the registry. Make sure that you back up the registry before you modify it. Make sure that you know how to restore the registry if a problem occurs. For more information about how to back up, restore, and modify the registry, click the following article number to view the article in the Microsoft Knowledge Base:

322756 How to back up and restore the registry in Windows XP and Windows Vista

<div class="symptoms_section">

SYMPTOMS
Consider the following scenario:
 * A PCI Express expansion chassis is connected to a computer that is running Windows Vista Service Pack 1 (SP1) or Windows Server 2008.
 * There are devices connected to the PCI Express expansion chassis.

In this scenario, the devices may not be enumerated correctly, or they may not start correctly. Additionally, you may receive one of the following error messages when you view the device properties in Device Manager:  Error 1:

This device cannot find enough free resources that it can use. (Code 12)

</li> Error 2:

The device is not working properly because Windows cannot load the drivers required for this device. (Code 31)

</li></ul>

<div class="cause_section">

Cause of error 1
This issue may occur because of the initial state of the PCI Express bridge device in the expansion chassis. By default, when you start or reset PCI Express bridge devices, the initial values of the limit register for the bridge resource window are less than the initial values of the base register for the bridge resource window. Windows Vista and Windows Server 2008 interpret this behavior as an indication that the bridge resource window is disabled. Additionally, Windows Vista and Windows Server 2008 do not generate any bridge resource window requirements for the PCI Express bridge device. Therefore, any PCI Express bridge device that requires resources from the bridge resource window will fail enumeration. In this situation, a Code 12 error is generated.

Cause of error 2
This issue may occur if the operating system runs out of Peripheral Component Interconnect (PCI) bus numbers. Typically, the computer BIOS configures a limited bus-number range for PCI Express bridge devices. When an expansion chassis that contains a PCI Express complex switch together with a deep device hierarchy is added to the computer, the operating system runs out of available bus numbers. Therefore, the system cannot start devices in the expansion chassis.

<div class="workaround_section">

Workaround for error 1
Warning Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall the operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk. To work around this issue, follow these steps: <ol> Click Start, type regedit in the Start Search box, and then click regedit in the Programs list.

If you are prompted for an administrator password or for confirmation, type the password, or click Continue.</li> Locate the following registry subkey, and then click it:

</li> If the HackFlags registry entry is not present, follow these steps: <ol style="list-style-type: lower-alpha;"> On the Edit menu, point to New, and then click DWORD (32-bit) Value.</li> Type HackFlags, and then press ENTER.</li> On the Edit menu, click Modify.</li> In the Value data box, type 400, click Hexadecimal in the Base area, and then click OK.</li> Exit Registry Editor.</li></ol> </li> <li>If the HackFlags registry entry is present, follow these steps: <ol style="list-style-type: lower-alpha;"> <li>Right-click HackFlags, and then click Modify.</li> <li>In the Value data box, type 400, click Hexadecimal in the Base area, and then click OK.</li> <li>Exit Registry Editor.</li></ol> </li></ol>

Workaround for error 2
Warning Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall the operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk. To work around this issue, follow these steps: <ol> <li>Click Start, type regedit in the Start Search box, and then click regedit in the Programs list.

If you are prompted for an administrator password or for confirmation, type the password, or click Continue.</li> <li>Locate the following registry subkey, and then click it:

</li> <li>If the HackFlags registry entry is not present, follow these steps: <ol style="list-style-type: lower-alpha;"> <li>On the Edit menu, point to New, and then click DWORD (32-bit) Value.</li> <li>Type HackFlags, and then press ENTER.</li> <li>On the Edit menu, click Modify.</li> <li>In the Value data box, type 200, click Hexadecimal in the Base area, and then click OK.</li> <li>Exit Registry Editor.</li></ol> </li> <li>If the HackFlags registry entry is present, follow these steps: <ol style="list-style-type: lower-alpha;"> <li>Right-click HackFlags, and then click Modify.</li> <li>In the Value data box, type 200, click Hexadecimal in the Base area, and then click OK.</li> <li>Exit Registry Editor.</li></ol> </li></ol>

Enable the workarounds for error 1 and error 2 at the same time
Warning Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall the operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk. <ol> <li>Click Start, type regedit in the Start Search box, and then click regedit in the Programs list.

If you are prompted for an administrator password or for confirmation, type the password, or click Continue.</li> <li>Locate the following registry subkey, and then click it:

</li> <li>If the HackFlags registry entry is not present, follow these steps: <ol style="list-style-type: lower-alpha;"> <li>On the Edit menu, point to New, and then click DWORD (32-bit) Value.</li> <li>Type HackFlags, and then press ENTER.</li> <li>On the Edit menu, click Modify.</li> <li>In the Value data box, type 600, click Hexadecimal in the Base area, and then click OK.</li> <li>Exit Registry Editor.</li></ol> </li> <li>If the HackFlags registry entry is present, follow these steps: <ol style="list-style-type: lower-alpha;"> <li>Right-click HackFlags, and then click Modify.</li> <li>In the Value data box, type 600, click Hexadecimal in the Base area, and then click OK.</li> <li>Exit Registry Editor.</li></ol> </li></ol>

Keywords: kbtshoot kbexpertiseadvanced KB942959

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.