------Introduction------
After seeing the latest news on the expansion for WoW I had to reactivate my account.
I had managed to keep away for 18 months but the ingame water rendering quality was always one of my pet peeves with WoW.
So I just had to see the new graphics in game, resistance was futile
After spending an hour or so trying to get my addons to a workable shape again after installing the new patch I kinda gave up and just ran the game bare bones...
The new graphics surely are amazing, and I always laugh at people saying you can play WoW at any kind of computer, take a look at my specs.
With everything at max on 1600x1200 and only 2xMSAA the game slows to a crawl in Dalaran, it uses too much video memory and in general simply loads the computer too much...
The same is true for any area with many people and allot of activity, for example in a RAID...
A few months earlier I had read that people where having issues with Win2K and the new WoW 4.0 patch in Win2K.
So feeling a bit nostalgic I decided to fire up my Windows 2000 install, because I had not used it for over two years...
its harddrive had long gone to harddrive heaven so I had to transfer my backup to a new drive, and off I went. (Or so I thought).
And after only about 3 hours of troubleshooting I figured out why it hardlocked on the 12:th blue Windows loading bar each time,
even when trying to do a clean install; The BIOS USB Configuration setting "BIOS EHCI Hand-Off" needed to be enabled!
------Background------
As I had already patched the game from within Windows XP x64 I did not need to download anything to play.
So I simply tried starting the game via Wow.exe, however it gave an error message;
"The procedure entry point SetFileValidData could not be located in the dynamic link library KERNEL32.DLL"
All these files gave the same error message;
Wow.exe
Blizzard Updater.exe
Repair.exe
Launcher.exe
WoW-x.x.x.x-4.0.0.12911-Updater.exe
wow-4.0.0.1807-to-4.0.0.1987-enUS-tools-downloader.exe
wow-4.0.0.1807-to-4.0.0.1987-enUS-tools-patch.exe
Now as you may know Repair.exe is an optional file for verifying the integrity of the WoW gamefiles.
Launcher.exe is a tool that both makes sure the game is up to date, but also that no keyloggers or other
viruses specific to WoW are installed on the system trying to steal your account data...
Launcher.exe is however also optional, it is not required to start the game this way,
it will infact load quicker if you start it with Wow.exe directly instead...
The file Launcher.exe will call Blizzard Updater.exe if a patch has been downloaded by the Blizzard Downloader.exe (another file).
This file, Blizzard Downloader.exe requires another API, if you try launching Blizzard Downloader.exe you will get this error:
"The procedure entry point RegisterRawInputDevices could not be located in the dynamic link library USER32.DLL."
Note that the rest of the EXE files will be explained in the section "The Dirty Fix for subdirectories".
------The Dirty EXE Quick Fix------
Warning; To the best of my knowledge modifying the EXE files will not set off any cheat detection systems by Blizzard.
That said you modify the EXE files entirely at your own risk! Don't hold me responsible if Blizzard bans you!
And please read below for the proper fix instead which is 100% safe to do instead...
So to wrap up there are two ways to go about this, you can fix the problems in all of the EXE files.
However they are only really needed when a new patch is released.
So for example if you dualboot or have a friend that downloads and installs the patches for you on a USB disk,
then it would not really matter that these EXE files are not useable, the only one we need to fix is Wow.exe (obviously).
Now the API call it fails with, SetFileValidData seems to be an API written to enable faster writing of large files.
As you might understand this only happens when you patch the game, when playing the game no data at all is written to the harddrive.
Only a few kilobytes are written into the games settings files when you exit the game (if you changed any settings).
So it is my educated guess that this call is not necessary for Wow.exe, but only for the actual patcher EXE files.
Therefore you could make a backup of Wow.exe (for safe keeping) and then open up the original in your favourite HEX Editor, I like Hex Workshop.
Search for the API call SetFileValidData and replace it with something that will just return a value to make it happy.
For example ExitProcess, pad the rest of the string with zeroes.
I have tested this on the enGB game client version 4.0.1.13164 and it worked fine, the game played great on Win2K.
A small caveat is that if you run the Repair.exe after modifying the EXE files they will be restored to the original unmodified state.
And obviously when the game is updated with the next patch version the fix will need to be redone, since the files are overwritten...
------The Wrapper DLL Fix------
Now if you are looking for the proper fix for all the EXE files it is a little more involved, but depending on your knowledge of HEX Editors it might be much easier!
My friend OldBoy2k runs a site called "Windows 2000 Gaming; Playing XP games on Windows 2000".
He and a buddy of his, OldCigarette have been making Win2K API wrappers that make hundreds of games compatible with Win2K that otherwise would not work.
This is a way more elegant solution than simply removing the call in the EXE and hoping things works, the wrapper actually backports the unsupported call to Windows 2000!
So the game will work if you update it (unless new unsupported API calls are introduced of course) and the Repair.exe will not remove the fixes...
The way it's done is you change a setting in the Windows registry, so that when the game looks for the files (in this case) KERNEL32.DLL and USER32.DLL.
It first looks in the binaries own directory (in this case C:\Program Files\World of Warcraft).
There it will find the wrapper DLL's which will take care of the calls that are not originally supported by Windows 2000.
The calls that however are supported by Windows 2000 are not handled by the wrapper, they are sent to the systems original KERNEL32.DLL and USER32.DLL files.
These files should therefore be copied to the games binary directory aswell, and renamed to KERNEL32_ORG.DLL in the case of OldCigarettes wrapper DLL is used (OCW).
Or renamed to KERNEL2K.DLL in the case of the wrapper DLL's written by BlackWingCat (KDW) is used.
By now you are probably wondering why we are using wrappers from two different people, the reason is that they support different API's as of when this text was written.
The KDW wrapper does not actually implement RegisterRawInputDevices in its USER32.DLL yet, it simply discards it like I do in my dirty EXE fix above.
That is fine if that API is not really needed, but if it is we will have an issue...
The OCW wrapper however does implement it, but on the other hand it does not implement the other API call SetFileValidData in KERNEL32.DLL at all, so it simply won't work...
As a sidenote I tried to replace the API call RegisterRawInputDevices in Blizzard Downloader.exe in a similar way as I did for the Crysis Win2K fix.
It no longer raised any error message but when the Launcher.exe tried to invoke it simply timed out, so probably this call was necessary for its functionality...
------Download Wrapper DLL Fix------
Now that you have a little understanding of how this works I offer this WinRAR Archive for you to download, you should extract the files in your World of Warcraft binary directory.
By default this will be; C:\Program Files\World of Warcraft. You can rightclick your World of Warcraft shortcut and select properties then "Find target" if you are having trouble locating the installation directory. This is where you should extract the files.
The included file KERNEL32.DLL comes from BlackWingCat's KDW Wrapper v0.83c
The included file USER32.DLL comes from OldCigarette's OCW Wrapper v1.9
The included file ExcludeUser32dll-Kernel32dll.reg will add entries for USER32.DLL & KERNEL32.DLL to the Windows registry key ExcludeFromKnownDlls.
The included file OriginalDLLCopy.bat is written by me.
OriginalDLLCopy.bat is a simple batch file that will copy your original Windows DLL files to the games directory, and rename them to the proper names for the two different wrappers KDW and OCW.
You only need to run it once, keep in mind though that your Windows USER32.DLL & KERNEL32.DLL files should be the same version as the renamed copies in the binary directory. (This is not the wrappers files).
So if you install a Windows Update fix that updates these files you should run the batch file again to update the files for World of Warcraft aswell.
Note that since Windows 2000 now has reached its end of extended support it would be a good idea to run Windows Update and install any security updates and Service Packs before you install the wrapper, since no new updates will be coming out later anyway.
Also note that after the registry key ExcludeFromKnownDlls under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager has been modified by the included .reg file you will need to reboot for the changes to become effective.
Lastly it should be said that this registry key should not be modified using regedit.exe, but instead regedt32.exe.
Update 2010-10-22: Another file has been included; win2k_xp_kernel32.ini
It changes the input method to "DirectInput" which solved a problem with the mouse pointer lagging when closing down the Launcher.exe
------The Dirty Fix for subdirectories------
Note that the World of Warcraft Background downloader usually downloads patches to a subdirectory named "Updates".
Here it puts an installer EXE file named "WoW-x.x.x.x-4.x.x.x-Updater.exe", this file too depends on the SetFileValidData API call.
Since it is located in a subdirectory from the games own binary files where we put the wrapper this will actually fail.
Because the Wrapper only gets invoked when it is in the same directory as the executable file being launched...
The Blizzard Downloader is similar, but it downloads patches to a subdirectory named "Temp" instead.
Here it puts one or several installer EXE files named "wow-4.x.x.x-to-4.x.x.x-enUS-tools-patch.exe" and/or;
wow-4.x.x.x-to-4.x.x.x-enUS-tools-downloader.exe. These files also depend on the SetFileValidData API call.
So you will need to copy the wrapper to these directories aswell.
------The Elegant Fix for subdirectories------
You could also do this in a more elegant way, Windows 2000 support NTFS Hard Links.
So you can make a link to a file in the filesystem, and it will appear to the filesystem as a real file.
The Windows XP utility "fsutil.exe" can be used to create these links, you can copy it from any Windows XP machine.
That is if you do not trust downloading an EXE from me (In general regarding World of Warcraft you should be extremely
suspicious of downloading EXE files off the internet, that said I of course promise this file is genuine...)
------Download Elegant Fix for subdirectories------
The WinRAR Archive linked above will contain two files, fsutil.exe described above.
And CreateHardlinks.bat, the batch file that will create the NTFS hard links. (And also take care of creating the directories if they do not already exist).
Extract these two files just like you did before in the games binaries directory, I.e. "C:\Program Files\World of Warcraft" by default.
Or put fsutil.exe in C:\WINNT\System32 where it really belongs...
Then run CreateHardlinks.bat in the World of Warcraft binaries directory.
If you now go into the subdirectories "Temp" and "Updates" you should see the 4 DLL files in there, they are actually just links so they do not take up any space.

