source: trunk/include/custombuild.h@ 10366

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

update

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