source: trunk/include/custombuild.h@ 10444

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

update

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