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.
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.
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.
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.
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
.