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.
|
|
// 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_
|