]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/lib/winapi.c
added InitWinAPIWrapper
[bacula/bacula] / bacula / src / lib / winapi.c
1 /*
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.
5  *
6  *     Kern Sibbald MMIII
7  */
8 /*
9    Copyright (C) 2000-2005 Kern Sibbald
10
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.
15
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.
20
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,
24    MA 02111-1307, USA.
25
26  */
27
28 #include "bacula.h"
29
30 #if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
31
32 #include "winapi.h"
33
34 /* API Pointers */
35
36 t_OpenProcessToken      p_OpenProcessToken = NULL;
37 t_AdjustTokenPrivileges p_AdjustTokenPrivileges = NULL;
38 t_LookupPrivilegeValue  p_LookupPrivilegeValue = NULL;
39
40 t_SetProcessShutdownParameters p_SetProcessShutdownParameters = NULL;
41
42 t_CreateFileA   p_CreateFileA = NULL;
43 t_CreateFileW   p_CreateFileW = NULL;
44
45 t_wunlink p_wunlink = NULL;
46 t_wmkdir p_wmkdir = NULL;
47 t_wopen p_wopen = NULL;
48 t_GetFileAttributesA    p_GetFileAttributesA = NULL;
49 t_GetFileAttributesW    p_GetFileAttributesW = NULL;
50
51 t_GetFileAttributesExA  p_GetFileAttributesExA = NULL;
52 t_GetFileAttributesExW  p_GetFileAttributesExW = NULL;
53
54 t_SetFileAttributesA    p_SetFileAttributesA = NULL;
55 t_SetFileAttributesW    p_SetFileAttributesW = NULL;
56 t_BackupRead            p_BackupRead = NULL;
57 t_BackupWrite           p_BackupWrite = NULL;
58 t_WideCharToMultiByte p_WideCharToMultiByte = NULL;
59 t_MultiByteToWideChar p_MultiByteToWideChar = NULL;
60
61 t_FindFirstFileA p_FindFirstFileA = NULL;
62 t_FindFirstFileW p_FindFirstFileW = NULL;
63
64 t_FindNextFileA p_FindNextFileA = NULL;
65 t_FindNextFileW p_FindNextFileW = NULL;
66
67 t_SetCurrentDirectoryA p_SetCurrentDirectoryA = NULL;
68 t_SetCurrentDirectoryW p_SetCurrentDirectoryW = NULL;
69
70 t_GetCurrentDirectoryA p_GetCurrentDirectoryA = NULL;
71 t_GetCurrentDirectoryW p_GetCurrentDirectoryW = NULL;
72
73 void 
74 InitWinAPIWrapper() 
75 {
76    HMODULE hLib = LoadLibraryA("KERNEL32.DLL");
77    if (hLib) {
78       /* create file calls */
79       p_CreateFileA = (t_CreateFileA)
80           GetProcAddress(hLib, "CreateFileA");
81       p_CreateFileW = (t_CreateFileW)
82           GetProcAddress(hLib, "CreateFileW");      
83
84       /* attribute calls */
85       p_GetFileAttributesA = (t_GetFileAttributesA)
86           GetProcAddress(hLib, "GetFileAttributesA");
87       p_GetFileAttributesW = (t_GetFileAttributesW)
88           GetProcAddress(hLib, "GetFileAttributesW");
89       p_GetFileAttributesExA = (t_GetFileAttributesExA)
90           GetProcAddress(hLib, "GetFileAttributesExA");
91       p_GetFileAttributesExW = (t_GetFileAttributesExW)
92           GetProcAddress(hLib, "GetFileAttributesExW");
93       p_SetFileAttributesA = (t_SetFileAttributesA)
94           GetProcAddress(hLib, "SetFileAttributesA");
95       p_SetFileAttributesW = (t_SetFileAttributesW)
96           GetProcAddress(hLib, "SetFileAttributesW");
97       /* process calls */
98       p_SetProcessShutdownParameters = (t_SetProcessShutdownParameters)
99           GetProcAddress(hLib, "SetProcessShutdownParameters");
100       /* backup calls */
101       p_BackupRead = (t_BackupRead)
102           GetProcAddress(hLib, "BackupRead");
103       p_BackupWrite = (t_BackupWrite)
104           GetProcAddress(hLib, "BackupWrite");
105       /* char conversion calls */
106       p_WideCharToMultiByte = (t_WideCharToMultiByte)
107           GetProcAddress(hLib, "WideCharToMultiByte");
108       p_MultiByteToWideChar = (t_MultiByteToWideChar)
109           GetProcAddress(hLib, "MultiByteToWideChar");
110
111       /* find files */
112       p_FindFirstFileA = (t_FindFirstFileA)
113           GetProcAddress(hLib, "FindFirstFileA"); 
114       p_FindFirstFileW = (t_FindFirstFileW)
115           GetProcAddress(hLib, "FindFirstFileW");       
116       p_FindNextFileA = (t_FindNextFileA)
117           GetProcAddress(hLib, "FindNextFileA");
118       p_FindNextFileW = (t_FindNextFileW)
119           GetProcAddress(hLib, "FindNextFileW");
120       /* set and get directory */
121       p_SetCurrentDirectoryA = (t_SetCurrentDirectoryA)
122           GetProcAddress(hLib, "SetCurrentDirectoryA");
123       p_SetCurrentDirectoryW = (t_SetCurrentDirectoryW)
124           GetProcAddress(hLib, "SetCurrentDirectoryW");       
125       p_GetCurrentDirectoryA = (t_GetCurrentDirectoryA)
126           GetProcAddress(hLib, "GetCurrentDirectoryA");
127       p_GetCurrentDirectoryW = (t_GetCurrentDirectoryW)
128           GetProcAddress(hLib, "GetCurrentDirectoryW");      
129       FreeLibrary(hLib);
130    }
131    
132    hLib = LoadLibraryA("MSVCRT.DLL");
133    if (hLib) {
134       /* unlink */
135       p_wunlink = (t_wunlink)
136       GetProcAddress(hLib, "_wunlink");
137       /* wmkdir */
138       p_wmkdir = (t_wmkdir)
139       GetProcAddress(hLib, "_wmkdir");
140       /* wopen */
141       p_wopen = (t_wopen)
142       GetProcAddress(hLib, "_wopen");
143
144       FreeLibrary(hLib);
145    }
146    
147    hLib = LoadLibraryA("ADVAPI32.DLL");
148    if (hLib) {
149       p_OpenProcessToken = (t_OpenProcessToken)
150          GetProcAddress(hLib, "OpenProcessToken");
151       p_AdjustTokenPrivileges = (t_AdjustTokenPrivileges)
152          GetProcAddress(hLib, "AdjustTokenPrivileges");
153       p_LookupPrivilegeValue = (t_LookupPrivilegeValue)
154          GetProcAddress(hLib, "LookupPrivilegeValueA");
155       FreeLibrary(hLib);
156    }
157
158    // do we run on win 9x ???
159
160    DWORD   dw_platform_id;
161
162    OSVERSIONINFO osversioninfo;
163    osversioninfo.dwOSVersionInfoSize = sizeof(osversioninfo);
164
165    // Get the current OS version
166    if (!GetVersionEx(&osversioninfo)) {
167       dw_platform_id = 0;
168    } else {
169       dw_platform_id = osversioninfo.dwPlatformId;
170    }
171
172    if (dw_platform_id == VER_PLATFORM_WIN32_WINDOWS) {
173       p_BackupRead = NULL;
174       p_BackupWrite = NULL;
175
176       p_CreateFileW = NULL;          
177       p_GetFileAttributesW = NULL;          
178       p_GetFileAttributesExW = NULL;
179           
180       p_SetFileAttributesW = NULL;
181                 
182       p_FindFirstFileW = NULL;
183       p_FindNextFileW = NULL;
184       p_SetCurrentDirectoryW = NULL;
185       p_GetCurrentDirectoryW = NULL;
186
187       p_wunlink = NULL;
188       p_wmkdir = NULL;
189       p_wopen = NULL;
190    }   
191 }
192 #endif