Table of Contents

Note

The current trend is to create games that are designed for a certain set of hardware in order to eliminate any potential issues with software errors which would be reported back to the support team of the software producers. In such cases, it is desirable to perform a QA test of various hardware devices and conclusively confirm that the game works on that platform - anything else becomes unsupported and the software refuses to start.

This article was written in order to get the game Metro 2033 to work inside a Parallels virtual machine yet the same procedure applies when you run some software that is not meant to run on your hardware. Although the emulating hardware is more than capable of running the game, the software will simply refuse to recognise the parallels display adapter. The game would launch and would immediately complain that it is running on unsupported hardware and would crash back to Windows with an error message. However, running the game natively works without a flaw.

Hardware Identifiers

Drivers identify themselves to software usually by the Vendor ID and the Device ID. Essentially, these two blobs of data tell the OS and other querying software what type of card is installed. Here are some examples of popular graphics cards:

Card Vendor ID Device ID
NVIDIA GeForce Ti 4600 4318 592
NVIDIA GeForceFX 5900 Ultra 4318 816
ATI Radeon 8500 4098 20812
ATI Radeon 9800 Pro 4098 20040

So, in order to spoof the hardware identifiers, we would need to change or add them to the display driver. The first thing to do is to go to Start→My Computer and right-click and select Manage in order to get to the device manager. We find a single display adapter named Parallels Display Adapter and even if we right-click and select Properties→Details and choose Hardware Ids we cannot change the vendor and device ID.

Since Windows does not let us edit them directly, we search the registry for Parallels Display, the name of the driver from the device manager. The place to usually look for hardware is at:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\

and we descend into the PCI folder to find the folder corresponding to the installed graphics card.

Setting Permissions

Even if we launch the registry editor with administrator privileges, we cannot modify the key unless we temporarily change the permissions. This can be achieved by right-clicking the corresponding key and selecting Permissions…, at which point we select OWNER RIGHTS and tick Full Control and hit Apply.

If you still get a permission error when trying to edit the HardwareID key, then you should go to Permissions…→Advanced→Owner and change the owner from Administrators to your current user. After that, you should be able to set the permissions as illustrated in the figure above.

Modifying the Hardware IDs

Now we can go ahead and modify the HardwareID entry in order to add a compatible card to the driver. Looking at HardwareID value data we find the following entries:

PCI\VEN_1AB8&DEV_4005&SUBSYS_04001AB8&REV_00
PCI\VEN_1AB8&DEV_4005&SUBSYS_04001AB8
PCI\VEN_1AB8&DEV_4005&CC_030000
PCI\VEN_1AB8&DEV_4005&CC_0300

Now we just add the VendorID and the DeviceID from one of the cards in the table above while keeping the same subsystem identifier. For example's sake, let us pick the first Radeon driver from the table:

Card Vendor ID Device ID
ATI Radeon 8500 4098 20812

and add it to the list. In order to create a line out of the VendorID and DeviceID we must convert them to hexadecimal. The line for the ATI Radeon 8500 will thus read:

PCI\VEN_1002&DEV_514C&SUBSYS_04001AB8&REV_00

and we add it at the top, so that we have:

PCI\VEN_1002&DEV_514C&SUBSYS_04001AB8&REV_00
PCI\VEN_1AB8&DEV_4005&SUBSYS_04001AB8&REV_00
PCI\VEN_1AB8&DEV_4005&SUBSYS_04001AB8
PCI\VEN_1AB8&DEV_4005&CC_030000
PCI\VEN_1AB8&DEV_4005&CC_0300

Now the entry that we added should show up in the device manager:

and the game will run just fine.

Considerations

It is wise to choose a Vendor and Device ID of a card that closely matches the features of your card. For example, choosing a Vendor and Device ID of a card that can use DirectX 11, when your own card can only do DirectX 8, will not pan out too well because the game will assume that your card can use DirectX 11 which it does not.

The same procedure applies very well to Intel based chipsets that can indeed run a bunch of games but are usually left out by software developers during the testing phase in favor of ATI or NVIDIA.