source: branches/gcc-kmk/include/custombuild.h@ 21733

Last change on this file since 21733 was 21733, checked in by dmik, 14 years ago

Create lnitdll.lib to hold common DLL init/term code.

This simplifies creating init/term functions for individual DLLs
a lot and keeps common parts in a single place instead of duplicating
them a zillion times.

File size: 21.6 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#define ENABLE_POSTSCRIPT_PASSTHROUGH "EnablePostscriptPassthrough"
12
13#define ODIN_WIN32_CDCLASS "Win32CDWindowClass"
14#define ODIN_WIN32_STDCLASS "Win32WindowClass"
15
16#define DUMMY_PREFIX "DUMMY_"
17
18#define MAX_FONT_MAPPINGS 8
19#define MAX_REGISTER_DLLS 64
20
21#define INNOWIN_DLLNAME "INNOWIN.DLL"
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"
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
32typedef BOOL (WIN32API *PFN_PRECUSTOMIZE)();
33typedef BOOL (WIN32API *PFN_POSTCUSTOMIZE)();
34typedef BOOL (WIN32API *PFN_ENDCUSTOMIZE)();
35typedef BOOL (WIN32API *PFN_ISPESTUBLOADER)(char *pszProgram);
36
37typedef ULONG (APIENTRY *PFN_INITDLL)(ULONG hModule, ULONG ulFlag);
38typedef void (APIENTRY *PFN_CLEANUPDLL)(ULONG ulReason);
39
40typedef struct {
41 char *szWindowsFont;
42 char *szPMFont;
43} CUSTOMBUILD_FONTMAP;
44
45typedef struct {
46 char *szName; //caps, including extension (e.g. "KERNEL32.DLL")
47 PIMAGE_FILE_HEADER pfh; //PE file header
48 PFN_INITDLL pfnInitterm;
49} CUSTOMBUILD_DLL;
50
51typedef struct {
52 char *szName;
53 PFN_INITDLL pfnInitterm;
54} CUSTOMBUILD_PRIVATE_INITTERM;
55
56typedef struct {
57 PFN_PRECUSTOMIZE pfnPreCustomize; //called after kernel32 is initialized
58 PFN_POSTCUSTOMIZE pfnPostCustomize; //called at the end of dll load
59 PFN_ENDCUSTOMIZE pfnEndCustomize; //called when dll is unloaded
60
61 char *szCustomBuildDllName;
62
63 char *szRegistryBase;
64 char *szMemMapName;
65 char *szEnvExceptLogDisable;
66 char *szEnvExceptLogPath;
67 char *szPMWindowClassName;
68 char *szWindowHandleSemName;
69
70 //standard kernel32 settings
71 DWORD dwWindowsVersion;
72 BOOL fOdinIni;
73 BOOL fSMP;
74
75 //standard user32 settings
76 BOOL fDragDrop;
77 BOOL fOdinSysMenuItems;
78 DWORD dwWindowAppearance;
79 BOOL fMonoCursor;
80
81 //standard gdi32 settings
82 //font mappings (null terminated)
83 CUSTOMBUILD_FONTMAP fontMapping[MAX_FONT_MAPPINGS];
84 BOOL fFreeType;
85
86 //winmm
87 BOOL fDirectAudio;
88 BOOL fWaveAudio;
89
90 //first three important dlls (initialized in this order
91 CUSTOMBUILD_DLL dllNtdll;
92 CUSTOMBUILD_DLL dllKernel32;
93 CUSTOMBUILD_DLL dllUser32;
94 CUSTOMBUILD_DLL dllGdi32;
95
96 //list of remainder of registered dlls (order is important due to dependencies!!)
97 //(null terminated)
98 CUSTOMBUILD_DLL registeredDll[MAX_REGISTER_DLLS];
99
100 //list of dummy dlls (to prevent accidental load)
101 //(null terminated)
102 CUSTOMBUILD_DLL dummyDll[MAX_REGISTER_DLLS];
103
104} CUSTOMBUILD;
105
106typedef struct {
107 PFN_PRECUSTOMIZE pfnPreCustomize; //called after kernel32, user32 and gdi32 are initialized
108 PFN_POSTCUSTOMIZE pfnPostCustomize; //called at the end of dll load
109 PFN_ENDCUSTOMIZE pfnEndCustomize; //called when dll is unloaded
110 PFN_ISPESTUBLOADER pfnIsPeStubLoader;
111
112 char *szCustomBuildDllName;
113
114 char *szRegistryBase;
115 char *szEnvExceptLogDisable;
116 char *szEnvExceptLogPath;
117
118 //standard kernel32 settings
119 DWORD dwWindowsVersion;
120 BOOL fOdinIni;
121 BOOL fSMP;
122
123 //standard user32 settings
124 BOOL fDragDrop;
125 BOOL fOdinSysMenuItems;
126 DWORD dwWindowAppearance;
127 BOOL fMonoCursor;
128
129 //standard gdi32 settings
130 //font mappings (null terminated)
131 CUSTOMBUILD_FONTMAP fontMapping[MAX_FONT_MAPPINGS];
132 BOOL fFreeType;
133
134 //winmm
135 BOOL fDirectAudio;
136 BOOL fWaveAudio;
137
138 //list of remainder of registered dlls (order is important due to dependencies!!)
139 //(null terminated)
140 //(NTDLL, KERNEL32, USER32 and GDI32 are always registered)
141 CUSTOMBUILD_DLL registeredDll[MAX_REGISTER_DLLS];
142
143} CUSTOMBUILD_COMMON;
144
145BOOL WIN32API LoadCustomEnvironment(CUSTOMBUILD_COMMON *CustomBuild);
146BOOL WIN32API UnloadCustomEnvironment(BOOL fExitList);
147
148BOOL WIN32API InitExecutableEnvironment();
149BOOL WIN32API CheckCustomDllVersion(ULONG ulVersionMajor, ULONG ulVersionMinor);
150
151typedef BOOL (* WIN32API PFN_CHECKDLLVERSION)();
152BOOL WIN32API CheckDllVersion();
153
154extern BOOL fCustomBuild;
155
156void WIN32API SetRegistryRootKey(HKEY hRootkey, HKEY hKey);
157#ifdef __cplusplus
158void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh = NULL);
159#else
160void WIN32API SetCustomBuildName(char *lpszName, PIMAGE_FILE_HEADER pfh);
161#endif
162
163void WIN32API InitDirectoriesCustom(char *szSystemDir, char *szWindowsDir);
164
165void WIN32API DisableOdinIni();
166
167void WIN32API DisableOdinSysMenuItems();
168
169
170typedef HANDLE (* WIN32API PFNDRVOPEN)(LPVOID lpDriverData, DWORD dwAccess, DWORD dwShare, DWORD dwFlags, PVOID *ppHandleData);
171typedef void (* WIN32API PFNDRVCLOSE)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
172typedef BOOL (* WIN32API PFNDRVIOCTL)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, DWORD dwIoControlCode,
173 LPVOID lpInBuffer, DWORD nInBufferSize,
174 LPVOID lpOutBuffer, DWORD nOutBufferSize,
175 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped,
176 LPVOID lpHandleData);
177
178typedef BOOL (* WIN32API PFNDRVREAD)(LPVOID lpDriverData,
179 HANDLE hDevice,
180 DWORD dwFlags,
181 LPCVOID lpBuffer,
182 DWORD nNumberOfBytesToRead,
183 LPDWORD lpNumberOfBytesRead,
184 LPOVERLAPPED lpOverlapped,
185 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
186 LPVOID lpHandleData);
187
188typedef BOOL (* WIN32API PFNDRVWRITE)(LPVOID lpDriverData,
189 HANDLE hDevice,
190 DWORD dwFlags,
191 LPCVOID lpBuffer,
192 DWORD nNumberOfBytesToWrite,
193 LPDWORD lpNumberOfBytesWrite,
194 LPOVERLAPPED lpOverlapped,
195 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
196 LPVOID lpHandleData);
197
198typedef BOOL (* WIN32API PFNDRVCANCELIO)(LPVOID lpDriverData, HANDLE hDevice, DWORD dwFlags, PVOID lpHandleData);
199typedef DWORD (* WIN32API PFNDRVGETOVERLAPPEDRESULT)(LPVOID lpDriverData,
200 HANDLE hDevice,
201 DWORD dwFlags,
202 LPOVERLAPPED lpOverlapped,
203 LPDWORD lpcbTransfer,
204 BOOL fWait,
205 LPVOID lpHandleData);
206
207BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
208 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
209 PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
210 PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
211 LPCSTR lpDriverName, LPVOID lpDriverData);
212
213BOOL WIN32API UnRegisterCustomDriver(LPCSTR lpDriverName);
214
215
216//SetDialogHook can be used by a custom Odin build to register a hook procedure
217//that gets called before or after dialog creation
218
219#define HODIN_PREDIALOGCREATION 0
220#define HODIN_POSTDIALOGCREATION 1
221#define HODIN_WINDOWCREATED 2
222#define HODIN_PREWINDOWCREATEDA 3
223
224HHOOK WIN32API SetOdinHookA(HOOKPROC proc );
225BOOL WIN32API UnhookOdinHook(HHOOK hhook);
226LRESULT HOOK_CallOdinHookA(INT code, WPARAM wParam, LPARAM lParam );
227
228//Override LoadImage function
229typedef void (* WIN32API PFNLOADIMAGEW)(HINSTANCE *phinst, LPWSTR *lplpszName, UINT *lpuType);
230
231BOOL WIN32API SetCustomLoadImage(PFNLOADIMAGEW pfnLoadImageW);
232
233//Set the default language in kernel32
234void WIN32API SetDefaultLanguage(DWORD deflang);
235
236//Override pm keyboard hook dll name
237void WIN32API SetCustomPMHookDll(LPSTR pszKbdDllName);
238
239void WIN32API DisableDragDrop(BOOL fDisabled);
240
241//Turn off wave audio in winmm
242void WIN32API DisableWaveAudio();
243//Turn off usage of the Uniaud DirectAudio interface
244void WIN32API DisableDirectAudio();
245
246//Override shared semaphore name used to synchronize global window handle
247//array access (to avoid name clash with Odin)
248void WIN32API SetCustomWndHandleSemName(LPSTR pszSemName);
249
250//Override shared semaphore name used to synchronize global memory map
251//list access (to avoid name clash with Odin)
252void WIN32API SetCustomMMapSemName(LPSTR pszSemName);
253
254//Override std class names used in Odin
255void WIN32API SetCustomStdClassName(LPSTR pszStdClassName);
256const char *WIN32API QueryCustomStdClassName();
257
258//Turn off ASPI
259void WIN32API DisableASPI();
260
261//force color to mono cursor conversion
262void WIN32API CustForceMonoCursor();
263
264//force GetVolumeInformation to tell the app all partitions are FAT
265void WIN32API CustForce2GBFileSize();
266
267//Logging of exceptions:
268//Override filename of exception log (expects full path)
269void WIN32API SetCustomExceptionLog(LPSTR lpszLogName);
270//Enable/disable exception logging
271void WIN32API SetExceptionLogging(BOOL fEnable);
272
273//Disable OS2CDROM.DMD aspi support
274void WIN32API DisableCDIo();
275
276//Force DirectDraw to report only one fullscreen mode
277void WIN32API SetCustomFullScreenMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
278
279//Force DirectSurface Lock & Unlock methods to hide & show the mouse cursor
280BOOL WIN32API SetCustomHideCursorOnLock(BOOL state);
281
282//Call to enable access to physical disks or volumes (default is disabled)
283void WIN32API EnablePhysicalDiskAccess(BOOL fEnable);
284
285//Override a system color without forcing a desktop repaint (which
286//SetSysColors does)
287BOOL WIN32API ODIN_SetSysColors(INT nChanges, const INT *lpSysColor,
288 const COLORREF *lpColorValues);
289
290//Override loader names (PEC, PE, W16ODIN)
291BOOL WIN32API ODIN_SetLoaders(LPCSTR pszPECmdLoader, LPCSTR pszPEGUILoader,
292 LPCSTR pszNELoader);
293
294//Returns path of loaders
295BOOL WIN32API ODIN_QueryLoaders(LPSTR pszPECmdLoader, INT cchPECmdLoader,
296 LPSTR pszPEGUILoader, INT cchPEGUILoader,
297 LPSTR pszNELoader, INT cchNELoader);
298
299//Checks whether program is LX or PE
300BOOL WIN32API ODIN_IsWin32App(LPSTR lpszProgramPath);
301
302//Custom build function to disable loading of LX dlls
303void WIN32API ODIN_DisableLXDllLoading();
304
305/**
306 * LoadLibrary*() callback function registered using ODIN_SetLxDllLoadCallback().
307 * This is called for all LX modules which are loaded by LoadLibrary.
308 *
309 * @returns TRUE loading should succeed. The DLL is now registered.
310 * @returns FALSE loading should fail.
311 * @param hmodOS2 The OS/2 module handle.
312 * @param hInstance The Odin instance handle.
313 * If not NULL this means that the DLL is registered.
314 */
315typedef BOOL (* WIN32API PFNLXDLLLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
316
317/** Custombuild API for registering a callback for LX Dll loading thru LoadLibrary*(). */
318BOOL WIN32API ODIN_SetLxDllLoadCallback(PFNLXDLLLOAD pfn);
319
320/**
321 * FreeLibrary*() callback function registered using ODIN_SetLxDllUnLoadCallback().
322 * This is called when an LX which was previously loaded using LoadLibrary*() is
323 * finally freed from Odin. The callback servers mainly the purpose of cleaning
324 * up any data associated with the DLL.
325 *
326 * It is called *AFTER* the module is freed from Odin but before it's actually
327 * unloaded from the OS/2 process. This means that the OS/2 handle is valid while
328 * the Odin handle is invalid.
329 *
330 * @param hmodOS2 The OS/2 module handle.
331 * @param hInstance The Odin instance handle (invalid!).
332 * @remark It likely that this callback will be called for more DLLs than the
333 * load callback. Do check handles properly.
334 */
335typedef void (* WIN32API PFNLXDLLUNLOAD)(HMODULE hmodOS2, HINSTANCE hInstance);
336
337BOOL WIN32API ODIN_SetLxDllUnLoadCallback(PFNLXDLLUNLOAD pfn);
338
339
340//******************************************************************************
341//Install a handler that is called before the entrypoint of a dll (DLL_PROCESS_ATTACH)
342//******************************************************************************
343typedef void (* WIN32API ODINPROC_DLLLOAD)(HMODULE hModule);
344
345BOOL WIN32API ODIN_SetDllLoadCallback(ODINPROC_DLLLOAD pfnMyDllLoad);
346
347
348//******************************************************************************
349// ODIN_SetProcAddress: Override a dll export
350//
351// Parameters:
352// HMODULE hModule Module handle
353// LPCSTR lpszProc Export name or ordinal
354// FARPROC pfnNewProc New export function address
355//
356// Returns: Success -> old address of export
357// Failure -> -1
358//
359//******************************************************************************
360FARPROC WIN32API ODIN_SetProcAddress(HMODULE hModule, LPCSTR lpszProc, FARPROC pfnNewProc);
361
362//******************************************************************************
363// ODIN_SetTIBSwitch: override TIB switching
364//
365// Parameters:
366// BOOL fSwitchTIB
367// FALSE -> no TIB selector switching
368// TRUE -> force TIB selector switching
369//
370//******************************************************************************
371void WIN32API ODIN_SetTIBSwitch(BOOL fSwitchTIB);
372
373//******************************************************************************
374// ODIN_DisableFolderShellLink
375//
376// Disable object creation in Odin folder. Desktop shortcuts will still be
377// created as WPS objects on the desktop.
378//
379//******************************************************************************
380void WIN32API ODIN_DisableFolderShellLink();
381
382//******************************************************************************
383// ODIN_waveOutSetFixedBuffers
384//
385// Tell WINMM to use DART buffers of the same size as the first buffer delivered
386// by waveOutWrite
387//
388// NOTE: This will only work in very specific cases; it is not a good general
389// purpose solution.
390//
391//******************************************************************************
392void WIN32API ODIN_waveOutSetFixedBuffers();
393
394#define SetFixedWaveBufferSize ODIN_waveOutSetFixedBuffers
395
396//******************************************************************************
397// ODIN_waveInSetFixedBuffers
398//
399// Tell WINMM to use DART buffers of the same size as the first buffer delivered
400// by waveInAddBuffer
401//
402// NOTE: This will only work in very specific cases; it is not a good general
403// purpose solution.
404//
405//******************************************************************************
406void WIN32API ODIN_waveInSetFixedBuffers();
407
408
409/** @defgroup odin32_threadctx Odin32 Thread Context
410 * @{ */
411#pragma pack(1)
412/** Saved odin/os2 thread context.
413 * (This structure is 32 bytes, there is assembly workers which depends on this size.)
414 */
415typedef struct _ODINTHREADCTX
416{
417 /** Flags. */
418 unsigned fFlags;
419 /** Saved fs selector. */
420 unsigned short fs;
421 /** FPU control word. */
422 unsigned short cw;
423 /** Exception registration record. */
424 unsigned XctpRegRec[2];
425 /** Reserved for future use. */
426 unsigned aReserved[4];
427} ODINTHREADCTX, *PODINTHREADCTX;
428#pragma pack()
429
430/** @defgroup odin32_threadctx_flags Odin32 Thread Context Flags
431 * These flags are used to direct what is done and saved on a switch. The flags
432 * passed to the save function will be stored in fFlags of ODINTHREADCTX.
433 * @{ */
434/** Default switch from OS/2 to Odin32 context. */
435#define OTCTXF_DEF_TO_OS2 (OTCTXF_ENTER_OS2 | OTCTXF_LOAD_OS2 | OTCTXF_MAYBE_NESTED | OTCTXF_SAVE_FPU)
436/** Default switch from OS/2 to Odin32 context. */
437#define OTCTXF_DEF_TO_ODIN32 (OTCTXF_ENTER_ODIN32 | OTCTXF_LOAD_ODIN32 | OTCTXF_MAYBE_NESTED | OTCTXF_SAVE_FPU)
438
439/** Perhaps this is a nested enter and/or leave. (advisory only) */
440#define OTCTXF_MAYBE_NESTED 0x0001
441/** Enter OS/2 context from Odin32 context. */
442#define OTCTXF_ENTER_OS2 (0x0002 | OTCTXF_SAVE_FS | OTCTXF_SAVE_FPU)
443/** Enter Odin32 context from OS/2 context. */
444#define OTCTXF_ENTER_ODIN32 (0x0004 | OTCTXF_SAVE_FS | OTCTXF_SAVE_FPU)
445/** Load Default OS/2 context. */
446#define OTCTXF_LOAD_OS2 (0x0008 | OTCTXF_LOAD_FS_OS2 | OTCTXF_LOAD_FPU_OS2 | OTCTXF_LOAD_XCPT_OS2)
447/** Load Default Odin32 context. */
448#define OTCTXF_LOAD_ODIN32 (0x0010 | OTCTXF_LOAD_FS_ODIN32 | OTCTXF_LOAD_FPU_ODIN32 | OTCTXF_LOAD_XCPT_ODIN32)
449
450/** Save FS. */
451#define OTCTXF_SAVE_FS 0x0100
452/** Load OS/2 FS. */
453#define OTCTXF_LOAD_FS_OS2 0x0200
454/** Load Odin32 FS. */
455#define OTCTXF_LOAD_FS_ODIN32 0x0400
456/** Save FPU control word. */
457#define OTCTXF_SAVE_FPU 0x0800
458/** Load OS/2 FPU control word. */
459#define OTCTXF_LOAD_FPU_OS2 0x1000
460/** Load Odin32 FPU control word. */
461#define OTCTXF_LOAD_FPU_ODIN32 0x2000
462/** Install OS/2 exception handler. (not implemented) */
463#define OTCTXF_LOAD_XCPT_OS2 0x4000
464/** Install Odin32 exception handler. */
465#define OTCTXF_LOAD_XCPT_ODIN32 0x8000
466/** @} */
467
468/** Save thread context and/or load other thread context.
469 * @param pCtx Where to save the current thread context.
470 * @param fFlags Flags telling what to do.
471 */
472void WIN32API ODIN_ThreadContextSave(PODINTHREADCTX pCtx, unsigned fFlags);
473
474/** Restore saved thread context and/or do additional loads.
475 * @param pCtx Where to save the current thread context.
476 * (This will be zero'ed.)
477 * @param fFlags Flags telling extra stuff to load.
478 * Only CTCTXF_LOAD_* flags will be evaluated.
479 */
480void WIN32API ODIN_ThreadContextRestore(PODINTHREADCTX pCtx, unsigned fFlags);
481
482
483/** Enter odin context with this thread.
484 * @deprecated */
485USHORT WIN32API ODIN_ThreadEnterOdinContext(void *pExceptionRegRec, BOOL fForceFSSwitch);
486/** Leave odin context with this thread.
487 * @deprecated */
488void WIN32API ODIN_ThreadLeaveOdinContext(void *pExceptionRegRec, USHORT selFSOld);
489
490/** Leave odin context to call back into OS/2 code.
491 * @deprecated */
492USHORT WIN32API ODIN_ThreadLeaveOdinContextNested(void *pExceptionRegRec, BOOL fRemoveOdinExcpt);
493/** Re-enter Odin context after being back in OS/2 code.
494 * @deprecated */
495void WIN32API ODIN_ThreadEnterOdinContextNested(void *pExceptionRegRec, BOOL fRestoreOdinExcpt, USHORT selFSOld);
496
497/** @} */
498
499void WIN32API ODIN_SetExceptionHandler(void *pExceptionRegRec);
500void WIN32API ODIN_UnsetExceptionHandler(void *pExceptionRegRec);
501
502/* Turn on CD Polling (window with 2 second timer to check CD disk presence) */
503void WIN32API CustEnableCDPolling();
504
505void WIN32API SetFreeTypeIntegration(BOOL fEnabled);
506
507// Special function to change dwords in the startup structure of a process
508void WINAPI ODIN_SetProcessDword( DWORD dwProcessID, INT offset, DWORD value );
509
510void WIN32API ODIN_SetPostscriptPassthrough(BOOL fEnable);
511BOOL WIN32API ODIN_QueryPostscriptPassthrough();
512
513//PE headers of system dlls
514#ifdef __cplusplus
515extern "C" {
516#endif
517extern IMAGE_FILE_HEADER nt_ntdll_header;
518extern IMAGE_FILE_HEADER nt_gdi32_header;
519extern IMAGE_FILE_HEADER nt_kernel32_header;
520extern IMAGE_FILE_HEADER nt_user32_header;
521extern IMAGE_FILE_HEADER nt_advapi32_header;
522extern IMAGE_FILE_HEADER nt_version_header;
523extern IMAGE_FILE_HEADER nt_wsock32_header;
524extern IMAGE_FILE_HEADER nt_ws2_32_header;
525extern IMAGE_FILE_HEADER nt_winmm_header;
526extern IMAGE_FILE_HEADER nt_ole32_header;
527extern IMAGE_FILE_HEADER nt_comctl32_header;
528extern IMAGE_FILE_HEADER nt_shell32_header;
529extern IMAGE_FILE_HEADER nt_comdlg32_header;
530extern IMAGE_FILE_HEADER nt_winspool_header;
531extern IMAGE_FILE_HEADER nt_ddraw_header;
532extern IMAGE_FILE_HEADER nt_oleaut32_header;
533extern IMAGE_FILE_HEADER nt_msvfw32_header;
534extern IMAGE_FILE_HEADER nt_imm32os2_header;
535extern IMAGE_FILE_HEADER nt_mpr_header;
536extern IMAGE_FILE_HEADER nt_iphlpapi_header;
537extern IMAGE_FILE_HEADER nt_olepro32_header;
538extern IMAGE_FILE_HEADER nt_msvcrt_header;
539extern IMAGE_FILE_HEADER nt_lz32_header;
540extern IMAGE_FILE_HEADER nt_oledlg_header;
541extern IMAGE_FILE_HEADER nt_riched32_header;
542extern IMAGE_FILE_HEADER nt_psapi_header;
543extern IMAGE_FILE_HEADER nt_rpcrt4_header;
544extern IMAGE_FILE_HEADER nt_shlwapi_header;
545extern IMAGE_FILE_HEADER nt_shfolder_header;
546extern IMAGE_FILE_HEADER nt_wininet_header;
547extern IMAGE_FILE_HEADER nt_olepro32_header;
548extern IMAGE_FILE_HEADER nt_avifil32_header;
549extern IMAGE_FILE_HEADER nt_dinput_header;
550extern IMAGE_FILE_HEADER nt_dsound_header;
551extern IMAGE_FILE_HEADER nt_uxtheme_header;
552extern IMAGE_FILE_HEADER nt_mciwave_header;
553extern IMAGE_FILE_HEADER nt_urlmon_header;
554extern IMAGE_FILE_HEADER nt_netapi32_header;
555extern IMAGE_FILE_HEADER nt_winscard_header;
556extern IMAGE_FILE_HEADER nt_shdocvw_header;
557#ifdef __cplusplus
558}
559#endif
560
561#endif /*__CUSTOMBUILD_H__*/
562
Note: See TracBrowser for help on using the repository browser.