mirror of https://github.com/lianthony/NT4.0
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.
302 lines
8.1 KiB
302 lines
8.1 KiB
/*** SAPI.H - Private header file for SAPI
|
|
*
|
|
* DESCRIPTION
|
|
* This file contains types that are private to the SAPI project.
|
|
*/
|
|
|
|
|
|
typedef HIND HEXR; //* A handle to an EXR (exs reference)
|
|
typedef HIND HEXG; //* A handle to an EXG (exe structure global)
|
|
typedef HVOID HST; //* A handle to source module table
|
|
typedef HVOID HSL; //* A handle to source line table
|
|
typedef HVOID HFL; //* A handle to an instance of a file
|
|
|
|
#define hmodNull ((HMOD)NULL)
|
|
#define hexgNull ((HEXG)NULL)
|
|
#define hexrNull ((HEXR)NULL)
|
|
#define hexeNull ((HEXE)NULL)
|
|
#define hpdsNull ((HPDS)NULL)
|
|
|
|
#define MDS_INDEX 1L
|
|
|
|
|
|
/****** The following are defs stolen from CVDEF ************************/
|
|
|
|
#if defined(DOS5) || defined(WIN32)
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define INCL_NOPM
|
|
#define _MAX_CVPATH _MAX_PATH /* max. length of full pathname */
|
|
#define _MAX_CVDRIVE _MAX_DRIVE /* max. length of drive component */
|
|
#define _MAX_CVDIR _MAX_DIR /* max. length of path component */
|
|
#define _MAX_CVFNAME _MAX_FNAME /* max. length of file name component */
|
|
#define _MAX_CVEXT _MAX_EXT /* max. length of extension component */
|
|
|
|
#else
|
|
|
|
#define _MAX_CVPATH 144 /* max. length of full pathname */
|
|
#define _MAX_CVDRIVE 3 /* max. length of drive component */
|
|
#define _MAX_CVDIR 130 /* max. length of path component */
|
|
#define _MAX_CVFNAME 32 /* max. length of file name component */
|
|
#define _MAX_CVEXT 5 /* max. length of extension component */
|
|
|
|
#endif
|
|
|
|
typedef SYMTYPE FAR *SYMPTR;
|
|
typedef CFLAGSYM FAR *CFLAGPTR;
|
|
typedef CONSTSYM FAR *CONSTPTR;
|
|
typedef REGSYM FAR *REGPTR;
|
|
typedef UDTSYM FAR *UDTPTR;
|
|
typedef SEARCHSYM FAR *SEARCHPTR;
|
|
typedef BLOCKSYM16 FAR *BLOCKPTR16;
|
|
typedef DATASYM16 FAR *DATAPTR16;
|
|
typedef PUBSYM16 FAR *PUBPTR16;
|
|
typedef LABELSYM16 FAR *LABELPTR16;
|
|
typedef BPRELSYM16 FAR *BPRELPTR16;
|
|
typedef PROCSYM16 FAR *PROCPTR16;
|
|
typedef THUNKSYM16 FAR *THUNKPTR16;
|
|
typedef CEXMSYM16 FAR *CEXMPTR16;
|
|
typedef VPATHSYM16 FAR *VPATHPTR16;
|
|
typedef WITHSYM16 FAR *WITHPTR16;
|
|
|
|
typedef BLOCKSYM32 FAR *BLOCKPTR32;
|
|
typedef DATASYM32 FAR *DATAPTR32;
|
|
typedef PUBSYM32 FAR *PUBPTR32;
|
|
typedef LABELSYM32 FAR *LABELPTR32;
|
|
typedef BPRELSYM32 FAR *BPRELPTR32;
|
|
typedef PROCSYM32 FAR *PROCPTR32;
|
|
typedef PROCSYMMIPS FAR *PROCPTRMIPS;
|
|
typedef THUNKSYM32 FAR *THUNKPTR32;
|
|
typedef CEXMSYM32 FAR *CEXMPTR32;
|
|
typedef WITHSYM32 FAR *WITHPTR32;
|
|
typedef VPATHSYM32 FAR *VPATHPTR32;
|
|
|
|
typedef BLOCKSYM FAR *BLOCKPTR;
|
|
typedef PROCSYM FAR *PROCPTR;
|
|
typedef THUNKSYM FAR *THUNKPTR;
|
|
typedef WITHSYM FAR *WITHPTR;
|
|
|
|
/****** End of CVDEF defines ********************************************/
|
|
|
|
typedef struct _PDS {
|
|
HLLI hlliExs;
|
|
HPID hpid;
|
|
} PDS; // PiD Struct
|
|
typedef PDS * PPDS;
|
|
typedef PDS FAR * LPPDS;
|
|
|
|
typedef union _UFOP {
|
|
ULONG lfo;
|
|
LPV lpv;
|
|
} UFOP; // Union of long File Offset & far Pointer
|
|
typedef UFOP FAR *LPUFOP;
|
|
|
|
typedef struct _ALM {
|
|
BOOL fSeq;
|
|
WORD btAlign;
|
|
WORD cbBlock;
|
|
LSZ lszFileName;
|
|
ULONG cb;
|
|
UFOP rgufop [ ];
|
|
// WORD cbLast; // After a null terminator, there is a field
|
|
// containing the cb of the last align block
|
|
} ALM; // ALigned Map
|
|
typedef ALM FAR *LPALM;
|
|
|
|
typedef struct _ULP {
|
|
ULONG ib; // Byte offset into the symbol table
|
|
ULONG ulId; // Identified (either a uoff or a checksum)
|
|
} ULP; // ULong Pair
|
|
typedef ULP FAR *LPULP;
|
|
|
|
typedef struct _SHT {
|
|
WORD HashIndex;
|
|
WORD ccib;
|
|
LPUL rgcib;
|
|
LPUL rgib;
|
|
LPALM lpalm;
|
|
} SHT; // Symbol Hash Table
|
|
typedef SHT FAR *LPSHT;
|
|
|
|
typedef struct _GST {
|
|
LPALM lpalm;
|
|
SHT shtName;
|
|
SHT shtAddr;
|
|
} GST; // Global Symbol Table -- Globals, Publics, or Statics
|
|
typedef GST FAR *LPGST;
|
|
|
|
typedef struct _SGC {
|
|
WORD seg;
|
|
ULONG off;
|
|
ULONG cb;
|
|
} SGC; // SeGment Contributer
|
|
typedef SGC FAR *LPSGC;
|
|
|
|
typedef struct _SGE {
|
|
SGC sgc;
|
|
HMOD hmod;
|
|
} SGE; // SeGment directory Entry
|
|
typedef SGE FAR *LPSGE;
|
|
|
|
typedef struct _SGD {
|
|
WORD csge;
|
|
LPSGE lpsge;
|
|
} SGD; // SeGment Directory
|
|
typedef SGD FAR *LPSGD;
|
|
|
|
typedef struct _EXG {
|
|
BOOL fOmfLoaded;
|
|
BOOL fIsPE;
|
|
LSZ lszName; // File name of exe
|
|
LSZ lszModule; // Module name of exe
|
|
LSZ lszDebug; // File name for debug info
|
|
LSZ lszPdbName; // File name of pdb
|
|
HLLI hlliMds; // List of modules
|
|
HLLI hlliExr; // List of Exs's that refer to this exg
|
|
LPB lpgsi; // GSN Info table
|
|
|
|
HMOD FAR *rghmod;
|
|
|
|
#ifdef HOST32 // {
|
|
PDB* ppdb;
|
|
DBI* pdbi;
|
|
TPI* ptpi;
|
|
GSI* pgsiPubs; // public symbols
|
|
GSI* pgsiGlobs; // globals
|
|
#endif //}
|
|
LPALM lpalmTypes; // Types table
|
|
ULONG citd; // Number of types
|
|
LONG _HUGE_ *rgitd; // Array of pointers to types
|
|
GST gstPublics;
|
|
GST gstGlobals;
|
|
GST gstStatics;
|
|
WORD csgd; // Segment Directory
|
|
LPSGD lpsgd;
|
|
LPSGE lpsge;
|
|
WORD cmod; // Count of modules
|
|
LPB lpefi; // Pointer to raw file index (for freeing)
|
|
WORD FAR *rgiulFile; // List of beginning index of module
|
|
// file lists.
|
|
WORD FAR *rgculFile; // List of counts of module file lists
|
|
ULONG *rgichFile; // Index into string table of file names
|
|
ULONG cbFileNames; // Number of bytes in string table of file
|
|
// names (lpchFileNames)
|
|
LPCH lpchFileNames; // String table of file names
|
|
DEBUGDATA debugData; // OSDEBUG4 information pdata/omap/fpo
|
|
DWORD basePdata; // Base address for pdata -- fixup if moved
|
|
} EXG; // EXe structure Global
|
|
typedef EXG *PEXG;
|
|
typedef EXG FAR * LPEXG;
|
|
|
|
typedef struct _EXR {
|
|
HPDS hpds;
|
|
HEXE hexe;
|
|
} EXR; // EXs Reference
|
|
typedef EXR *PEXR;
|
|
typedef EXR FAR *LPEXR;
|
|
|
|
typedef struct _EXS {
|
|
HPDS hpds; // PID of process
|
|
HEXG hexg;
|
|
WORD fIsLoaded;
|
|
WORD wDSCur;
|
|
WORD wDSNew;
|
|
long timestamp;
|
|
} EXS; // EXe Struct
|
|
typedef EXS *PEXS;
|
|
typedef EXS FAR *LPEXS;
|
|
|
|
typedef struct _MDS {
|
|
HEXG hexg; // EXG parent of MDS list
|
|
WORD imds;
|
|
|
|
WORD csgc;
|
|
LPSGC lpsgc;
|
|
|
|
ULONG cbSymbols;
|
|
|
|
LPB symbols;
|
|
HST hst;
|
|
LSZ name;
|
|
|
|
ULONG ulhst;
|
|
ULONG cbhst;
|
|
|
|
ULONG ulsym;
|
|
|
|
#ifdef HOST32 // {
|
|
Mod* pmod; // NB10
|
|
#endif
|
|
} MDS; // MoDule Information
|
|
typedef MDS *PMDS;
|
|
typedef MDS FAR *LPMDS;
|
|
|
|
typedef struct _LBS {
|
|
ADDR addr;
|
|
HMOD tagMod;
|
|
SYMPTR tagLoc;
|
|
SYMPTR tagLab;
|
|
SYMPTR tagProc;
|
|
CEXMPTR16 tagModelMin;
|
|
CEXMPTR16 tagModelMax;
|
|
} LBS; // LaBel Structure ???
|
|
typedef LBS *PLBS;
|
|
typedef LBS FAR *LPLBS;
|
|
|
|
#define NEXTSYM(a,b) ((a) (((LPB) (b)) + ((SYMPTR) (b))->reclen + 2))
|
|
|
|
#if defined(_WIN32)
|
|
#include "shwin32.h"
|
|
#endif
|
|
|
|
#define MEMMOVE _fmemmove
|
|
#define MEMSET _fmemset
|
|
#define MEMCMP _fmemcmp
|
|
#define MEMCPY _fmemcpy
|
|
|
|
//
|
|
// New Source Line table handling and maintenance
|
|
//
|
|
|
|
typedef struct _OFP {
|
|
UOFFSET offStart;
|
|
UOFFSET offEnd;
|
|
} OFP; // OFset Pair -- used to maintain start/end offset pairs
|
|
typedef OFP FAR *LPOFP;
|
|
|
|
typedef struct OPT {
|
|
UOFFSET offStart;
|
|
LPOFP lpofp;
|
|
} OPT; // Offset Pair Table -- used to maintain start/end offset pairs
|
|
typedef OPT FAR *LPOPT;
|
|
|
|
// Structure to cross-check validity of the .dbg file
|
|
typedef struct _VLDCHK {
|
|
DWORD TimeDateStamp;
|
|
DWORD CheckSum;
|
|
} VLDCHK;
|
|
typedef VLDCHK FAR *LPVLDCHK;
|
|
|
|
|
|
VOID PASCAL InvalidateSLCache(VOID); // Called when dlls get [un]loaded to ensure
|
|
// that we don't continue using stale entries.
|
|
|
|
|
|
INT FHOpen ( LSZ );
|
|
#define FHRead(fh,lpb,cb) ( SYReadFar ( fh, lpb, cb ) )
|
|
#define FHClose(fh)
|
|
#define FHSeek(fh,ib) ( SYSeek ( fh, ib, SEEK_SET ) )
|
|
#define SYError() assert(FALSE)
|
|
|
|
#define cbAlign 0x1000
|
|
#define cbAlignType 0xC000
|
|
|
|
LPALM PASCAL BuildALM ( BOOL, WORD, LSZ, ULONG, ULONG, WORD );
|
|
VOID PASCAL FixAlign ( LPB, LPV, WORD );
|
|
LPV PASCAL LpvFromAlmLfo ( LPALM, ULONG );
|
|
SYMPTR PASCAL GetNextSym ( LSZ, SYMPTR );
|
|
|
|
HSYM PASCAL FindNameInStatics ( HSYM, PCXT, LPSSTR, SHFLAG, PFNCMP, PCXT );
|
|
|
|
LPV PASCAL GetSymbols ( LPMDS );
|