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
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"
[10490]11#define ENABLE_POSTSCRIPT_PASSTHROUGH "EnablePostscriptPassthrough"
[7238]12
[10327]13#define ODIN_WIN32_CDCLASS "Win32CDWindowClass"
14#define ODIN_WIN32_STDCLASS "Win32WindowClass"
15
[10294]16#define DUMMY_PREFIX "DUMMY_"
17
18#define MAX_FONT_MAPPINGS 8
19#define MAX_REGISTER_DLLS 64
20
[10379]21#define INNOWIN_DLLNAME "INNOWIN.DLL"
[10444]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"
[10379]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
[10294]32typedef BOOL (WIN32API *PFN_PRECUSTOMIZE)();
33typedef BOOL (WIN32API *PFN_POSTCUSTOMIZE)();
34typedef BOOL (WIN32API *PFN_ENDCUSTOMIZE)();
[10379]35typedef BOOL (WIN32API *PFN_ISPESTUBLOADER)(char *pszProgram);
[10294]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
[10379]45 PFN_INITDLL pfnInitterm;
[10294]46} CUSTOMBUILD_DLL;
47
48typedef struct {
49 char *szName;
50 PFN_INITDLL pfnInitterm;
51} CUSTOMBUILD_PRIVATE_INITTERM;
52
53typedef struct {
[10490]54 PFN_PRECUSTOMIZE pfnPreCustomize; //called after kernel32 is initialized
[10294]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;
[10379]70 BOOL fSMP;
[10294]71
72 //standard user32 settings
73 BOOL fDragDrop;
74 BOOL fOdinSysMenuItems;
75 DWORD dwWindowAppearance;
76 BOOL fMonoCursor;
77
[10379]78 //standard gdi32 settings
[10294]79 //font mappings (null terminated)
80 CUSTOMBUILD_FONTMAP fontMapping[MAX_FONT_MAPPINGS];
[10379]81 BOOL fFreeType;
82
[10294]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];
[10379]96
[10294]97 //list of dummy dlls (to prevent accidental load)
98 //(null terminated)
99 CUSTOMBUILD_DLL dummyDll[MAX_REGISTER_DLLS];
100
101} CUSTOMBUILD;
102
[10379]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
[7061]151extern BOOL fCustomBuild;
152
[10294]153void WIN32API SetRegistryRootKey(HKEY hRootkey, HKEY hKey);
[10379]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
[10294]159
[9596]160void WIN32API InitDirectoriesCustom(char *szSystemDir, char *szWindowsDir);
[7061]161
[9596]162void WIN32API DisableOdinIni();
[7061]163
[9596]164void WIN32API DisableOdinSysMenuItems();
[7246]165
[9596]166
[7763]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,
[7572]170 LPVOID lpInBuffer, DWORD nInBufferSize,
171 LPVOID lpOutBuffer, DWORD nOutBufferSize,
[7756]172 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped,
[7763]173 LPVOID lpHandleData);
[7246]174
[9829]175typedef BOOL (* WIN32API PFNDRVREAD)(LPVOID lpDriverData,
[7763]176 HANDLE hDevice,
[7631]177 DWORD dwFlags,
[7572]178 LPCVOID lpBuffer,
179 DWORD nNumberOfBytesToRead,
180 LPDWORD lpNumberOfBytesRead,
181 LPOVERLAPPED lpOverlapped,
[7756]182 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
[7763]183 LPVOID lpHandleData);
[7572]184
[9829]185typedef BOOL (* WIN32API PFNDRVWRITE)(LPVOID lpDriverData,
[7763]186 HANDLE hDevice,
[7631]187 DWORD dwFlags,
[7572]188 LPCVOID lpBuffer,
189 DWORD nNumberOfBytesToWrite,
190 LPDWORD lpNumberOfBytesWrite,
191 LPOVERLAPPED lpOverlapped,
[7756]192 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
[7763]193 LPVOID lpHandleData);
[7572]194
[7763]195typedef BOOL (* WIN32API PFNDRVCANCELIO)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
[9829]196typedef DWORD (* WIN32API PFNDRVGETOVERLAPPEDRESULT)(LPVOID lpDriverData,
[7763]197 HANDLE hDevice,
[7631]198 DWORD dwFlags,
[7629]199 LPOVERLAPPED lpOverlapped,
200 LPDWORD lpcbTransfer,
[7756]201 BOOL fWait,
[7763]202 LPVOID lpHandleData);
[7572]203
[9829]204BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
[7572]205 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
[7629]206 PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
207 PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
[7763]208 LPCSTR lpDriverName, LPVOID lpDriverData);
[7246]209
[7763]210BOOL WIN32API UnRegisterCustomDriver(LPCSTR lpDriverName);
[7247]211
[7763]212
[7247]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
[8132]216#define HODIN_PREDIALOGCREATION 0
217#define HODIN_POSTDIALOGCREATION 1
218#define HODIN_WINDOWCREATED 2
[10449]219#define HODIN_PREWINDOWCREATEDA 3
[7247]220
[8132]221HHOOK WIN32API SetOdinHookA(HOOKPROC proc );
222BOOL WIN32API UnhookOdinHook(HHOOK hhook);
223LRESULT HOOK_CallOdinHookA(INT code, WPARAM wParam, LPARAM lParam );
[7247]224
[8112]225//Override LoadImage function
226typedef void (* WIN32API PFNLOADIMAGEW)(HINSTANCE *phinst, LPWSTR *lplpszName, UINT *lpuType);
[7251]227
[8112]228BOOL WIN32API SetCustomLoadImage(PFNLOADIMAGEW pfnLoadImageW);
[8012]229
[7251]230//Set the default language in kernel32
231void WIN32API SetDefaultLanguage(DWORD deflang);
232
[7621]233//Override pm keyboard hook dll name
234void WIN32API SetCustomPMHookDll(LPSTR pszKbdDllName);
[7251]235
[8736]236void WIN32API DisableDragDrop(BOOL fDisabled);
[8733]237
[7674]238//Turn off wave audio in winmm
239void WIN32API DisableWaveAudio();
[9980]240//Turn off usage of the Uniaud DirectAudio interface
241void WIN32API DisableDirectAudio();
[7674]242
[9829]243//Override shared semaphore name used to synchronize global window handle
[8656]244//array access (to avoid name clash with Odin)
245void WIN32API SetCustomWndHandleSemName(LPSTR pszSemName);
246
[9829]247//Override shared semaphore name used to synchronize global memory map
[8658]248//list access (to avoid name clash with Odin)
249void WIN32API SetCustomMMapSemName(LPSTR pszSemName);
250
[10379]251//Override std class names used in Odin
252void WIN32API SetCustomStdClassName(LPSTR pszStdClassName);
253char *WIN32API QueryCustomStdClassName();
[9964]254
[8095]255//Turn off ASPI
256void WIN32API DisableASPI();
257
[7943]258//force color to mono cursor conversion
259void WIN32API CustForceMonoCursor();
260
[8408]261//force GetVolumeInformation to tell the app all partitions are FAT
262void WIN32API CustForce2GBFileSize();
263
[8833]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
[8929]270//Disable OS2CDROM.DMD aspi support
271void WIN32API DisableCDIo();
[8833]272
[8987]273//Force DirectDraw to report only one fullscreen mode
274void WIN32API SetCustomFullScreenMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
275
[9156]276//Force DirectSurface Lock & Unlock methods to hide & show the mouse cursor
277BOOL WIN32API SetCustomHideCursorOnLock(BOOL state);
278
[9302]279//Call to enable access to physical disks or volumes (default is disabled)
280void WIN32API EnablePhysicalDiskAccess(BOOL fEnable);
281
[9829]282//Override a system color without forcing a desktop repaint (which
[9444]283//SetSysColors does)
284BOOL WIN32API ODIN_SetSysColors(INT nChanges, const INT *lpSysColor,
285 const COLORREF *lpColorValues);
286
[9484]287//Override loader names (PEC, PE, W16ODIN)
288BOOL WIN32API ODIN_SetLoaders(LPCSTR pszPECmdLoader, LPCSTR pszPEGUILoader,
289 LPCSTR pszNELoader);
290
[9494]291//Returns path of loaders
292BOOL WIN32API ODIN_QueryLoaders(LPSTR pszPECmdLoader, INT cchPECmdLoader,
293 LPSTR pszPEGUILoader, INT cchPEGUILoader,
294 LPSTR pszNELoader, INT cchNELoader);
295
[9849]296//Checks whether program is LX or PE
297BOOL WIN32API ODIN_IsWin32App(LPSTR lpszProgramPath);
298
[9484]299//Custom build function to disable loading of LX dlls
300void WIN32API ODIN_DisableLXDllLoading();
301
[9829]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);
[9616]313
[9829]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
[9616]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
[9829]344
[9616]345//******************************************************************************
346// ODIN_SetProcAddress: Override a dll export
[9829]347//
[9616]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
[9798]359//******************************************************************************
360// ODIN_SetTIBSwitch: override TIB switching
[9829]361//
[9798]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
[9898]370//******************************************************************************
371// ODIN_DisableFolderShellLink
372//
[9909]373// Disable object creation in Odin folder. Desktop shortcuts will still be
[9898]374// created as WPS objects on the desktop.
375//
376//******************************************************************************
377void WIN32API ODIN_DisableFolderShellLink();
378
[9900]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.
[9909]387//
[9900]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.
[9909]401//
[9900]402//******************************************************************************
403void WIN32API ODIN_waveInSetFixedBuffers();
404
[9909]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
[10294]416void WIN32API ODIN_SetExceptionHandler(void *pExceptionRegRec);
417void WIN32API ODIN_UnsetExceptionHandler(void *pExceptionRegRec);
418
[10237]419/* Turn on CD Polling (window with 2 second timer to check CD disk presence) */
420void WIN32API CustEnableCDPolling();
[9909]421
[10379]422void WIN32API SetFreeTypeIntegration(BOOL fEnabled);
[10294]423
[10444]424// Special function to change dwords in the startup structure of a process
425void WINAPI ODIN_SetProcessDword( DWORD dwProcessID, INT offset, DWORD value );
[10379]426
[10490]427void WIN32API ODIN_SetPostscriptPassthrough(BOOL fEnable);
428
[10379]429//PE headers of system dlls
430#ifdef __cplusplus
[10294]431extern "C" {
[10379]432#endif
[10294]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;
[10379]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;
[10420]468extern IMAGE_FILE_HEADER nt_mciwave_header;
[10456]469extern IMAGE_FILE_HEADER nt_urlmon_header;
[10490]470extern IMAGE_FILE_HEADER nt_netapi32_header;
[10379]471#ifdef __cplusplus
472}
473#endif
[10294]474
[7061]475#endif /*__CUSTOMBUILD_H__*/
476
Note: See TracBrowser for help on using the repository browser.