source: trunk/include/custombuild.h@ 10504

Last change on this file since 10504 was 10490, checked in by sandervl, 22 years ago

netapi32

File size: 18.3 KB
Line 
1#ifndef __CUSTOMBUILD_H__
2#define __CUSTOMBUILD_H__
3
4#include <win\peexe.h>
5#include <initdll.h>
6
7//HKEY_LOCAL_MACHINE
8#define CUSTOM_BUILD_OPTIONS_KEY "System\\CustomBuild"
9#define DISABLE_AUDIO_KEY "DisableAudio"
10#define DISABLE_ASPI_KEY "DisableASPI"
11#define ENABLE_POSTSCRIPT_PASSTHROUGH "EnablePostscriptPassthrough"
12
13#define ODIN_WIN32_CDCLASS "Win32CDWindowClass"
14#define ODIN_WIN32_STDCLASS "Win32WindowClass"
15
16#define DUMMY_PREFIX "DUMMY_"
17
18#define MAX_FONT_MAPPINGS 8
19#define MAX_REGISTER_DLLS 64
20
21#define INNOWIN_DLLNAME "INNOWIN.DLL"
22#define INNOWIN_REGISTRY_BASE "Software\\InnoTek\\INNOWIN\\"
23#define INNOWIN_REG_CURRENTUSER "REGROOT_HKEY_CurrentUser"
24#define INNOWIN_REG_LOCAL_MACHINE "REGROOT_HKEY_LocalMachine"
25#define INNOWIN_REG_USERS "REGROOT_HKEY_Users"
26
27#define MAKE_BUILDNR(major, minor) ((major << 16) | minor)
28#define MAJOR_BUILDNR(buildnr) (buildnr >> 16)
29#define MINOR_BUILDNR(buildnr) (buildnr & 0xffff)
30
31
32typedef BOOL (WIN32API *PFN_PRECUSTOMIZE)();
33typedef BOOL (WIN32API *PFN_POSTCUSTOMIZE)();
34typedef BOOL (WIN32API *PFN_ENDCUSTOMIZE)();
35typedef BOOL (WIN32API *PFN_ISPESTUBLOADER)(char *pszProgram);
36
37typedef struct {
38 char *szWindowsFont;
39 char *szPMFont;
40} CUSTOMBUILD_FONTMAP;
41
42typedef struct {
43 char *szName; //caps, including extension (e.g. "KERNEL32.DLL")
44 PIMAGE_FILE_HEADER pfh; //PE file header
45 PFN_INITDLL pfnInitterm;
46} CUSTOMBUILD_DLL;
47
48typedef struct {
49 char *szName;
50 PFN_INITDLL pfnInitterm;
51} CUSTOMBUILD_PRIVATE_INITTERM;
52
53typedef struct {
54 PFN_PRECUSTOMIZE pfnPreCustomize; //called after kernel32 is initialized
55 PFN_POSTCUSTOMIZE pfnPostCustomize; //called at the end of dll load
56 PFN_ENDCUSTOMIZE pfnEndCustomize; //called when dll is unloaded
57
58 char *szCustomBuildDllName;
59
60 char *szRegistryBase;
61 char *szMemMapName;
62 char *szEnvExceptLogDisable;
63 char *szEnvExceptLogPath;
64 char *szPMWindowClassName;
65 char *szWindowHandleSemName;
66
67 //standard kernel32 settings
68 DWORD dwWindowsVersion;
69 BOOL fOdinIni;
70 BOOL fSMP;
71
72 //standard user32 settings
73 BOOL fDragDrop;
74 BOOL fOdinSysMenuItems;
75 DWORD dwWindowAppearance;
76 BOOL fMonoCursor;
77
78 //standard gdi32 settings
79 //font mappings (null terminated)
80 CUSTOMBUILD_FONTMAP fontMapping[MAX_FONT_MAPPINGS];
81 BOOL fFreeType;
82
83 //winmm
84 BOOL fDirectAudio;
85 BOOL fWaveAudio;
86
87 //first three important dlls (initialized in this order
88 CUSTOMBUILD_DLL dllNtdll;
89 CUSTOMBUILD_DLL dllKernel32;
90 CUSTOMBUILD_DLL dllUser32;
91 CUSTOMBUILD_DLL dllGdi32;
92
93 //list of remainder of registered dlls (order is important due to dependencies!!)
94 //(null terminated)
95 CUSTOMBUILD_DLL registeredDll[MAX_REGISTER_DLLS];
96
97 //list of dummy dlls (to prevent accidental load)
98 //(null terminated)
99 CUSTOMBUILD_DLL dummyDll[MAX_REGISTER_DLLS];
100
101} CUSTOMBUILD;
102
103typedef struct {
104 PFN_PRECUSTOMIZE pfnPreCustomize; //called after kernel32, user32 and gdi32 are initialized
105 PFN_POSTCUSTOMIZE pfnPostCustomize; //called at the end of dll load
106 PFN_ENDCUSTOMIZE pfnEndCustomize; //called when dll is unloaded
107 PFN_ISPESTUBLOADER pfnIsPeStubLoader;
108
109 char *szCustomBuildDllName;
110
111 char *szRegistryBase;
112 char *szEnvExceptLogDisable;
113 char *szEnvExceptLogPath;
114
115 //standard kernel32 settings
116 DWORD dwWindowsVersion;
117 BOOL fOdinIni;
118 BOOL fSMP;
119
120 //standard user32 settings
121 BOOL fDragDrop;
122 BOOL fOdinSysMenuItems;
123 DWORD dwWindowAppearance;
124 BOOL fMonoCursor;
125
126 //standard gdi32 settings
127 //font mappings (null terminated)
128 CUSTOMBUILD_FONTMAP fontMapping[MAX_FONT_MAPPINGS];
129 BOOL fFreeType;
130
131 //winmm
132 BOOL fDirectAudio;
133 BOOL fWaveAudio;
134
135 //list of remainder of registered dlls (order is important due to dependencies!!)
136 //(null terminated)
137 //(NTDLL, KERNEL32, USER32 and GDI32 are always registered)
138 CUSTOMBUILD_DLL registeredDll[MAX_REGISTER_DLLS];
139
140} CUSTOMBUILD_COMMON;
141
142BOOL WIN32API LoadCustomEnvironment(CUSTOMBUILD_COMMON *CustomBuild);
143BOOL WIN32API UnloadCustomEnvironment(BOOL fExitList);
144
145BOOL WIN32API InitExecutableEnvironment();
146BOOL WIN32API CheckCustomDllVersion(ULONG ulVersionMajor, ULONG ulVersionMinor);
147
148typedef BOOL (* WIN32API PFN_CHECKDLLVERSION)();
149BOOL WIN32API CheckDllVersion();
150
151extern BOOL fCustomBuild;
152
153void WIN32API SetRegistryRootKey(HKEY hRootkey, HKEY hKey);
154#ifdef __cplusplus
155void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh = NULL);
156#else
157void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh);
158#endif
159
160void WIN32API InitDirectoriesCustom(char *szSystemDir, char *szWindowsDir);
161
162void WIN32API DisableOdinIni();
163
164void WIN32API DisableOdinSysMenuItems();
165
166
167typedef HANDLE (* WIN32API PFNDRVOPEN)(LPVOID lpDriverData, DWORD dwAccess, DWORD dwShare, DWORD dwFlags, PVOID *ppHandleData);
168typedef void (* WIN32API PFNDRVCLOSE)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
169typedef BOOL (* WIN32API PFNDRVIOCTL)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, DWORD dwIoControlCode,
170 LPVOID lpInBuffer, DWORD nInBufferSize,
171 LPVOID lpOutBuffer, DWORD nOutBufferSize,
172 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped,
173 LPVOID lpHandleData);
174
175typedef BOOL (* WIN32API PFNDRVREAD)(LPVOID lpDriverData,
176 HANDLE hDevice,
177 DWORD dwFlags,
178 LPCVOID lpBuffer,
179 DWORD nNumberOfBytesToRead,
180 LPDWORD lpNumberOfBytesRead,
181 LPOVERLAPPED lpOverlapped,
182 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
183 LPVOID lpHandleData);
184
185typedef BOOL (* WIN32API PFNDRVWRITE)(LPVOID lpDriverData,
186 HANDLE hDevice,
187 DWORD dwFlags,
188 LPCVOID lpBuffer,
189 DWORD nNumberOfBytesToWrite,
190 LPDWORD lpNumberOfBytesWrite,
191 LPOVERLAPPED lpOverlapped,
192 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
193 LPVOID lpHandleData);
194
195typedef BOOL (* WIN32API PFNDRVCANCELIO)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
196typedef DWORD (* WIN32API PFNDRVGETOVERLAPPEDRESULT)(LPVOID lpDriverData,
197 HANDLE hDevice,
198 DWORD dwFlags,
199 LPOVERLAPPED lpOverlapped,
200 LPDWORD lpcbTransfer,
201 BOOL fWait,
202 LPVOID lpHandleData);
203
204BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
205 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
206 PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
207 PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
208 LPCSTR lpDriverName, LPVOID lpDriverData);
209
210BOOL WIN32API UnRegisterCustomDriver(LPCSTR lpDriverName);
211
212
213//SetDialogHook can be used by a custom Odin build to register a hook procedure
214//that gets called before or after dialog creation
215
216#define HODIN_PREDIALOGCREATION 0
217#define HODIN_POSTDIALOGCREATION 1
218#define HODIN_WINDOWCREATED 2
219#define HODIN_PREWINDOWCREATEDA 3
220
221HHOOK WIN32API SetOdinHookA(HOOKPROC proc );
222BOOL WIN32API UnhookOdinHook(HHOOK hhook);
223LRESULT HOOK_CallOdinHookA(INT code, WPARAM wParam, LPARAM lParam );
224
225//Override LoadImage function
226typedef void (* WIN32API PFNLOADIMAGEW)(HINSTANCE *phinst, LPWSTR *lplpszName, UINT *lpuType);
227
228BOOL WIN32API SetCustomLoadImage(PFNLOADIMAGEW pfnLoadImageW);
229
230//Set the default language in kernel32
231void WIN32API SetDefaultLanguage(DWORD deflang);
232
233//Override pm keyboard hook dll name
234void WIN32API SetCustomPMHookDll(LPSTR pszKbdDllName);
235
236void WIN32API DisableDragDrop(BOOL fDisabled);
237
238//Turn off wave audio in winmm
239void WIN32API DisableWaveAudio();
240//Turn off usage of the Uniaud DirectAudio interface
241void WIN32API DisableDirectAudio();
242
243//Override shared semaphore name used to synchronize global window handle
244//array access (to avoid name clash with Odin)
245void WIN32API SetCustomWndHandleSemName(LPSTR pszSemName);
246
247//Override shared semaphore name used to synchronize global memory map
248//list access (to avoid name clash with Odin)
249void WIN32API SetCustomMMapSemName(LPSTR pszSemName);
250
251//Override std class names used in Odin
252void WIN32API SetCustomStdClassName(LPSTR pszStdClassName);
253char *WIN32API QueryCustomStdClassName();
254
255//Turn off ASPI
256void WIN32API DisableASPI();
257
258//force color to mono cursor conversion
259void WIN32API CustForceMonoCursor();
260
261//force GetVolumeInformation to tell the app all partitions are FAT
262void WIN32API CustForce2GBFileSize();
263
264//Logging of exceptions:
265//Override filename of exception log (expects full path)
266void WIN32API SetCustomExceptionLog(LPSTR lpszLogName);
267//Enable/disable exception logging
268void WIN32API SetExceptionLogging(BOOL fEnable);
269
270//Disable OS2CDROM.DMD aspi support
271void WIN32API DisableCDIo();
272
273//Force DirectDraw to report only one fullscreen mode
274void WIN32API SetCustomFullScreenMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
275
276//Force DirectSurface Lock & Unlock methods to hide & show the mouse cursor
277BOOL WIN32API SetCustomHideCursorOnLock(BOOL state);
278
279//Call to enable access to physical disks or volumes (default is disabled)
280void WIN32API EnablePhysicalDiskAccess(BOOL fEnable);
281
282//Override a system color without forcing a desktop repaint (which
283//SetSysColors does)
284BOOL WIN32API ODIN_SetSysColors(INT nChanges, const INT *lpSysColor,
285 const COLORREF *lpColorValues);
286
287//Override loader names (PEC, PE, W16ODIN)
288BOOL WIN32API ODIN_SetLoaders(LPCSTR pszPECmdLoader, LPCSTR pszPEGUILoader,
289 LPCSTR pszNELoader);
290
291//Returns path of loaders
292BOOL WIN32API ODIN_QueryLoaders(LPSTR pszPECmdLoader, INT cchPECmdLoader,
293 LPSTR pszPEGUILoader, INT cchPEGUILoader,
294 LPSTR pszNELoader, INT cchNELoader);
295
296//Checks whether program is LX or PE
297BOOL WIN32API ODIN_IsWin32App(LPSTR lpszProgramPath);
298
299//Custom build function to disable loading of LX dlls
300void WIN32API ODIN_DisableLXDllLoading();
301
302/**
303 * LoadLibrary*() callback function registered using ODIN_SetLxDllLoadCallback().
304 * This is called for all LX modules which are loaded by LoadLibrary.
305 *
306 * @returns TRUE loading should succeed. The DLL is now registered.
307 * @returns FALSE loading should fail.
308 * @param hmodOS2 The OS/2 module handle.
309 * @param hInstance The Odin instance handle.
310 * If not NULL this means that the DLL is registered.
311 */
312typedef BOOL (* WIN32API PFNLXDLLLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
313
314/** Custombuild API for registering a callback for LX Dll loading thru LoadLibrary*(). */
315BOOL WIN32API ODIN_SetLxDllLoadCallback(PFNLXDLLLOAD pfn);
316
317/**
318 * FreeLibrary*() callback function registered using ODIN_SetLxDllUnLoadCallback().
319 * This is called when an LX which was previously loaded using LoadLibrary*() is
320 * finally freed from Odin. The callback servers mainly the purpose of cleaning
321 * up any data associated with the DLL.
322 *
323 * It is called *AFTER* the module is freed from Odin but before it's actually
324 * unloaded from the OS/2 process. This means that the OS/2 handle is valid while
325 * the Odin handle is invalid.
326 *
327 * @param hmodOS2 The OS/2 module handle.
328 * @param hInstance The Odin instance handle (invalid!).
329 * @remark It likely that this callback will be called for more DLLs than the
330 * load callback. Do check handles properly.
331 */
332typedef void (* WIN32API PFNLXDLLUNLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
333
334BOOL WIN32API ODIN_SetLxDllUnLoadCallback(PFNLXDLLUNLOAD pfn);
335
336
337//******************************************************************************
338//Install a handler that is called before the entrypoint of a dll (DLL_PROCESS_ATTACH)
339//******************************************************************************
340typedef void (* WIN32API ODINPROC_DLLLOAD)(HMODULE hModule);
341
342BOOL WIN32API ODIN_SetDllLoadCallback(ODINPROC_DLLLOAD pfnMyDllLoad);
343
344
345//******************************************************************************
346// ODIN_SetProcAddress: Override a dll export
347//
348// Parameters:
349// HMODULE hModule Module handle
350// LPCSTR lpszProc Export name or ordinal
351// FARPROC pfnNewProc New export function address
352//
353// Returns: Success -> old address of export
354// Failure -> -1
355//
356//******************************************************************************
357FARPROC WIN32API ODIN_SetProcAddress(HMODULE hModule, LPCSTR lpszProc, FARPROC pfnNewProc);
358
359//******************************************************************************
360// ODIN_SetTIBSwitch: override TIB switching
361//
362// Parameters:
363// BOOL fSwitchTIB
364// FALSE -> no TIB selector switching
365// TRUE -> force TIB selector switching
366//
367//******************************************************************************
368void WIN32API ODIN_SetTIBSwitch(BOOL fSwitchTIB);
369
370//******************************************************************************
371// ODIN_DisableFolderShellLink
372//
373// Disable object creation in Odin folder. Desktop shortcuts will still be
374// created as WPS objects on the desktop.
375//
376//******************************************************************************
377void WIN32API ODIN_DisableFolderShellLink();
378
379//******************************************************************************
380// ODIN_waveOutSetFixedBuffers
381//
382// Tell WINMM to use DART buffers of the same size as the first buffer delivered
383// by waveOutWrite
384//
385// NOTE: This will only work in very specific cases; it is not a good general
386// purpose solution.
387//
388//******************************************************************************
389void WIN32API ODIN_waveOutSetFixedBuffers();
390
391#define SetFixedWaveBufferSize ODIN_waveOutSetFixedBuffers
392
393//******************************************************************************
394// ODIN_waveInSetFixedBuffers
395//
396// Tell WINMM to use DART buffers of the same size as the first buffer delivered
397// by waveInAddBuffer
398//
399// NOTE: This will only work in very specific cases; it is not a good general
400// purpose solution.
401//
402//******************************************************************************
403void WIN32API ODIN_waveInSetFixedBuffers();
404
405
406/** Enter odin context with this thread. */
407USHORT WIN32API ODIN_ThreadEnterOdinContext(void *pExceptionRegRec, BOOL fForceFSSwitch);
408/** Leave odin context with this thread. */
409void WIN32API ODIN_ThreadLeaveOdinContext(void *pExceptionRegRec, USHORT selFSOld);
410
411/** Leave odin context to call back into OS/2 code. */
412USHORT WIN32API ODIN_ThreadLeaveOdinContextNested(void *pExceptionRegRec, BOOL fRemoveOdinExcpt);
413/** Re-enter Odin context after being back in OS/2 code. */
414void WIN32API ODIN_ThreadEnterOdinContextNested(void *pExceptionRegRec, BOOL fRestoreOdinExcpt, USHORT selFSOld);
415
416void WIN32API ODIN_SetExceptionHandler(void *pExceptionRegRec);
417void WIN32API ODIN_UnsetExceptionHandler(void *pExceptionRegRec);
418
419/* Turn on CD Polling (window with 2 second timer to check CD disk presence) */
420void WIN32API CustEnableCDPolling();
421
422void WIN32API SetFreeTypeIntegration(BOOL fEnabled);
423
424// Special function to change dwords in the startup structure of a process
425void WINAPI ODIN_SetProcessDword( DWORD dwProcessID, INT offset, DWORD value );
426
427void WIN32API ODIN_SetPostscriptPassthrough(BOOL fEnable);
428
429//PE headers of system dlls
430#ifdef __cplusplus
431extern "C" {
432#endif
433extern IMAGE_FILE_HEADER nt_ntdll_header;
434extern IMAGE_FILE_HEADER nt_gdi32_header;
435extern IMAGE_FILE_HEADER nt_kernel32_header;
436extern IMAGE_FILE_HEADER nt_user32_header;
437extern IMAGE_FILE_HEADER nt_advapi32_header;
438extern IMAGE_FILE_HEADER nt_version_header;
439extern IMAGE_FILE_HEADER nt_wsock32_header;
440extern IMAGE_FILE_HEADER nt_ws2_32_header;
441extern IMAGE_FILE_HEADER nt_winmm_header;
442extern IMAGE_FILE_HEADER nt_ole32_header;
443extern IMAGE_FILE_HEADER nt_comctl32_header;
444extern IMAGE_FILE_HEADER nt_shell32_header;
445extern IMAGE_FILE_HEADER nt_comdlg32_header;
446extern IMAGE_FILE_HEADER nt_winspool_header;
447extern IMAGE_FILE_HEADER nt_ddraw_header;
448extern IMAGE_FILE_HEADER nt_oleaut32_header;
449extern IMAGE_FILE_HEADER nt_msvfw32_header;
450extern IMAGE_FILE_HEADER nt_imm32_header;
451extern IMAGE_FILE_HEADER nt_mpr_header;
452extern IMAGE_FILE_HEADER nt_iphlpapi_header;
453extern IMAGE_FILE_HEADER nt_olepro32_header;
454extern IMAGE_FILE_HEADER nt_msvcrt_header;
455extern IMAGE_FILE_HEADER nt_lz32_header;
456extern IMAGE_FILE_HEADER nt_oledlg_header;
457extern IMAGE_FILE_HEADER nt_riched32_header;
458extern IMAGE_FILE_HEADER nt_psapi_header;
459extern IMAGE_FILE_HEADER nt_rpcrt4_header;
460extern IMAGE_FILE_HEADER nt_shlwapi_header;
461extern IMAGE_FILE_HEADER nt_shfolder_header;
462extern IMAGE_FILE_HEADER nt_wininet_header;
463extern IMAGE_FILE_HEADER nt_olepro32_header;
464extern IMAGE_FILE_HEADER nt_avifil32_header;
465extern IMAGE_FILE_HEADER nt_dinput_header;
466extern IMAGE_FILE_HEADER nt_dsound_header;
467extern IMAGE_FILE_HEADER nt_uxtheme_header;
468extern IMAGE_FILE_HEADER nt_mciwave_header;
469extern IMAGE_FILE_HEADER nt_urlmon_header;
470extern IMAGE_FILE_HEADER nt_netapi32_header;
471#ifdef __cplusplus
472}
473#endif
474
475#endif /*__CUSTOMBUILD_H__*/
476
Note: See TracBrowser for help on using the repository browser.