[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] | 32 | typedef BOOL (WIN32API *PFN_PRECUSTOMIZE)();
|
---|
| 33 | typedef BOOL (WIN32API *PFN_POSTCUSTOMIZE)();
|
---|
| 34 | typedef BOOL (WIN32API *PFN_ENDCUSTOMIZE)();
|
---|
[10379] | 35 | typedef BOOL (WIN32API *PFN_ISPESTUBLOADER)(char *pszProgram);
|
---|
[10294] | 36 |
|
---|
| 37 | typedef struct {
|
---|
| 38 | char *szWindowsFont;
|
---|
| 39 | char *szPMFont;
|
---|
| 40 | } CUSTOMBUILD_FONTMAP;
|
---|
| 41 |
|
---|
| 42 | typedef 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 |
|
---|
| 48 | typedef struct {
|
---|
| 49 | char *szName;
|
---|
| 50 | PFN_INITDLL pfnInitterm;
|
---|
| 51 | } CUSTOMBUILD_PRIVATE_INITTERM;
|
---|
| 52 |
|
---|
| 53 | typedef 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] | 103 | typedef 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 |
|
---|
| 142 | BOOL WIN32API LoadCustomEnvironment(CUSTOMBUILD_COMMON *CustomBuild);
|
---|
| 143 | BOOL WIN32API UnloadCustomEnvironment(BOOL fExitList);
|
---|
| 144 |
|
---|
| 145 | BOOL WIN32API InitExecutableEnvironment();
|
---|
| 146 | BOOL WIN32API CheckCustomDllVersion(ULONG ulVersionMajor, ULONG ulVersionMinor);
|
---|
| 147 |
|
---|
| 148 | typedef BOOL (* WIN32API PFN_CHECKDLLVERSION)();
|
---|
| 149 | BOOL WIN32API CheckDllVersion();
|
---|
| 150 |
|
---|
[7061] | 151 | extern BOOL fCustomBuild;
|
---|
| 152 |
|
---|
[10294] | 153 | void WIN32API SetRegistryRootKey(HKEY hRootkey, HKEY hKey);
|
---|
[10379] | 154 | #ifdef __cplusplus
|
---|
| 155 | void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh = NULL);
|
---|
| 156 | #else
|
---|
| 157 | void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh);
|
---|
| 158 | #endif
|
---|
[10294] | 159 |
|
---|
[9596] | 160 | void WIN32API InitDirectoriesCustom(char *szSystemDir, char *szWindowsDir);
|
---|
[7061] | 161 |
|
---|
[9596] | 162 | void WIN32API DisableOdinIni();
|
---|
[7061] | 163 |
|
---|
[9596] | 164 | void WIN32API DisableOdinSysMenuItems();
|
---|
[7246] | 165 |
|
---|
[9596] | 166 |
|
---|
[7763] | 167 | typedef HANDLE (* WIN32API PFNDRVOPEN)(LPVOID lpDriverData, DWORD dwAccess, DWORD dwShare, DWORD dwFlags, PVOID *ppHandleData);
|
---|
| 168 | typedef void (* WIN32API PFNDRVCLOSE)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
|
---|
| 169 | typedef 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] | 175 | typedef 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] | 185 | typedef 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] | 195 | typedef BOOL (* WIN32API PFNDRVCANCELIO)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
|
---|
[9829] | 196 | typedef 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] | 204 | BOOL 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] | 210 | BOOL 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] | 221 | HHOOK WIN32API SetOdinHookA(HOOKPROC proc );
|
---|
| 222 | BOOL WIN32API UnhookOdinHook(HHOOK hhook);
|
---|
| 223 | LRESULT HOOK_CallOdinHookA(INT code, WPARAM wParam, LPARAM lParam );
|
---|
[7247] | 224 |
|
---|
[8112] | 225 | //Override LoadImage function
|
---|
| 226 | typedef void (* WIN32API PFNLOADIMAGEW)(HINSTANCE *phinst, LPWSTR *lplpszName, UINT *lpuType);
|
---|
[7251] | 227 |
|
---|
[8112] | 228 | BOOL WIN32API SetCustomLoadImage(PFNLOADIMAGEW pfnLoadImageW);
|
---|
[8012] | 229 |
|
---|
[7251] | 230 | //Set the default language in kernel32
|
---|
| 231 | void WIN32API SetDefaultLanguage(DWORD deflang);
|
---|
| 232 |
|
---|
[7621] | 233 | //Override pm keyboard hook dll name
|
---|
| 234 | void WIN32API SetCustomPMHookDll(LPSTR pszKbdDllName);
|
---|
[7251] | 235 |
|
---|
[8736] | 236 | void WIN32API DisableDragDrop(BOOL fDisabled);
|
---|
[8733] | 237 |
|
---|
[7674] | 238 | //Turn off wave audio in winmm
|
---|
| 239 | void WIN32API DisableWaveAudio();
|
---|
[9980] | 240 | //Turn off usage of the Uniaud DirectAudio interface
|
---|
| 241 | void 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)
|
---|
| 245 | void 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)
|
---|
| 249 | void WIN32API SetCustomMMapSemName(LPSTR pszSemName);
|
---|
| 250 |
|
---|
[10379] | 251 | //Override std class names used in Odin
|
---|
| 252 | void WIN32API SetCustomStdClassName(LPSTR pszStdClassName);
|
---|
| 253 | char *WIN32API QueryCustomStdClassName();
|
---|
[9964] | 254 |
|
---|
[8095] | 255 | //Turn off ASPI
|
---|
| 256 | void WIN32API DisableASPI();
|
---|
| 257 |
|
---|
[7943] | 258 | //force color to mono cursor conversion
|
---|
| 259 | void WIN32API CustForceMonoCursor();
|
---|
| 260 |
|
---|
[8408] | 261 | //force GetVolumeInformation to tell the app all partitions are FAT
|
---|
| 262 | void WIN32API CustForce2GBFileSize();
|
---|
| 263 |
|
---|
[8833] | 264 | //Logging of exceptions:
|
---|
| 265 | //Override filename of exception log (expects full path)
|
---|
| 266 | void WIN32API SetCustomExceptionLog(LPSTR lpszLogName);
|
---|
| 267 | //Enable/disable exception logging
|
---|
| 268 | void WIN32API SetExceptionLogging(BOOL fEnable);
|
---|
| 269 |
|
---|
[8929] | 270 | //Disable OS2CDROM.DMD aspi support
|
---|
| 271 | void WIN32API DisableCDIo();
|
---|
[8833] | 272 |
|
---|
[8987] | 273 | //Force DirectDraw to report only one fullscreen mode
|
---|
| 274 | void WIN32API SetCustomFullScreenMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
|
---|
| 275 |
|
---|
[9156] | 276 | //Force DirectSurface Lock & Unlock methods to hide & show the mouse cursor
|
---|
| 277 | BOOL WIN32API SetCustomHideCursorOnLock(BOOL state);
|
---|
| 278 |
|
---|
[9302] | 279 | //Call to enable access to physical disks or volumes (default is disabled)
|
---|
| 280 | void WIN32API EnablePhysicalDiskAccess(BOOL fEnable);
|
---|
| 281 |
|
---|
[9829] | 282 | //Override a system color without forcing a desktop repaint (which
|
---|
[9444] | 283 | //SetSysColors does)
|
---|
| 284 | BOOL WIN32API ODIN_SetSysColors(INT nChanges, const INT *lpSysColor,
|
---|
| 285 | const COLORREF *lpColorValues);
|
---|
| 286 |
|
---|
[9484] | 287 | //Override loader names (PEC, PE, W16ODIN)
|
---|
| 288 | BOOL WIN32API ODIN_SetLoaders(LPCSTR pszPECmdLoader, LPCSTR pszPEGUILoader,
|
---|
| 289 | LPCSTR pszNELoader);
|
---|
| 290 |
|
---|
[9494] | 291 | //Returns path of loaders
|
---|
| 292 | BOOL 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
|
---|
| 297 | BOOL WIN32API ODIN_IsWin32App(LPSTR lpszProgramPath);
|
---|
| 298 |
|
---|
[9484] | 299 | //Custom build function to disable loading of LX dlls
|
---|
| 300 | void 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 | */
|
---|
| 312 | typedef BOOL (* WIN32API PFNLXDLLLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
|
---|
[9616] | 313 |
|
---|
[9829] | 314 | /** Custombuild API for registering a callback for LX Dll loading thru LoadLibrary*(). */
|
---|
| 315 | BOOL 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 | */
|
---|
| 332 | typedef void (* WIN32API PFNLXDLLUNLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
|
---|
| 333 |
|
---|
| 334 | BOOL 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 | //******************************************************************************
|
---|
| 340 | typedef void (* WIN32API ODINPROC_DLLLOAD)(HMODULE hModule);
|
---|
| 341 |
|
---|
| 342 | BOOL 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 | //******************************************************************************
|
---|
| 357 | FARPROC 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 | //******************************************************************************
|
---|
| 368 | void 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 | //******************************************************************************
|
---|
| 377 | void 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 | //******************************************************************************
|
---|
| 389 | void 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 | //******************************************************************************
|
---|
| 403 | void WIN32API ODIN_waveInSetFixedBuffers();
|
---|
| 404 |
|
---|
[9909] | 405 |
|
---|
[10616] | 406 | /** @defgroup odin32_threadctx Odin32 Thread Context
|
---|
| 407 | * @{ */
|
---|
| 408 | #pragma pack(1)
|
---|
| 409 | /** Saved odin/os2 thread context.
|
---|
| 410 | * (This structure is 32 bytes, there is assembly workers which depends on this size.)
|
---|
| 411 | */
|
---|
| 412 | typedef struct _ODINTHREADCTX
|
---|
| 413 | {
|
---|
| 414 | /** Flags. */
|
---|
| 415 | unsigned fFlags;
|
---|
| 416 | /** Saved fs selector. */
|
---|
| 417 | unsigned short fs;
|
---|
| 418 | /** FPU control word. */
|
---|
| 419 | unsigned short cw;
|
---|
| 420 | /** Exception registration record. */
|
---|
| 421 | unsigned XctpRegRec[2];
|
---|
| 422 | /** Reserved for future use. */
|
---|
| 423 | unsigned aReserved[4];
|
---|
| 424 | } ODINTHREADCTX, *PODINTHREADCTX;
|
---|
| 425 | #pragma pack()
|
---|
| 426 |
|
---|
| 427 | /** @defgroup odin32_threadctx_flags Odin32 Thread Context Flags
|
---|
| 428 | * These flags are used to direct what is done and saved on a switch. The flags
|
---|
| 429 | * passed to the save function will be stored in fFlags of ODINTHREADCTX.
|
---|
| 430 | * @{ */
|
---|
| 431 | /** Default switch from OS/2 to Odin32 context. */
|
---|
| 432 | #define OTCTXF_DEF_TO_OS2 (OTCTXF_ENTER_OS2 | OTCTXF_LOAD_OS2 | OTCTXF_MAYBE_NESTED | OTCTXF_SAVE_FPU)
|
---|
| 433 | /** Default switch from OS/2 to Odin32 context. */
|
---|
| 434 | #define OTCTXF_DEF_TO_ODIN32 (OTCTXF_ENTER_ODIN32 | OTCTXF_LOAD_ODIN32 | OTCTXF_MAYBE_NESTED | OTCTXF_SAVE_FPU)
|
---|
| 435 |
|
---|
| 436 | /** Perhaps this is a nested enter and/or leave. (advisory only) */
|
---|
| 437 | #define OTCTXF_MAYBE_NESTED 0x0001
|
---|
| 438 | /** Enter OS/2 context from Odin32 context. */
|
---|
| 439 | #define OTCTXF_ENTER_OS2 (0x0002 | OTCTXF_SAVE_FS | OTCTXF_SAVE_FPU)
|
---|
| 440 | /** Enter Odin32 context from OS/2 context. */
|
---|
| 441 | #define OTCTXF_ENTER_ODIN32 (0x0004 | OTCTXF_SAVE_FS | OTCTXF_SAVE_FPU)
|
---|
| 442 | /** Load Default OS/2 context. */
|
---|
| 443 | #define OTCTXF_LOAD_OS2 (0x0008 | OTCTXF_LOAD_FS_OS2 | OTCTXF_LOAD_FPU_OS2 | OTCTXF_LOAD_XCPT_OS2)
|
---|
| 444 | /** Load Default Odin32 context. */
|
---|
| 445 | #define OTCTXF_LOAD_ODIN32 (0x0010 | OTCTXF_LOAD_FS_ODIN32 | OTCTXF_LOAD_FPU_ODIN32 | OTCTXF_LOAD_XCPT_ODIN32)
|
---|
| 446 |
|
---|
| 447 | /** Save FS. */
|
---|
| 448 | #define OTCTXF_SAVE_FS 0x0100
|
---|
| 449 | /** Load OS/2 FS. */
|
---|
| 450 | #define OTCTXF_LOAD_FS_OS2 0x0200
|
---|
| 451 | /** Load Odin32 FS. */
|
---|
| 452 | #define OTCTXF_LOAD_FS_ODIN32 0x0400
|
---|
| 453 | /** Save FPU control word. */
|
---|
| 454 | #define OTCTXF_SAVE_FPU 0x0800
|
---|
| 455 | /** Load OS/2 FPU control word. */
|
---|
| 456 | #define OTCTXF_LOAD_FPU_OS2 0x1000
|
---|
| 457 | /** Load Odin32 FPU control word. */
|
---|
| 458 | #define OTCTXF_LOAD_FPU_ODIN32 0x2000
|
---|
| 459 | /** Install OS/2 exception handler. (not implemented) */
|
---|
| 460 | #define OTCTXF_LOAD_XCPT_OS2 0x4000
|
---|
| 461 | /** Install Odin32 exception handler. */
|
---|
| 462 | #define OTCTXF_LOAD_XCPT_ODIN32 0x8000
|
---|
| 463 | /** @} */
|
---|
| 464 |
|
---|
| 465 | /** Save thread context and/or load other thread context.
|
---|
| 466 | * @param pCtx Where to save the current thread context.
|
---|
| 467 | * @param fFlags Flags telling what to do.
|
---|
| 468 | */
|
---|
| 469 | void WIN32API ODIN_ThreadContextSave(PODINTHREADCTX pCtx, unsigned fFlags);
|
---|
| 470 |
|
---|
| 471 | /** Restore saved thread context and/or do additional loads.
|
---|
| 472 | * @param pCtx Where to save the current thread context.
|
---|
| 473 | * (This will be zero'ed.)
|
---|
| 474 | * @param fFlags Flags telling extra stuff to load.
|
---|
| 475 | * Only CTCTXF_LOAD_* flags will be evaluated.
|
---|
| 476 | */
|
---|
| 477 | void WIN32API ODIN_ThreadContextRestore(PODINTHREADCTX pCtx, unsigned fFlags);
|
---|
| 478 |
|
---|
| 479 |
|
---|
| 480 | /** Enter odin context with this thread.
|
---|
| 481 | * @deprecated */
|
---|
[9909] | 482 | USHORT WIN32API ODIN_ThreadEnterOdinContext(void *pExceptionRegRec, BOOL fForceFSSwitch);
|
---|
[10616] | 483 | /** Leave odin context with this thread.
|
---|
| 484 | * @deprecated */
|
---|
[9909] | 485 | void WIN32API ODIN_ThreadLeaveOdinContext(void *pExceptionRegRec, USHORT selFSOld);
|
---|
| 486 |
|
---|
[10616] | 487 | /** Leave odin context to call back into OS/2 code.
|
---|
| 488 | * @deprecated */
|
---|
[9909] | 489 | USHORT WIN32API ODIN_ThreadLeaveOdinContextNested(void *pExceptionRegRec, BOOL fRemoveOdinExcpt);
|
---|
[10616] | 490 | /** Re-enter Odin context after being back in OS/2 code.
|
---|
| 491 | * @deprecated */
|
---|
[9909] | 492 | void WIN32API ODIN_ThreadEnterOdinContextNested(void *pExceptionRegRec, BOOL fRestoreOdinExcpt, USHORT selFSOld);
|
---|
| 493 |
|
---|
[10616] | 494 | /** @} */
|
---|
| 495 |
|
---|
[10294] | 496 | void WIN32API ODIN_SetExceptionHandler(void *pExceptionRegRec);
|
---|
| 497 | void WIN32API ODIN_UnsetExceptionHandler(void *pExceptionRegRec);
|
---|
| 498 |
|
---|
[10237] | 499 | /* Turn on CD Polling (window with 2 second timer to check CD disk presence) */
|
---|
| 500 | void WIN32API CustEnableCDPolling();
|
---|
[9909] | 501 |
|
---|
[10379] | 502 | void WIN32API SetFreeTypeIntegration(BOOL fEnabled);
|
---|
[10294] | 503 |
|
---|
[10444] | 504 | // Special function to change dwords in the startup structure of a process
|
---|
| 505 | void WINAPI ODIN_SetProcessDword( DWORD dwProcessID, INT offset, DWORD value );
|
---|
[10379] | 506 |
|
---|
[10490] | 507 | void WIN32API ODIN_SetPostscriptPassthrough(BOOL fEnable);
|
---|
[10616] | 508 | BOOL WIN32API ODIN_QueryPostscriptPassthrough();
|
---|
[10490] | 509 |
|
---|
[10379] | 510 | //PE headers of system dlls
|
---|
| 511 | #ifdef __cplusplus
|
---|
[10294] | 512 | extern "C" {
|
---|
[10379] | 513 | #endif
|
---|
[10294] | 514 | extern IMAGE_FILE_HEADER nt_ntdll_header;
|
---|
| 515 | extern IMAGE_FILE_HEADER nt_gdi32_header;
|
---|
| 516 | extern IMAGE_FILE_HEADER nt_kernel32_header;
|
---|
| 517 | extern IMAGE_FILE_HEADER nt_user32_header;
|
---|
| 518 | extern IMAGE_FILE_HEADER nt_advapi32_header;
|
---|
| 519 | extern IMAGE_FILE_HEADER nt_version_header;
|
---|
| 520 | extern IMAGE_FILE_HEADER nt_wsock32_header;
|
---|
| 521 | extern IMAGE_FILE_HEADER nt_ws2_32_header;
|
---|
| 522 | extern IMAGE_FILE_HEADER nt_winmm_header;
|
---|
| 523 | extern IMAGE_FILE_HEADER nt_ole32_header;
|
---|
| 524 | extern IMAGE_FILE_HEADER nt_comctl32_header;
|
---|
| 525 | extern IMAGE_FILE_HEADER nt_shell32_header;
|
---|
| 526 | extern IMAGE_FILE_HEADER nt_comdlg32_header;
|
---|
| 527 | extern IMAGE_FILE_HEADER nt_winspool_header;
|
---|
| 528 | extern IMAGE_FILE_HEADER nt_ddraw_header;
|
---|
| 529 | extern IMAGE_FILE_HEADER nt_oleaut32_header;
|
---|
| 530 | extern IMAGE_FILE_HEADER nt_msvfw32_header;
|
---|
| 531 | extern IMAGE_FILE_HEADER nt_imm32_header;
|
---|
| 532 | extern IMAGE_FILE_HEADER nt_mpr_header;
|
---|
| 533 | extern IMAGE_FILE_HEADER nt_iphlpapi_header;
|
---|
| 534 | extern IMAGE_FILE_HEADER nt_olepro32_header;
|
---|
| 535 | extern IMAGE_FILE_HEADER nt_msvcrt_header;
|
---|
| 536 | extern IMAGE_FILE_HEADER nt_lz32_header;
|
---|
| 537 | extern IMAGE_FILE_HEADER nt_oledlg_header;
|
---|
| 538 | extern IMAGE_FILE_HEADER nt_riched32_header;
|
---|
| 539 | extern IMAGE_FILE_HEADER nt_psapi_header;
|
---|
| 540 | extern IMAGE_FILE_HEADER nt_rpcrt4_header;
|
---|
| 541 | extern IMAGE_FILE_HEADER nt_shlwapi_header;
|
---|
| 542 | extern IMAGE_FILE_HEADER nt_shfolder_header;
|
---|
| 543 | extern IMAGE_FILE_HEADER nt_wininet_header;
|
---|
[10379] | 544 | extern IMAGE_FILE_HEADER nt_olepro32_header;
|
---|
| 545 | extern IMAGE_FILE_HEADER nt_avifil32_header;
|
---|
| 546 | extern IMAGE_FILE_HEADER nt_dinput_header;
|
---|
| 547 | extern IMAGE_FILE_HEADER nt_dsound_header;
|
---|
| 548 | extern IMAGE_FILE_HEADER nt_uxtheme_header;
|
---|
[10420] | 549 | extern IMAGE_FILE_HEADER nt_mciwave_header;
|
---|
[10456] | 550 | extern IMAGE_FILE_HEADER nt_urlmon_header;
|
---|
[10490] | 551 | extern IMAGE_FILE_HEADER nt_netapi32_header;
|
---|
[10616] | 552 | extern IMAGE_FILE_HEADER nt_winscard_header;
|
---|
| 553 | extern IMAGE_FILE_HEADER nt_shdocvw_header;
|
---|
[10379] | 554 | #ifdef __cplusplus
|
---|
| 555 | }
|
---|
| 556 | #endif
|
---|
[10294] | 557 |
|
---|
[7061] | 558 | #endif /*__CUSTOMBUILD_H__*/
|
---|
| 559 |
|
---|