source: trunk/include/custombuild.h@ 10367

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

update

File size: 15.3 KB
RevLine 
[7061]1#ifndef __CUSTOMBUILD_H__
2#define __CUSTOMBUILD_H__
3
[10294]4#include <win\peexe.h>
5#include <initdll.h>
6
[7238]7//HKEY_LOCAL_MACHINE
8#define CUSTOM_BUILD_OPTIONS_KEY "System\\CustomBuild"
9#define DISABLE_AUDIO_KEY "DisableAudio"
[8095]10#define DISABLE_ASPI_KEY "DisableASPI"
[7238]11
[10327]12#define ODIN_WIN32_CDCLASS "Win32CDWindowClass"
13#define ODIN_WIN32_STDCLASS "Win32WindowClass"
14
[10294]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
[7061]88extern BOOL fCustomBuild;
89
[10294]90void WIN32API SetRegistryRootKey(HKEY hRootkey, HKEY hKey);
91void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh = NULL);
92
[9596]93void WIN32API InitDirectoriesCustom(char *szSystemDir, char *szWindowsDir);
[7061]94
[9596]95void WIN32API DisableOdinIni();
[7061]96
[9596]97void WIN32API DisableOdinSysMenuItems();
[7246]98
[9596]99
[7763]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,
[7572]103 LPVOID lpInBuffer, DWORD nInBufferSize,
104 LPVOID lpOutBuffer, DWORD nOutBufferSize,
[7756]105 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped,
[7763]106 LPVOID lpHandleData);
[7246]107
[9829]108typedef BOOL (* WIN32API PFNDRVREAD)(LPVOID lpDriverData,
[7763]109 HANDLE hDevice,
[7631]110 DWORD dwFlags,
[7572]111 LPCVOID lpBuffer,
112 DWORD nNumberOfBytesToRead,
113 LPDWORD lpNumberOfBytesRead,
114 LPOVERLAPPED lpOverlapped,
[7756]115 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
[7763]116 LPVOID lpHandleData);
[7572]117
[9829]118typedef BOOL (* WIN32API PFNDRVWRITE)(LPVOID lpDriverData,
[7763]119 HANDLE hDevice,
[7631]120 DWORD dwFlags,
[7572]121 LPCVOID lpBuffer,
122 DWORD nNumberOfBytesToWrite,
123 LPDWORD lpNumberOfBytesWrite,
124 LPOVERLAPPED lpOverlapped,
[7756]125 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
[7763]126 LPVOID lpHandleData);
[7572]127
[7763]128typedef BOOL (* WIN32API PFNDRVCANCELIO)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
[9829]129typedef DWORD (* WIN32API PFNDRVGETOVERLAPPEDRESULT)(LPVOID lpDriverData,
[7763]130 HANDLE hDevice,
[7631]131 DWORD dwFlags,
[7629]132 LPOVERLAPPED lpOverlapped,
133 LPDWORD lpcbTransfer,
[7756]134 BOOL fWait,
[7763]135 LPVOID lpHandleData);
[7572]136
[9829]137BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
[7572]138 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
[7629]139 PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
140 PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
[7763]141 LPCSTR lpDriverName, LPVOID lpDriverData);
[7246]142
[7763]143BOOL WIN32API UnRegisterCustomDriver(LPCSTR lpDriverName);
[7247]144
[7763]145
[7247]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
[8132]149#define HODIN_PREDIALOGCREATION 0
150#define HODIN_POSTDIALOGCREATION 1
151#define HODIN_WINDOWCREATED 2
[7247]152
[8132]153HHOOK WIN32API SetOdinHookA(HOOKPROC proc );
154BOOL WIN32API UnhookOdinHook(HHOOK hhook);
155LRESULT HOOK_CallOdinHookA(INT code, WPARAM wParam, LPARAM lParam );
[7247]156
[8112]157//Override LoadImage function
158typedef void (* WIN32API PFNLOADIMAGEW)(HINSTANCE *phinst, LPWSTR *lplpszName, UINT *lpuType);
[7251]159
[8112]160BOOL WIN32API SetCustomLoadImage(PFNLOADIMAGEW pfnLoadImageW);
[8012]161
[7251]162//Set the default language in kernel32
163void WIN32API SetDefaultLanguage(DWORD deflang);
164
[7621]165//Override pm keyboard hook dll name
166void WIN32API SetCustomPMHookDll(LPSTR pszKbdDllName);
[7251]167
[8736]168void WIN32API DisableDragDrop(BOOL fDisabled);
[8733]169
[7674]170//Turn off wave audio in winmm
171void WIN32API DisableWaveAudio();
[9980]172//Turn off usage of the Uniaud DirectAudio interface
173void WIN32API DisableDirectAudio();
[7674]174
[9829]175//Override shared semaphore name used to synchronize global window handle
[8656]176//array access (to avoid name clash with Odin)
177void WIN32API SetCustomWndHandleSemName(LPSTR pszSemName);
178
[9829]179//Override shared semaphore name used to synchronize global memory map
[8658]180//list access (to avoid name clash with Odin)
181void WIN32API SetCustomMMapSemName(LPSTR pszSemName);
182
[9964]183//Override std class names used in Odin
184void WIN32API SetCustomStdClassName(LPSTR pszStdClassName);
185
[8095]186//Turn off ASPI
187void WIN32API DisableASPI();
188
[7943]189//force color to mono cursor conversion
190void WIN32API CustForceMonoCursor();
191
[8408]192//force GetVolumeInformation to tell the app all partitions are FAT
193void WIN32API CustForce2GBFileSize();
194
[8833]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
[8929]201//Disable OS2CDROM.DMD aspi support
202void WIN32API DisableCDIo();
[8833]203
[8987]204//Force DirectDraw to report only one fullscreen mode
205void WIN32API SetCustomFullScreenMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
206
[9156]207//Force DirectSurface Lock & Unlock methods to hide & show the mouse cursor
208BOOL WIN32API SetCustomHideCursorOnLock(BOOL state);
209
[9302]210//Call to enable access to physical disks or volumes (default is disabled)
211void WIN32API EnablePhysicalDiskAccess(BOOL fEnable);
212
[9829]213//Override a system color without forcing a desktop repaint (which
[9444]214//SetSysColors does)
215BOOL WIN32API ODIN_SetSysColors(INT nChanges, const INT *lpSysColor,
216 const COLORREF *lpColorValues);
217
[9484]218//Override loader names (PEC, PE, W16ODIN)
219BOOL WIN32API ODIN_SetLoaders(LPCSTR pszPECmdLoader, LPCSTR pszPEGUILoader,
220 LPCSTR pszNELoader);
221
[9494]222//Returns path of loaders
223BOOL WIN32API ODIN_QueryLoaders(LPSTR pszPECmdLoader, INT cchPECmdLoader,
224 LPSTR pszPEGUILoader, INT cchPEGUILoader,
225 LPSTR pszNELoader, INT cchNELoader);
226
[9849]227//Checks whether program is LX or PE
228BOOL WIN32API ODIN_IsWin32App(LPSTR lpszProgramPath);
229
[9484]230//Custom build function to disable loading of LX dlls
231void WIN32API ODIN_DisableLXDllLoading();
232
[9829]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);
[9616]244
[9829]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
[9616]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
[9829]275
[9616]276//******************************************************************************
277// ODIN_SetProcAddress: Override a dll export
[9829]278//
[9616]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
[9798]290//******************************************************************************
291// ODIN_SetTIBSwitch: override TIB switching
[9829]292//
[9798]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
[9898]301//******************************************************************************
302// ODIN_DisableFolderShellLink
303//
[9909]304// Disable object creation in Odin folder. Desktop shortcuts will still be
[9898]305// created as WPS objects on the desktop.
306//
307//******************************************************************************
308void WIN32API ODIN_DisableFolderShellLink();
309
[9900]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.
[9909]318//
[9900]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.
[9909]332//
[9900]333//******************************************************************************
334void WIN32API ODIN_waveInSetFixedBuffers();
335
[9909]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
[10294]347void WIN32API ODIN_SetExceptionHandler(void *pExceptionRegRec);
348void WIN32API ODIN_UnsetExceptionHandler(void *pExceptionRegRec);
349
[10237]350/* Turn on CD Polling (window with 2 second timer to check CD disk presence) */
351void WIN32API CustEnableCDPolling();
[9909]352
[10294]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
[7061]388#endif /*__CUSTOMBUILD_H__*/
389
Note: See TracBrowser for help on using the repository browser.