source: trunk/src/kernel32/windllbase.h@ 3721

Last change on this file since 3721 was 3704, checked in by phaller, 25 years ago

Fix: StarCraft STORM.DLL requires reserved DllEntryPoint parameter

File size: 4.2 KB
Line 
1/* $Id: windllbase.h,v 1.3 2000-06-14 02:27:33 phaller Exp $ */
2
3/*
4 * Win32 Dll base class
5 *
6 * Copyright 1998-1999 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#ifndef __WINDLLBASE_H__
13#define __WINDLLBASE_H__
14
15#include <winimagebase.h>
16#include <odinlx.h>
17#include <vmutex.h>
18
19#ifndef HINSTANCE
20#define HINSTANCE ULONG
21#endif
22
23#define DLL_PROCESS_ATTACH 1
24#define DLL_THREAD_ATTACH 2
25#define DLL_THREAD_DETACH 3
26#define DLL_PROCESS_DETACH 0
27
28#define DONT_RESOLVE_DLL_REFERENCES 0x00000001
29#define LOAD_LIBRARY_AS_DATAFILE 0x00000002
30#define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008
31
32//odin.ini section names to lookup renamed dlls
33//i.e. OLE32 -> OLE32OS2
34#define DLLRENAMEWIN_SECTION "DLLRENAMEWIN"
35//i.e. OLE32OS2 -> OLE32
36#define DLLRENAMEOS2_SECTION "DLLRENAMEOS2"
37
38class Win32DllBase : public virtual Win32ImageBase
39{
40public:
41 Win32DllBase(HINSTANCE hInstance, WIN32DLLENTRY DllEntryPoint, Win32ImageBase *parent = NULL);
42virtual ~Win32DllBase();
43
44#ifdef DEBUG
45virtual ULONG AddRef(char *parentname = NULL);
46#else
47virtual ULONG AddRef();
48#endif
49virtual ULONG Release();
50
51 char *getName() { return szModule; };
52 void setNoEntryCalls() { fSkipEntryCalls = TRUE; };
53
54 Win32DllBase *getNext() { return next; };
55static Win32DllBase *getFirst();
56
57//Send DLL_THREAD_ATTACH message to all dlls for a new thread
58static void attachThreadToAllDlls();
59
60//Send DLL_THREAD_DETACH message to all dlls for thread that's about to die
61static void detachThreadFromAllDlls();
62
63//Setup TLS structure for all dlls for a new thread
64static void tlsAttachThreadToAllDlls();
65
66//Destroy TLS structure for all dlls for a thread that's about to die
67static void tlsDetachThreadFromAllDlls();
68
69 BOOL attachProcess();
70 BOOL detachProcess();
71 BOOL attachThread();
72 BOOL detachThread();
73
74 // enable / disable thread attach/detach calls
75 void setThreadLibraryCalls(BOOL fEnable);
76
77 //This counter is incremented when the dll has been loaded with LoadLibrary(Ex)
78 //(== not loaded on behalf of another dll or the main exe)
79 void incDynamicLib();
80 void decDynamicLib();
81 BOOL isDynamicLib() { return nrDynamicLibRef != 0; };
82
83 void setUnloadOrder(Win32ImageBase *parent);
84
85 void updateDependencies();
86
87 BOOL RemoveCircularDependency(Win32DllBase *parent);
88
89 // Loaded by DosLoadModule
90virtual void setLoadLibrary() { fLoadLibrary = TRUE; };
91
92 // isLoaded returns TRUE when a dll has been loaded with DosLoadModule
93virtual BOOL isLoaded() { return fLoadLibrary; };
94
95 //Should only be called to make sure DosLoadModule is called at least
96 //once for a dll (to make sure OS/2 doesn't unload the dll when it's
97 //still needed)
98virtual void loadLibrary();
99
100 //Only called for kernel32
101 void DisableUnload() { fDisableUnload = TRUE; };
102
103static void deleteDynamicLibs();
104static void deleteAll();
105
106static BOOL isSystemDll(char *szFileName);
107
108virtual BOOL isLxDll() = 0;
109virtual BOOL isDll();
110
111static void renameDll(char *dllname, BOOL fWinToOS2=TRUE);
112static void setDefaultRenaming();
113
114static Win32DllBase *findModule(char *dllname, BOOL fRenameFirst = FALSE);
115static Win32DllBase *findModule(HINSTANCE hinstance);
116static Win32DllBase *findModule(WIN32DLLENTRY DllEntryPoint);
117static Win32DllBase *findModuleByAddr(ULONG address);
118
119#ifdef DEBUG_ENABLELOG_LEVEL2
120 void printListOfDlls();
121#endif
122
123protected:
124#ifdef DEBUG
125 void printDependencies(char *parent);
126#endif
127
128 BOOL fSkipEntryCalls, fUnloaded, fAttachedToProcess;
129
130 WIN32DLLENTRY dllEntryPoint;
131
132 LONG referenced;
133
134 //This counter is incremented when the dll has been loaded with LoadLibrary(Ex)
135 //(== not loaded on behalf of another dll or the main exe)
136 BOOL nrDynamicLibRef;
137
138 BOOL fInserted; //inserted in dll list
139
140 //This flag is set when a dll has been loaded with DosLoadModule
141 BOOL fLoadLibrary;
142 BOOL fDisableUnload;
143
144private:
145static Queue loadLibDlls;
146static Win32DllBase *head;
147 Win32DllBase *next;
148};
149
150extern VMutex dlllistmutex; //protects linked lists of heaps
151
152#endif
Note: See TracBrowser for help on using the repository browser.