windows-nt/Source/XPSP1/NT/sdktools/debuggers/imagehlp/vc/sapi.h
2020-09-26 16:20:57 +08:00

347 lines
9.5 KiB
C

// SAPI.H - Private header file for SAPI
//
// DESCRIPTION
// This file contains types that are private to the SAPI project.
#ifndef _SAPI_INCLUDED_
#define _SAPI_INCLUDED_
typedef HIND HEXR; // A handle to an EXR (exe 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
#include <stdlib.h>
#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
typedef SYMTYPE *SYMPTR;
typedef CFLAGSYM *CFLAGPTR;
typedef CONSTSYM *CONSTPTR;
typedef REGSYM *REGPTR;
typedef UDTSYM *UDTPTR;
typedef SEARCHSYM *SEARCHPTR;
typedef BLOCKSYM16 *BLOCKPTR16;
typedef DATASYM16 *DATAPTR16;
typedef PUBSYM16 *PUBPTR16;
typedef LABELSYM16 *LABELPTR16;
typedef BPRELSYM16 *BPRELPTR16;
typedef PROCSYM16 *PROCPTR16;
typedef THUNKSYM16 *THUNKPTR16;
typedef CEXMSYM16 *CEXMPTR16;
typedef VPATHSYM16 *VPATHPTR16;
typedef WITHSYM16 *WITHPTR16;
typedef BLOCKSYM32 *BLOCKPTR32;
typedef DATASYM32 *DATAPTR32;
typedef PUBSYM32 *PUBPTR32;
typedef LABELSYM32 *LABELPTR32;
typedef BPRELSYM32 *BPRELPTR32;
typedef PROCSYM32 *PROCPTR32;
typedef PROCSYMMIPS *PROCPTRMIPS;
typedef THUNKSYM32 *THUNKPTR32;
typedef CEXMSYM32 *CEXMPTR32;
typedef WITHSYM32 *WITHPTR32;
typedef VPATHSYM32 *VPATHPTR32;
typedef BLOCKSYM *BLOCKPTR;
typedef PROCSYM *PROCPTR;
typedef THUNKSYM *THUNKPTR;
typedef WITHSYM *WITHPTR;
// End of CVDEF defines
typedef struct _PDS {
HLLI hlliExe;
HPID hpid;
} PDS; // PiD Struct
typedef PDS * PPDS;
typedef PDS * LPPDS;
typedef union _UFOP {
DWORD lfo;
PVOID lpv;
} UFOP; // Union of long File Offset & Pointer
typedef UFOP *LPUFOP;
typedef struct _ALM {
BOOL fSeq;
WORD btAlign;
WORD cbBlock;
DWORD cb;
LPB pbData;
UFOP rgufop [1];
// WORD cbLast; // After a null terminator, there is a field
// containing the cb of the last align block
} ALM; // ALigned Map
typedef ALM *LPALM;
typedef struct _ULP {
DWORD ib; // Byte offset into the symbol table
DWORD ulId; // Identified (either a uoff or a checksum)
} ULP; // ULong Pair
typedef ULP *LPULP;
typedef struct _SHT {
WORD HashIndex;
WORD ccib; // count of buckets [0..n)
DWORD * rgcib; // count of ULPs in chain i, 0 <= i < n
DWORD * rgib; // offset of start of chain i, 0 <= i < n
LPALM lpalm; // block of ULPs
} SHT; // Symbol Hash Table
typedef SHT *LPSHT;
typedef struct _GST {
LPALM lpalm;
SHT shtName;
SHT shtAddr;
#if CC_CVTYPE32
SymConvertInfo sci;
#endif
} GST; // Global Symbol Table -- Globals, Publics, or Statics
typedef GST *LPGST;
typedef struct _SGC {
WORD seg;
DWORD off;
DWORD cb;
} SGC; // SeGment Contributer
typedef SGC *LPSGC;
typedef struct _SGE {
SGC sgc;
HMOD hmod;
} SGE; // SeGment directory Entry
typedef SGE *LPSGE;
typedef struct _SGD {
WORD csge;
LPSGE lpsge;
} SGD; // SeGment Directory
typedef SGD *LPSGD;
typedef struct _MDS {
HEXG hexg; // EXG parent of MDS list
WORD imds;
DWORD cbSymbols;
LPB symbols;
HST hst;
LSZ name;
DWORD ulhst;
DWORD cbhst;
DWORD ulsym;
WORD csgc;
LPSGC lpsgc;
Mod* pmod; // NB10
#if CC_CVTYPE32
SymConvertInfo sci; // necessary info to keep around while
// loading symbols that need to be
// converted.
#endif
} MDS; // MoDule Information
typedef MDS *PMDS;
typedef MDS *LPMDS;
struct STAB;
typedef struct STAB STAB;
typedef struct _EXG {
BOOL fOmfLoaded:1;
BOOL fOmfMissing:1;
BOOL fOmfSkipped:1;
BOOL fOmfDefered:1;
BOOL fOmfLoading:1;
BOOL fIsPE:1;
BOOL fIsRisc:1;
BOOL fSymConverted:1;
SHE sheLoadStatus; // Load status: defered, startup, etc
SHE sheLoadError; // Load error
LONGLONG llUnload;
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
LSZ lszAltName; // Alternate name (for KD debugging)
LPB lpbData; // Pointer to raw data for this image (non-PDB)
LPB lpgsi; // GSN Info table
PVOID pvSymMappedBase;
PDB * ppdb;
DBI * pdbi;
TPI * ptpi;
GSI * pgsiPubs; // public symbols
GSI * pgsiGlobs; // globals
LPALM lpalmTypes; // Types table
DWORD citd; // Number of types
DWORD * rgitd; // Array of pointers to types
GST gstPublics;
GST gstGlobals;
GST gstStatics;
STAB * pstabUDTSym;
WORD csgd; // Segment Directory
LPSGD lpsgd;
LPSGE lpsge;
DWORD cMod; // Count of modules (count of sstModule should = sstFileIndex.cmodules)
LPB lpefi; // Pointer to raw file index (for freeing)
WORD * rgiulFile; // List of beginning index of module
// file lists.
WORD * rgculFile; // List of counts of module file lists
DWORD * rgichFile; // Index into string table of file names
DWORD 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
WORD cRef; // Reference count on this image
LPMDS rgMod; // Array of module contributions.
DWORD LoadAddress; // Bass address for this image
DWORD ulTimeStamp; // Timestamp from the image
DWORD ulCheckSum; // Checksum from the image
WidenTi * pwti; // for converting all of this exe's types
// and syms to 32-bit type indices
} EXG; // EXe structure Global
typedef EXG *PEXG;
typedef EXG * LPEXG;
typedef struct _EXE {
HPDS hpds; // PID of process
HEXG hexg;
DWORD timestamp;
DWORD TargetMachine;
BOOL fIsLoaded;
DWORD LoadAddress;
LPDEBUGDATA pDebugData;
} EXE; // EXE struct
typedef EXE *PEXE;
typedef EXE *LPEXE;
typedef struct _LBS {
ADDR addr;
HMOD tagMod;
SYMPTR tagLoc;
SYMPTR tagLab;
SYMPTR tagProc;
SYMPTR tagThunk;
CEXMPTR16 tagModelMin;
CEXMPTR16 tagModelMax;
} LBS; // LaBel Structure ???
typedef LBS *PLBS;
typedef LBS *LPLBS;
#define NEXTSYM(a,b) ((a) (((LPB) (b)) + ((SYMPTR) (b))->reclen + 2))
// 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 *LPOFP;
typedef struct OPT {
UOFFSET offStart;
LPOFP lpofp;
} OPT; // Offset Pair Table -- used to maintain start/end offset pairs
typedef OPT *LPOPT;
typedef char * (* CONVERTPROC) (HANDLE, char *);
typedef struct _LINECACHE {
HSF hsf;
DWORD wLine;
ADDR addr;
SHOFF cbLn;
DWORD rgw[2];
BOOL fRet;
WORD rgiLn[2];
} LINECACHE;
extern LINECACHE LineCache;
// hexe <--> hmod map cache
typedef struct _MODCACHE {
HMOD hmod;
HEXE hexe;
HPDS hpds;
} MODCACHE;
extern MODCACHE ModCache;
typedef struct _HSFCACHE {
HSF Hsf;
HMOD Hmod;
} HSFCACHE;
extern HSFCACHE HsfCache;
typedef struct _CXTCACHE {
HMOD hmod;
HGRP hgrp;
HEXE hexe;
HPDS hpds;
WORD seg;
UOFFSET uoffBase;
UOFFSET uoffLim;
} CXTCACHE;
extern CXTCACHE CxtCache;
typedef struct _SLCACHE {
char szFile[ _MAX_CVPATH ];
HEXE hexe;
HMOD hmod;
WORD line;
LPSLP lpslp;
int cslp;
} SLCACHE;
extern SLCACHE SlCache;
typedef struct _ADDRCACHE {
ADDR addr;
DWORD wLine;
int cb;
} ADDRCACHE;
extern ADDRCACHE AddrCache;
//
// Matching criteria for DLL list
//
typedef enum _MATCH_CRIT {
MATCH_FULLPATH, // Match full path
MATCH_FILENAME, // Match filename
MATCH_BASENAME // Match base name (no extension)
} MATCH_CRIT;
#if 0
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)
#endif
#define cbAlign 0x1000
#define cbAlignType 0xC000
#endif // _SAPI_INCLUDED_