WinRAR; http://www.rarsoft.com
World of Warcraft backporting info; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=3&t=701&p=2437#p2437
The big Windows 2000 & Wrapper FAQ; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=3&t=319
Wrapper DLL-moving Questions; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=6&t=647&p=2281#p2281
After seeing the latest news on the expansion for WoW I had to reactivate my account.
I had managed to keep away for 18 months but the ingame water rendering quality was always one of my pet peeves with WoW.
So I just had to see the new graphics in game, resistance was futile
After spending an hour or so trying to get my addons to a workable shape again after installing the new patch I kinda gave up and just ran the game bare bones...
The new graphics surely are amazing, and I always laugh at people saying you can play WoW at any kind of computer, take a look at my specs.
With everything at max on 1600x1200 and only 2xMSAA the game slows to a crawl in Dalaran, it uses too much video memory and in general simply loads the computer too much...
The same is true for any area with many people and allot of activity, for example in a RAID...
A few months earlier I had read that people where having issues with Win2K and the new WoW 4.0 patch in Win2K.
So feeling a bit nostalgic I decided to fire up my Windows 2000 install, because I had not used it for over two years...
its harddrive had long gone to harddrive heaven so I had to transfer my backup to a new drive, and off I went. (Or so I thought).
And after only about 3 hours of troubleshooting I figured out why it hardlocked on the 12:th blue Windows loading bar each time,
even when trying to do a clean install; The BIOS USB Configuration setting "BIOS EHCI Hand-Off" needed to be enabled!
------Background------
As I had already patched the game from within Windows XP x64 I did not need to download anything to play.
So I simply tried starting the game via Wow.exe, however it gave an error message;
"The procedure entry point SetFileValidData could not be located in the dynamic link library KERNEL32.DLL"
All these files gave the same error message;
Wow.exe
Blizzard Updater.exe
Repair.exe
Launcher.exe
WoW-x.x.x.x-4.0.0.12911-Updater.exe
wow-4.0.0.1807-to-4.0.0.1987-enUS-tools-downloader.exe
wow-4.0.0.1807-to-4.0.0.1987-enUS-tools-patch.exe
Now as you may know Repair.exe is an optional file for verifying the integrity of the WoW gamefiles.
Launcher.exe is a tool that both makes sure the game is up to date, but also that no keyloggers or other
viruses specific to WoW are installed on the system trying to steal your account data...
Launcher.exe is however also optional, it is not required to start the game this way,
it will infact load quicker if you start it with Wow.exe directly instead...
The file Launcher.exe will call Blizzard Updater.exe if a patch has been downloaded by the Blizzard Downloader.exe (another file).
This file, Blizzard Downloader.exe requires another API, if you try launching Blizzard Downloader.exe you will get this error:
"The procedure entry point RegisterRawInputDevices could not be located in the dynamic link library USER32.DLL."
Note that the rest of the EXE files will be explained in the section "The Dirty Fix for subdirectories".
------The Dirty EXE Quick Fix------
Warning; To the best of my knowledge modifying the EXE files will not set off any cheat detection systems by Blizzard.
That said you modify the EXE files entirely at your own risk! Don't hold me responsible if Blizzard bans you!
And please read below for the proper fix instead which is 100% safe to do instead...
So to wrap up there are two ways to go about this, you can fix the problems in all of the EXE files.
However they are only really needed when a new patch is released.
So for example if you dualboot or have a friend that downloads and installs the patches for you on a USB disk,
then it would not really matter that these EXE files are not useable, the only one we need to fix is Wow.exe (obviously).
Now the API call it fails with, SetFileValidData seems to be an API written to enable faster writing of large files.
As you might understand this only happens when you patch the game, when playing the game no data at all is written to the harddrive.
Only a few kilobytes are written into the games settings files when you exit the game (if you changed any settings).
So it is my educated guess that this call is not necessary for Wow.exe, but only for the actual patcher EXE files.
Therefore you could make a backup of Wow.exe (for safe keeping) and then open up the original in your favourite HEX Editor, I like Hex Workshop.
Search for the API call SetFileValidData and replace it with something that will just return a value to make it happy.
For example ExitProcess, pad the rest of the string with zeroes.
I have tested this on the enGB game client version 4.0.1.13164 and it worked fine, the game played great on Win2K.
A small caveat is that if you run the Repair.exe after modifying the EXE files they will be restored to the original unmodified state.
And obviously when the game is updated with the next patch version the fix will need to be redone, since the files are overwritten...
------The Wrapper DLL Fix------
Now if you are looking for the proper fix for all the EXE files it is a little more involved, but depending on your knowledge of HEX Editors it might be much easier!
My friend OldBoy2k runs a site called "Windows 2000 Gaming; Playing XP games on Windows 2000".
He and a buddy of his, OldCigarette have been making Win2K API wrappers that make hundreds of games compatible with Win2K that otherwise would not work.
This is a way more elegant solution than simply removing the call in the EXE and hoping things works, the wrapper actually backports the unsupported call to Windows 2000!
So the game will work if you update it (unless new unsupported API calls are introduced of course) and the Repair.exe will not remove the fixes...
The way it's done is you change a setting in the Windows registry, so that when the game looks for the files (in this case) KERNEL32.DLL and USER32.DLL.
It first looks in the binaries own directory (in this case C:\Program Files\World of Warcraft).
There it will find the wrapper DLL's which will take care of the calls that are not originally supported by Windows 2000.
The calls that however are supported by Windows 2000 are not handled by the wrapper, they are sent to the systems original KERNEL32.DLL and USER32.DLL files.
These files should therefore be copied to the games binary directory aswell, and renamed to KERNEL32_ORG.DLL in the case of OldCigarettes wrapper DLL is used (OCW).
Or renamed to KERNEL2K.DLL in the case of the wrapper DLL's written by BlackWingCat (KDW) is used.
By now you are probably wondering why we are using wrappers from two different people, the reason is that they support different API's as of when this text was written.
The KDW wrapper does not actually implement RegisterRawInputDevices in its USER32.DLL yet, it simply discards it like I do in my dirty EXE fix above.
That is fine if that API is not really needed, but if it is we will have an issue...
The OCW wrapper however does implement it, but on the other hand it does not implement the other API call SetFileValidData in KERNEL32.DLL at all, so it simply won't work...
As a sidenote I tried to replace the API call RegisterRawInputDevices in Blizzard Downloader.exe in a similar way as I did for the Crysis Win2K fix.
It no longer raised any error message but when the Launcher.exe tried to invoke it simply timed out, so probably this call was necessary for its functionality...
------Download Wrapper DLL Fix------
Now that you have a little understanding of how this works I offer this WinRAR Archive for you to download, you should extract the files in your World of Warcraft binary directory.
By default this will be; C:\Program Files\World of Warcraft. You can rightclick your World of Warcraft shortcut and select properties then "Find target" if you are having trouble locating the installation directory. This is where you should extract the files.
The included file KERNEL32.DLL comes from BlackWingCat's KDW Wrapper v0.83c
The included file USER32.DLL comes from OldCigarette's OCW Wrapper v1.9
The included file ExcludeUser32dll-Kernel32dll.reg will add entries for USER32.DLL & KERNEL32.DLL to the Windows registry key ExcludeFromKnownDlls.
The included file OriginalDLLCopy.bat is written by me.
OriginalDLLCopy.bat is a simple batch file that will copy your original Windows DLL files to the games directory, and rename them to the proper names for the two different wrappers KDW and OCW.
You only need to run it once, keep in mind though that your Windows USER32.DLL & KERNEL32.DLL files should be the same version as the renamed copies in the binary directory. (This is not the wrappers files).
So if you install a Windows Update fix that updates these files you should run the batch file again to update the files for World of Warcraft aswell.
Note that since Windows 2000 now has reached its end of extended support it would be a good idea to run Windows Update and install any security updates and Service Packs before you install the wrapper, since no new updates will be coming out later anyway.
Also note that after the registry key ExcludeFromKnownDlls under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager has been modified by the included .reg file you will need to reboot for the changes to become effective.
Lastly it should be said that this registry key should not be modified using regedit.exe, but instead regedt32.exe.
Update 2010-10-22: Another file has been included; win2k_xp_kernel32.ini
It changes the input method to "DirectInput" which solved a problem with the mouse pointer lagging when closing down the Launcher.exe
------The Dirty Fix for subdirectories------
Note that the World of Warcraft Background downloader usually downloads patches to a subdirectory named "Updates".
Here it puts an installer EXE file named "WoW-x.x.x.x-4.x.x.x-Updater.exe", this file too depends on the SetFileValidData API call.
Since it is located in a subdirectory from the games own binary files where we put the wrapper this will actually fail.
Because the Wrapper only gets invoked when it is in the same directory as the executable file being launched...
The Blizzard Downloader is similar, but it downloads patches to a subdirectory named "Temp" instead.
Here it puts one or several installer EXE files named "wow-4.x.x.x-to-4.x.x.x-enUS-tools-patch.exe" and/or;
wow-4.x.x.x-to-4.x.x.x-enUS-tools-downloader.exe. These files also depend on the SetFileValidData API call.
So you will need to copy the wrapper to these directories aswell.
------The Elegant Fix for subdirectories------
You could also do this in a more elegant way, Windows 2000 support NTFS Hard Links.
So you can make a link to a file in the filesystem, and it will appear to the filesystem as a real file.
The Windows XP utility "fsutil.exe" can be used to create these links, you can copy it from any Windows XP machine.
That is if you do not trust downloading an EXE from me (In general regarding World of Warcraft you should be extremely
suspicious of downloading EXE files off the internet, that said I of course promise this file is genuine...)
------Download Elegant Fix for subdirectories------
The WinRAR Archive linked above will contain two files, fsutil.exe described above.
And CreateHardlinks.bat, the batch file that will create the NTFS hard links. (And also take care of creating the directories if they do not already exist).
Extract these two files just like you did before in the games binaries directory, I.e. "C:\Program Files\World of Warcraft" by default.
Or put fsutil.exe in C:\WINNT\System32 where it really belongs...
Then run CreateHardlinks.bat in the World of Warcraft binaries directory.
If you now go into the subdirectories "Temp" and "Updates" you should see the 4 DLL files in there, they are actually just links so they do not take up any space.
WinRAR; http://www.rarsoft.com
World of Warcraft backporting info; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=3&t=701&p=2437#p2437
The big Windows 2000 & Wrapper FAQ; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=3&t=319
Wrapper DLL-moving Questions; http://win2kgaming.site90.com/phpBB2/viewtopic.php?f=6&t=647&p=2281#p2281