2 * Windows APIs that are different for each system.
3 * We use pointers to the entry points so that a
4 * single binary will run on all Windows systems.
9 Copyright (C) 2000-2005 Kern Sibbald
11 This program is free software; you can redistribute it and/or
12 modify it under the terms of the GNU General Public License as
13 published by the Free Software Foundation; either version 2 of
14 the License, or (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 General Public License for more details.
21 You should have received a copy of the GNU General Public
22 License along with this program; if not, write to the Free
23 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
30 #if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
38 // init with win9x, but maybe set to NT in InitWinAPI
39 DWORD g_platform_id = VER_PLATFORM_WIN32_WINDOWS;
40 /* preset VSSClient to NULL */
41 VSSClient* g_pVSSClient = NULL;
46 t_OpenProcessToken p_OpenProcessToken = NULL;
47 t_AdjustTokenPrivileges p_AdjustTokenPrivileges = NULL;
48 t_LookupPrivilegeValue p_LookupPrivilegeValue = NULL;
50 t_SetProcessShutdownParameters p_SetProcessShutdownParameters = NULL;
52 t_CreateFileA p_CreateFileA = NULL;
53 t_CreateFileW p_CreateFileW = NULL;
55 t_wunlink p_wunlink = NULL;
56 t_wmkdir p_wmkdir = NULL;
57 t_wopen p_wopen = NULL;
59 t_GetFileAttributesA p_GetFileAttributesA = NULL;
60 t_GetFileAttributesW p_GetFileAttributesW = NULL;
62 t_GetFileAttributesExA p_GetFileAttributesExA = NULL;
63 t_GetFileAttributesExW p_GetFileAttributesExW = NULL;
65 t_SetFileAttributesA p_SetFileAttributesA = NULL;
66 t_SetFileAttributesW p_SetFileAttributesW = NULL;
67 t_BackupRead p_BackupRead = NULL;
68 t_BackupWrite p_BackupWrite = NULL;
69 t_WideCharToMultiByte p_WideCharToMultiByte = NULL;
70 t_MultiByteToWideChar p_MultiByteToWideChar = NULL;
72 t_FindFirstFileA p_FindFirstFileA = NULL;
73 t_FindFirstFileW p_FindFirstFileW = NULL;
75 t_FindNextFileA p_FindNextFileA = NULL;
76 t_FindNextFileW p_FindNextFileW = NULL;
78 t_SetCurrentDirectoryA p_SetCurrentDirectoryA = NULL;
79 t_SetCurrentDirectoryW p_SetCurrentDirectoryW = NULL;
81 t_GetCurrentDirectoryA p_GetCurrentDirectoryA = NULL;
82 t_GetCurrentDirectoryW p_GetCurrentDirectoryW = NULL;
89 delete (g_pVSSClient);
96 HMODULE hLib = LoadLibraryA("KERNEL32.DLL");
98 /* create file calls */
99 p_CreateFileA = (t_CreateFileA)
100 GetProcAddress(hLib, "CreateFileA");
101 p_CreateFileW = (t_CreateFileW)
102 GetProcAddress(hLib, "CreateFileW");
104 /* attribute calls */
105 p_GetFileAttributesA = (t_GetFileAttributesA)
106 GetProcAddress(hLib, "GetFileAttributesA");
107 p_GetFileAttributesW = (t_GetFileAttributesW)
108 GetProcAddress(hLib, "GetFileAttributesW");
109 p_GetFileAttributesExA = (t_GetFileAttributesExA)
110 GetProcAddress(hLib, "GetFileAttributesExA");
111 p_GetFileAttributesExW = (t_GetFileAttributesExW)
112 GetProcAddress(hLib, "GetFileAttributesExW");
113 p_SetFileAttributesA = (t_SetFileAttributesA)
114 GetProcAddress(hLib, "SetFileAttributesA");
115 p_SetFileAttributesW = (t_SetFileAttributesW)
116 GetProcAddress(hLib, "SetFileAttributesW");
118 p_SetProcessShutdownParameters = (t_SetProcessShutdownParameters)
119 GetProcAddress(hLib, "SetProcessShutdownParameters");
121 p_BackupRead = (t_BackupRead)
122 GetProcAddress(hLib, "BackupRead");
123 p_BackupWrite = (t_BackupWrite)
124 GetProcAddress(hLib, "BackupWrite");
125 /* char conversion calls */
126 p_WideCharToMultiByte = (t_WideCharToMultiByte)
127 GetProcAddress(hLib, "WideCharToMultiByte");
128 p_MultiByteToWideChar = (t_MultiByteToWideChar)
129 GetProcAddress(hLib, "MultiByteToWideChar");
132 p_FindFirstFileA = (t_FindFirstFileA)
133 GetProcAddress(hLib, "FindFirstFileA");
134 p_FindFirstFileW = (t_FindFirstFileW)
135 GetProcAddress(hLib, "FindFirstFileW");
136 p_FindNextFileA = (t_FindNextFileA)
137 GetProcAddress(hLib, "FindNextFileA");
138 p_FindNextFileW = (t_FindNextFileW)
139 GetProcAddress(hLib, "FindNextFileW");
140 /* set and get directory */
141 p_SetCurrentDirectoryA = (t_SetCurrentDirectoryA)
142 GetProcAddress(hLib, "SetCurrentDirectoryA");
143 p_SetCurrentDirectoryW = (t_SetCurrentDirectoryW)
144 GetProcAddress(hLib, "SetCurrentDirectoryW");
145 p_GetCurrentDirectoryA = (t_GetCurrentDirectoryA)
146 GetProcAddress(hLib, "GetCurrentDirectoryA");
147 p_GetCurrentDirectoryW = (t_GetCurrentDirectoryW)
148 GetProcAddress(hLib, "GetCurrentDirectoryW");
152 hLib = LoadLibraryA("MSVCRT.DLL");
155 p_wunlink = (t_wunlink)
156 GetProcAddress(hLib, "_wunlink");
158 p_wmkdir = (t_wmkdir)
159 GetProcAddress(hLib, "_wmkdir");
162 GetProcAddress(hLib, "_wopen");
167 hLib = LoadLibraryA("ADVAPI32.DLL");
169 p_OpenProcessToken = (t_OpenProcessToken)
170 GetProcAddress(hLib, "OpenProcessToken");
171 p_AdjustTokenPrivileges = (t_AdjustTokenPrivileges)
172 GetProcAddress(hLib, "AdjustTokenPrivileges");
173 p_LookupPrivilegeValue = (t_LookupPrivilegeValue)
174 GetProcAddress(hLib, "LookupPrivilegeValueA");
178 // do we run on win 9x ???
179 OSVERSIONINFO osversioninfo;
180 osversioninfo.dwOSVersionInfoSize = sizeof(osversioninfo);
182 DWORD dwMinorVersion;
184 // Get the current OS version
185 if (!GetVersionEx(&osversioninfo)) {
189 g_platform_id = osversioninfo.dwPlatformId;
190 dwMinorVersion = osversioninfo.dwMinorVersion;
193 /* deinitialize some routines on win95 - they're not implemented well */
194 if (g_platform_id == VER_PLATFORM_WIN32_WINDOWS) {
196 p_BackupWrite = NULL;
198 p_CreateFileW = NULL;
199 p_GetFileAttributesW = NULL;
200 p_GetFileAttributesExW = NULL;
202 p_SetFileAttributesW = NULL;
204 p_FindFirstFileW = NULL;
205 p_FindNextFileW = NULL;
206 p_SetCurrentDirectoryW = NULL;
207 p_GetCurrentDirectoryW = NULL;
214 /* decide which vss class to initialize */
216 switch (dwMinorVersion) {
218 g_pVSSClient = new VSSClientXP();
222 g_pVSSClient = new VSSClient2003();