I have implemented a VSS requester, and it links compiles and executes on Windows Server 2008, but does not execute on Windows Server 2003. Since my requester is inside a DLL, my DLL will not load. Using the Dependency Walker, I discovered that my DLL is finding VSSAPI.DLL just fine, but it reports:
Error: At least one required implicit or forwarded dependency was not found.
Looking at my VSSAPI.DLL, it cannot find CreateVssBackupComponentsInternal, while VSSAPI.DLL exports something completely different: ?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z.
VSS must be compiled and targeted specifically for each platform and OS, including Windows XP, Windows Server 2003, and Vista/Windows Server 2008.
The first Microsoft SDK to fully support VSS requesters is v6.1, and it only supports requesters running on Vista. If you want to run on Windows Server 2003 or XP:
The following is what AlphaVSS does in its Config.h, but the VShadow sample in the VSS SDK does not: it only sets the include and library paths. I would suggest that following VShadow is more likely to succeed. But for completeness:
If targeting Windows XP:
If targeting Windows Server 2003:
If targeting Vista, don’t reference the VSS SDK. Instead reference the Windows 6.1 SDK and:
I can’t take all the credit for this, I figured this out by reading the source code of a project called AlphaVSS (see announcement), which exposes VSS to .NET code. MSDN did not seem to be very helpful. However, the VShadow tool and sample provided an example of how to compile a VSS requester.
Also note that you must recompile again for x64 or ia64 vs x86. That means in order to support all platforms, you’ll need 9 compiled versions of your executable.