Here is how you can get Enemy Unknown to run on XP.
This should also work with the demo version of the game, although filenames may be slightly different.
You see, the game is using some file functions that are only available on Vista or later. This is the only thing that is preventing the game from running, amusingly enough. There is an API from MS itself that will allow these functions on XP, but it has not been implemented in the game. Find that library here:
http://www.microsoft.com/en-us/download/details.aspx?id=22599
You do not need it but this is just noted so that you are aware of what is used.
You need a DLL replacement for kernel32 -- just for the game -- that implements the missing file functions. I have created this and posted it here.
http://sara.wingdreams.net/Zernel32-DLL.zip
There is a small chance that a virus scanner may pick this "ZERNEL32.DLL" up as a false positive. It is not a virus and is simply acting as a pass-through for the functions. To show this, I'm also giving you the Visual Studio projects for the DLL, which you can look through and compile for yourself. Find it here.
http://sara.wingdreams.net/Zernel32-Proj.zip
Now, making the game work with these DLLs. I will not do this step for you because posting these files would be questionable in legality. Instead, I will instruct you on how to do this step yourself.
First, find a hex editor. Any should do. You can use the freeware one XVI32.
With your hex editor in hand, first open XComGame.exe (located in steamapps\common\XCom-Enemy-Unknown\Binaries\Win32). Do a text search. In XVI32 we pick "Search" then "Find". This text search should be case-insensitive (disable "case sensitive").
Search for "kernel32.dll". Replace the K in all instances you find with a Z. Do the same with XComGame.com. I don't know if that part is necessary but it can't hurt. This will make the game open our "zernel32" passthrough dll instead of kernel32.dll.
With the changes made and the DLLs (fileextd.dll and zernel32.dll) in hand, place these files in the same folder as the game EXE (steamapps\common\XCom-Enemy-Unknown\Binaries\Win32).
With all three previous steps complete, the game should now be able to run. Give it a shot. Please let me know if this works for you.
Disclaimer: I can't promise the game will work perfectly with these changes, no warranties are given etc. and this was done without the consent of the developers. I will gladly remove this post if the developers or Valve request it. My intent is only to allow more people to play this fine game. Please note that this is not supported officially and that the developers are unlikely to give support for any issues the game has with Windows XP. Please do not buy this game on XP if you have not confirmed that the demo already works for you.