Saturday, August 18, 2012

The Visual Studio 2012 Migration - and XP/2003 (NT5)

I am always an early adopter, I get excited about technology. As a developer, I should perhaps be more pragmatic. When Visual Studio 2012 went RC, I switched to it. I wanted to be ready, after all. There weren't many complications, but one was a complication... the initial (soon to be redacted) lack of support for Windows XP or Windows 2003 as a build target.

Now, I have my ways to get around it, namely a utility I'm about to upload called PESetVersion. This will let me set any of the versions of a PE/PE+, though the only applicable one is the SubSystem version. By changing this, I hope to achieve compatibility with XP and Windows 2003. Now, the CRT isn't guaranteed to function right, so I guess we'll find out in extended testing. If all runs, there is a 99% chance it will be fine. EDIT: It didn't (see below), the CRT uses NT6 APIs.

I would imagine the CRT doesn't do anything not compatible with NT 5, unless it has some explicit check. My reasoning is because the developers of Visual Studio 2012 actually planned to keep XP support.

From what I hear, the marketing or some management arm nixed it from the final product. BUT, due to developer demand, this decision was redacted. Support for Windows XP and Windows 2003 will not be in the RTM though, it will come in some out-of-band update 'later this Fall'

Prior to VS2012 there was VS2010, which similarly dropped support for Windows 2000. However, you could still use an older Platform Toolset (compiler, linker, etc..) as specified in the project configuration.

Sadly, the subsystem version you specify in the linker appears to be neutered so that you can't over-ride its designation of NT 6.0. It even says '5.0' in the configuration by default, but this is entirely ignored.

This will be part of the PESuite Tools authored by Bitsum. It should be released in the next 24 hours.

UPDATE: It appears at least in some modules the CRT does import some NT6+ APIs. You therefore must use an alternate CRT or patch the existing CRT. The ability to use an older VC9 or VC10 Platform Toolset is also there, and the preferred solution at this time ;o.

No comments:

Post a Comment