Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// LELDR.H
//
// (C) Copyright Microsoft Corp., 1988-1994
//
// Header file for the PE Loader
//
// Origin: Dos Extender
//
// Change history:
//
// Date Who Description
// --------- --------- -------------------------------------------------
// 3-Dec-90 GeneA Created
// 15-Feb-94 JonT Code cleanup and precompiled headers
/************************************************************************/
/* ------------------------------------------------------------ */ /* Loader Data Structures */ /* ------------------------------------------------------------ */
/* Module table flag definitions.
*/
#define fModInUse 0x80000000
//#define fModImports 0x00000001 /* module imports have been done */
#define fModReloc 0x00000002 /* module not at default RVA */
#define fModMaster 0x00000004 /* has clone data in another MTE */
#define fTellGDI 0x00000008 /* notify GDI when it goes away */
#define fModPreload 0x00000010 /* loaded from floppy, preload it */
#define fModNoClone 0x00000020 /* we have renamed this running module, don't clone in other process */
typedef struct _tagMTE { WORD flFlags; // module status flags
WORD usageShared; // number of copies in 16 bit/global mem arena
LEH * plehMod; // pointer to LE Header for this module
/*
* CFH_ID struc in object.h */ CFH_ID cfhid; // cfhid.szFilename and cfhid.fsAccessDos
char * szName; // module name string (within szFileName)
WORD iFileNameLen; // fast filename search
WORD iNameLen; // fast name search
DFH dfhFile; // handle of open file for paging
DWORD NumberOfSections;// count of sections in object
DWORD ** ppObjReloc; // pointer to table of pointers
DWORD ImageBase; // desired image base
WORD hModuleK16; // Kernel16 dummy hModule for this module
WORD usage; // Number of processes module used in
MODREF * plstPdb; // List of PDBs using this module
char * szFileName83; // short name equ. of cfhid.lpFileName
WORD iFileNameLen83; // "" length
char * szName83; // short name w/o path
WORD iNameLen83; // its length for quick exclusionary tests
} MTE;
extern MTE ** pmteModTable; extern IMTE imteMax;
/* Error location structure. This is used by FMapErrorLoc to return
** information about the module in which a fault occured. */
typedef struct _tagELS { WORD imte; DWORD iote; char * szFileName; DWORD offError; } ELS;
#define SHARED_BASE_ADDRESS MINSHAREDLADDR /* Start of shared heap */
/* ------------------------------------------------------------ */ /* Procedure Declarations */ /* ------------------------------------------------------------ */
GLOBAL BOOL KERNENTRY FNotifyProgram(void); GLOBAL BOOL KERNENTRY ReserveStaticTLS(void); GLOBAL VOID KERNENTRY FreeUnusedModules(LST *plstProc); GLOBAL LEH * KERNENTRY PlehFromImte (IMTE imte); GLOBAL LEH * KERNENTRY PlehFromHLib(HANDLE hLib); GLOBAL WORD KERNENTRY GetHModK16FromHModK32(HANDLE hmod); GLOBAL VOID * KERNENTRY PvExportFromOrdinal (LEH *pleh, DWORD ord); GLOBAL VOID * KERNENTRY PvExportFromName (LEH *pleh, DWORD ipchHint, char *szName); GLOBAL VOID KERNENTRY NotifyThreadAttach(void); GLOBAL VOID KERNENTRY NotifyThreadDetach(void); GLOBAL VOID KERNENTRY DetachProcessModules(PDB *ppdb); GLOBAL VOID KERNENTRY RecycleProcessModules(PDB *ppdb); GLOBAL BOOL KERNENTRY FMapErrorLoc(VOID *pvErr, ELS *pels); GLOBAL VOID KERNENTRY DumpStackFrames(DWORD dwErrLoc, DWORD dwFrame); GLOBAL VOID KERNENTRY LogStackDump(DWORD dwErrLoc, DWORD dwFrame);
#if DEBUG
#define GrabDll() EnterSysLevel(&GetCurrentPdb()->crstLoadLock);
#define GrabMod() EnterSysLevel(Krn32Lock);
GLOBAL void KERNENTRY CheckDll(void);
#define CheckMod() ConfirmSysLevel(Krn32Lock);
#define CheckNotMod() CheckNotSysLevel(Krn32Lock);
GLOBAL void KERNENTRY CheckDllOrMod(void);
#else
#define GrabDll() EnterSysLevel(&GetCurrentPdb()->crstLoadLock);
#define GrabMod() EnterSysLevel(Krn32Lock);
#define CheckDll()
#define CheckMod()
#define CheckNotMod()
#define CheckDllOrMod()
#endif
#define ReleaseDll() LeaveSysLevel(&GetCurrentPdb()->crstLoadLock);
#define ReleaseMod() LeaveSysLevel(Krn32Lock);
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/************************************************************************/
|