I think this is related to this question, but I would like to know if there's also a way to prevent "third party" applications from seeing hardware IDs (motherboard, hard disks, and others), or giving them fake values, on real OS, not using a virtual machine. I'm interested here in modern mainstream desktop OSes, (and especially interesting are Windows 7 and Windows 8 for x86-64).
There is a way to do this via Google's Native Client. However, executables have to be compiled for this environment explicitely.
It is difficult to achieve otherwise (i.e. without a sandbox). DEP can't do this for you, as it only prevents memory segments without the executable flag from being executed.
Just think of reading the CPUID, which is a simple instruction which you can normally not prevent from being executed.
Anyway, there may be programs to do this which utilize debugging features, but I am not aware of any.
Hardware enforced DEP may be able to prevent, unsure about returning false values