diff options
Diffstat (limited to 'lib/ShadowCopy/shadow.h')
-rw-r--r-- | lib/ShadowCopy/shadow.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/ShadowCopy/shadow.h b/lib/ShadowCopy/shadow.h new file mode 100644 index 00000000..0dfd39a9 --- /dev/null +++ b/lib/ShadowCopy/shadow.h @@ -0,0 +1,93 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) * +// ************************************************************************** + +#ifndef SHADOWCOPY_H +#define SHADOWCOPY_H + +#ifdef SHADOWDLL_EXPORTS +#define SHADOWDLL_API extern "C" __declspec(dllexport) +#else +#define SHADOWDLL_API extern "C" __declspec(dllimport) +#endif + +#include <zen/build_info.h> +#include <zen/win_ver.h> + + +class IVssBackupComponents; + +namespace shadow +{ +/*-------------- + |declarations| + --------------*/ + +//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize + +typedef IVssBackupComponents* ShadowHandle; + +//volumeName must end with "\", while shadowVolName does not end with "\" +SHADOWDLL_API +bool createShadowCopy(const wchar_t* volumeName, // in + wchar_t* shadowVolName, // out + unsigned int shadowBufferLen, // in + ShadowHandle* handle, // out + wchar_t* errorMessage, // out + unsigned int errorBufferLen); // in + + +//don't forget to release the backupHandle after shadow copy is not needed anymore! +SHADOWDLL_API +void releaseShadowCopy(ShadowHandle handle); + + +//########################################################################################## + + +/*---------- + |typedefs| + ----------*/ +typedef bool (*CreateShadowCopyFct)(const wchar_t* volumeName, + wchar_t* shadowVolName, + unsigned int shadowBufferLen, + ShadowHandle* handle, + wchar_t* errorMessage, + unsigned int errorBufferLen); + +typedef void (*ReleaseShadowCopyFct)(ShadowHandle handle); + +/*-------------- + |symbol names| + --------------*/ +//(use const pointers to ensure internal linkage) +const char createShadowCopyFctName[] = "createShadowCopy"; +const char releaseShadowCopyFctName[] = "releaseShadowCopy"; + +/*--------------- + |library names| + ---------------*/ + +inline +const wchar_t* getDllName() +{ + /* + distinguish a bunch of VSS builds: we use XP and Server 2003 implementations... + VSS version and compatibility overview: http://msdn.microsoft.com/en-us/library/aa384627(VS.85).aspx + */ + return zen::winServer2003orLater() ? + (zen::is64BitBuild ? + L"Shadow_Server2003_x64.dll" : + L"Shadow_Server2003_Win32.dll") : + + (zen::is64BitBuild ? + L"Shadow_XP_x64.dll" : + L"Shadow_XP_Win32.dll"); +} +} + + + +#endif //SHADOWCOPY_H |