Starting with Windows 7, the application manifest is becoming more and more important.
In Windows Vista, you need a manifest to bypass the application virtualization. In Window 7, you need a specific application compatibility-manifest to get correct API function behaviour 😉
For example, a race condition in GetOverlappedResult is only solved, if you explicit specify in your manifest, that you want a correct behaviour of this function.
Also a bug in CreateFileEx is only solved if you specify this in your manifest.
Of course, this is in general not a bad idea. But the manifest only allows to enable all new features or nothing. There is no way to exlicit enable only one of the bugfixes.
Here is just a small document of the “Windows 7 – Application Manifests – Compatibility”.
And we need XML to accomplish this? The PE header already has fields for exactly this purpose:
Well, not _exactly_ this purpose. Much of what the manifest does is cause assertion failures in the face of poor practices. It’s entirely possible for an application to do things the right Windows 7 way and still run on downlevel OSes, which requires the PE header to continue to hold the version of the earliest compatible OS.