source: trunk/include/custombuild.h@ 10316

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

update

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