Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

363 lines
13 KiB

/** eeapi.h - Public API to the Expression Evaluator
*
* This file contains all types and APIs that are defined by
* the Expression Evaluator and are publicly accessible by
* other components.
*
* Before including this file, you must include cvtypes.h and shapi.h
*/
/*** The master copy of this file resides in the CVINC project.
* All Microsoft projects are required to use the master copy without
* modification. Modification of the master version or a copy
* without consultation with all parties concerned is extremely
* risky.
*
* The projects known to use this version (1.00.00) are:
*
* Codeview (uses version in CVINC project)
* Visual C++
* C/C++ expression evaluator (uses version in CVINC project)
* Cobol expression evaluator
* QC/Windows
* Pascal 2.0 expression evaluator
*/
#ifndef _VC_VER_INC
#include "..\include\vcver.h"
#endif
#ifndef EE_API
#define EE_API
#ifdef __cplusplus
#pragma warning(disable: 4200) // "non-standard extension: zero-sized array"
#endif
// **********************************************************************
// * *
// * Initialization Structures *
// * *
// **********************************************************************
typedef struct {
void FAR * (LOADDS PASCAL *pMHlpvAlloc)( UINT );
void (LOADDS PASCAL *pMHFreeLpv)(void FAR *);
HEXE (LOADDS PASCAL *pSHGetNextExe)(HEXE);
HEXE (LOADDS PASCAL *pSHHexeFromHmod)(HMOD);
HMOD (LOADDS PASCAL *pSHGetNextMod)(HEXE, HMOD);
PCXT (LOADDS PASCAL *pSHGetCxtFromHmod)(HMOD, PCXT);
PCXT (LOADDS PASCAL *pSHSetCxt)(LPADDR, PCXT);
PCXT (LOADDS PASCAL *pSHSetCxtMod)(LPADDR, PCXT);
HSYM (LOADDS PASCAL *pSHFindNameInGlobal)(HSYM, PCXT, HVOID, SHFLAG, PFNCMP, SHFLAG, PCXT);
HSYM (LOADDS PASCAL *pSHFindNameInContext)(HSYM, PCXT, HVOID, SHFLAG, PFNCMP, SHFLAG, PCXT);
HSYM (LOADDS PASCAL *pSHGoToParent)(PCXT, PCXT);
HSYM (LOADDS PASCAL *pSHHsymFromPcxt)(PCXT);
HSYM (LOADDS PASCAL *pSHNextHsym)(HMOD, HSYM);
PCXF (LOADDS PASCAL *pSHGetFuncCxf)(LPADDR, PCXF);
char FAR * (LOADDS PASCAL *pSHGetModName)(HMOD);
char FAR * (LOADDS PASCAL *pSHGetExeName)(HEXE);
HEXE (LOADDS PASCAL *pSHGethExeFromName)(char FAR *);
UOFF32 (LOADDS PASCAL *pSHGetNearestHsym)(LPADDR, HMOD, int, PHSYM);
SHFLAG (LOADDS PASCAL *pSHIsInProlog)(PCXT);
SHFLAG (LOADDS PASCAL *pSHIsAddrInCxt)(PCXT, LPADDR);
UINT (LOADDS PASCAL *pSHModelFromAddr)(PADDR,LPW,LPB,UOFFSET FAR *);
HSYM (LOADDS PASCAL *pSHFindSLink32)( PCXT );
BOOL (LOADDS PASCAL *pSLLineFromAddr) ( LPADDR, unsigned short FAR *, SHOFF FAR *, SHOFF FAR * );
BOOL (LOADDS PASCAL *pSLFLineToAddr) ( HSF, WORD, LPADDR, SHOFF FAR *, WORD FAR * );
char FAR * (LOADDS PASCAL *pSLNameFromHsf) ( HSF );
HMOD (LOADDS PASCAL *pSLHmodFromHsf) ( HEXE, HSF );
HSF (LOADDS PASCAL *pSLHsfFromPcxt) ( PCXT );
HSF (LOADDS PASCAL *pSLHsfFromFile) ( HMOD, char FAR * );
UOFF32 (LOADDS PASCAL *pPHGetNearestHsym)(LPADDR, HEXE, PHSYM);
HSYM (LOADDS PASCAL *pPHFindNameInPublics)(HSYM, HEXE, HVOID, SHFLAG, PFNCMP);
HTYPE (LOADDS PASCAL *pTHGetTypeFromIndex)(HMOD, THIDX);
HTYPE (LOADDS PASCAL *pTHGetNextType)(HMOD, HTYPE);
HDEP (LOADDS PASCAL *pMHMemAllocate)(UINT);
HDEP (LOADDS PASCAL *pMHMemReAlloc)(HDEP, UINT);
void (LOADDS PASCAL *pMHMemFree)(HDEP);
HVOID (LOADDS PASCAL *pMHMemLock)(HDEP);
void (LOADDS PASCAL *pMHMemUnLock)(HDEP);
SHFLAG (LOADDS PASCAL *pMHIsMemLocked)(HDEP);
HVOID (LOADDS PASCAL *pMHOmfLock)(HVOID);
void (LOADDS PASCAL *pMHOmfUnLock)(HVOID);
SHFLAG (LOADDS PASCAL *pDHExecProc)(LPADDR, SHCALL);
UINT (LOADDS PASCAL *pDHGetDebuggeeBytes)(ADDR, UINT, void FAR *);
UINT (LOADDS PASCAL *pDHPutDebuggeeBytes)(ADDR, UINT, void FAR *);
PSHREG (LOADDS PASCAL *pDHGetReg)(PSHREG, PCXT);
PSHREG (LOADDS PASCAL *pDHSetReg)(PSHREG, PCXT);
HDEP (LOADDS PASCAL *pDHSaveReg)(PCXT);
void (LOADDS PASCAL *pDHRestoreReg)(HDEP, PCXT);
char FAR *pin386mode;
char FAR *pis_assign;
void (LOADDS PASCAL *pquit)(UINT);
ushort FAR *pArrayDefault;
SHFLAG (LOADDS PASCAL *pSHCompareRE)(char FAR *, char FAR *);
SHFLAG (LOADDS PASCAL *pSHFixupAddr)(LPADDR);
SHFLAG (LOADDS PASCAL *pSHUnFixupAddr)(LPADDR);
SHFLAG (LOADDS PASCAL *pCVfnCmp)(HVOID, HVOID, char FAR *, SHFLAG);
SHFLAG (LOADDS PASCAL *pCVtdCmp)(HVOID, HVOID, char FAR *, SHFLAG);
SHFLAG (LOADDS PASCAL *pCVcsCmp)(HVOID, HVOID, char FAR *, SHFLAG);
UINT (LOADDS PASCAL *pCVAssertOut)(char FAR *, char FAR *, UINT);
SHFLAG (LOADDS PASCAL *pDHSetupExecute)(LPHIND);
SHFLAG (LOADDS PASCAL *pDHCleanUpExecute)(HIND);
SHFLAG (LOADDS PASCAL *pDHStartExecute)(HIND, LPADDR, BOOL, SHCALL);
HSYM (LOADDS PASCAL *pSHFindNameInTypes)( PCXT, LPSSTR, SHFLAG , PFNCMP , PCXT );
} CVF; // CodeView kernel Functions exported to the Expression Evaluator
typedef CVF FAR * PCVF;
typedef struct {
short (CDECL *pintLoadDS)();
char NEAR * (CDECL *pultoa)(ulong, char NEAR *, int);
char NEAR * (CDECL *pitoa)(int, char NEAR *, int);
char NEAR * (CDECL *pltoa)(long, char NEAR *, int);
int (CDECL *peprintf)(const char FAR *, char FAR *, char FAR *, int);
int (CDECL *psprintf)(char NEAR *, const char FAR *, ...);
FLOAT10 (CDECL *p_strtold)( const char NEAR *, char NEAR * NEAR *);
} CRF; // C Runtime functions exported to the Expression Evaluator
typedef CRF FAR * PCRF;
typedef struct CI {
char cbCI;
char Version;
CVF FAR * pStructCVAPI;
CRF FAR * pStructCRuntime;
} CI;
typedef CI FAR * PCI;
typedef struct HDR_TYPE {
ushort offname;
ushort lenname;
ushort offtrail;
} HDR_TYPE;
typedef HDR_TYPE FAR *PHDR_TYPE;
// **********************************************************************
// * *
// * the expr evaluator stuff *
// * *
// **********************************************************************
typedef HDEP HSYML; //* An hsym list
typedef HSYML FAR * PHSYML; //* A pointer to a hsym list
typedef uint EERADIX;
typedef EERADIX FAR * PEERADIX;
typedef uchar FAR * PEEFORMAT;
typedef ushort EESTATUS;
typedef HDEP EEHSTR;
typedef EEHSTR FAR * PEEHSTR;
typedef HDEP HTM;
typedef HTM FAR * PHTM;
typedef HDEP HTI;
typedef HTI FAR * PHTI;
typedef HDEP HBCIA; // Base class index array.
typedef HBCIA FAR * PHBCIA;
// Error return values
#define EENOERROR 0
#define EENOMEMORY 1
#define EEGENERAL 2
#define EEBADADDR 3
#define EECATASTROPHIC 0XFF
typedef enum {
EEHORIZONTAL,
EEVERTICAL,
EEBPADDRESS
} EEDSP; // Display format specifier
typedef enum {
ETIPRIMITIVE,
ETIARRAY,
ETIPOINTER,
ETICLASS,
ETIFUNCTION
} ETI;
typedef ETI FAR *PETI;
typedef enum {
EENOTEXP,
EEAGGREGATE,
EETYPE,
EEPOINTER,
EETYPENOTEXP,
EETYPEPTR
} EEPDTYP;
typedef EEPDTYP FAR *PEEPDTYP;
typedef struct TML {
unsigned cTMListMax;
unsigned cTMListAct;
unsigned iTMError;
HDEP hTMList;
} TML;
typedef TML FAR *PTML;
typedef struct RTMI {
ushort fSegType :1;
ushort fAddr :1;
ushort fValue :1;
ushort fSzBits :1;
ushort fSzBytes :1;
ushort fLvalue :1;
ushort fSynthChild :1;
ushort fLabel :1;
ushort Type;
} RTMI;
typedef RTMI FAR * PRI;
typedef struct TMI {
RTMI fResponse;
struct {
ushort SegType :4;
ushort fLvalue :1;
ushort fAddrInReg :1;
ushort fBPRel :1;
ushort fFunction :1;
ushort fLData :1; // True if expression references local data
ushort fGData :1; // True if expression references global data
ushort fSynthChild:1;
ushort fLabel:1;
};
union {
ADDR AI;
ushort hReg; // This is really a CV_HREG_e
};
ulong cbValue;
char Value[0];
} TMI;
typedef TMI FAR * PTI;
typedef struct {
HSYM hSym;
CXT CXT;
} HCS;
typedef struct {
CXT CXT;
ushort cHCS;
HCS rgHCS[0];
} CXTL;
typedef HDEP HCXTL;
typedef HCXTL FAR * PHCXTL;
typedef CXTL FAR * PCXTL;
// Structures for Get/Free HSYMList
// Search request / response flags for Get/Free HSYMList
#define HSYMR_lexical 0x0001 // lexical out to function scope
#define HSYMR_function 0x0002 // function scope
#define HSYMR_class 0x0004 // class scope
#define HSYMR_module 0x0008 // module scope
#define HSYMR_global 0x0010 // global symbol table scope
#define HSYMR_exe 0x0020 // all other module scope
#define HSYMR_public 0x0040 // public symbols
// structure describing HSYM list for a context
typedef struct HSL_LIST {
ushort request; // context that this block statisfies
struct {
ushort isused :1; // block contains data if true
ushort hascxt :1; // context packet has been stored
ushort complete :1; // block is complete if true
ushort isclass :1; // context is class if true
} status;
HSYM hThis; // handle of this pointer if class scope
ushort symbolcnt; // number of symbol handles in this block
CXT Cxt; // context for this block of symbols
HSYM hSym[]; // list of symbol handles
} HSL_LIST;
typedef HSL_LIST FAR *PHSL_LIST;
typedef struct HSL_HEAD {
ushort size; // number of bytes in buffer
ushort remaining; // remaining space in buffer
PHSL_LIST pHSLList; // pointer to current context list (EE internal)
struct {
ushort endsearch :1; // end of search reached if true
ushort fatal :1; // fatal error if true
} status;
ushort blockcnt; // number of CXT blocks in buffer
ushort symbolcnt; // number of symbol handles in buffer
HDEP restart; // handle of search restart information
} HSL_HEAD;
typedef HSL_HEAD FAR *PHSL_HEAD;
typedef struct HINDEX_ARRAY {
ushort count; // number of indices in this buffer.
long rgIndex[0];
} HINDEX_ARRAY;
typedef HINDEX_ARRAY *PHINDEX_ARRAY;
typedef struct {
void (LOADDS PASCAL *pEEFreeStr)(EEHSTR);
EESTATUS (LOADDS PASCAL *pEEGetError)(PHTM, EESTATUS, PEEHSTR);
EESTATUS (LOADDS PASCAL *pEEParse)(char FAR *, EERADIX, SHFLAG, PHTM, ushort FAR *);
EESTATUS (LOADDS PASCAL *pEEBindTM)(PHTM, PCXT, SHFLAG, SHFLAG);
EESTATUS (LOADDS PASCAL *pEEvaluateTM)(PHTM, PFRAME, EEDSP);
EESTATUS (LOADDS PASCAL *pEEGetExprFromTM)(PHTM, PEERADIX, PEEHSTR, ushort FAR *);
EESTATUS (LOADDS PASCAL *pEEGetValueFromTM)(PHTM, EERADIX, PEEFORMAT, PEEHSTR);
EESTATUS (LOADDS PASCAL *pEEGetNameFromTM)(PHTM, PEEHSTR);
EESTATUS (LOADDS PASCAL *pEEGetTypeFromTM)(PHTM, EEHSTR, PEEHSTR, ulong);
EESTATUS (LOADDS PASCAL *pEEFormatCXTFromPCXT)(PCXT, PEEHSTR);
void (LOADDS PASCAL *pEEFreeTM)(PHTM);
EESTATUS (LOADDS PASCAL *pEEParseBP)(char FAR *, EERADIX, SHFLAG, PCXF, PTML, ulong, ushort FAR *, SHFLAG);
void (LOADDS PASCAL *pEEFreeTML)(PTML);
EESTATUS (LOADDS PASCAL *pEEInfoFromTM)(PHTM, PRI, PHTI);
void (LOADDS PASCAL *pEEFreeTI)(PHTI);
EESTATUS (LOADDS PASCAL *pEEGetCXTLFromTM)(PHTM, PHCXTL);
void (LOADDS PASCAL *pEEFreeCXTL)(PHCXTL);
EESTATUS (LOADDS PASCAL *pEEAssignTMToTM)(PHTM, PHTM);
EEPDTYP (LOADDS PASCAL *pEEIsExpandable)(PHTM);
SHFLAG (LOADDS PASCAL *pEEAreTypesEqual)(PHTM, PHTM);
EESTATUS (LOADDS PASCAL *pEEcChildrenTM)(PHTM, long FAR *, PSHFLAG);
EESTATUS (LOADDS PASCAL *pEEGetChildTM)(PHTM, long, PHTM, ushort FAR *, EERADIX, SHFLAG);
EESTATUS (LOADDS PASCAL *pEEDereferenceTM)(PHTM, PHTM, ushort FAR *, SHFLAG);
EESTATUS (LOADDS PASCAL *pEEcParamTM)(PHTM, ushort FAR *, PSHFLAG);
EESTATUS (LOADDS PASCAL *pEEGetParmTM)(PHTM, ushort, PHTM, ushort FAR *, SHFLAG);
EESTATUS (LOADDS PASCAL *pEEGetTMFromHSYM)(HSYM, PCXT, PHTM, ushort FAR *, SHFLAG, SHFLAG);
void (LOADDS PASCAL *pEEFormatAddress)(PADDR, char FAR *);
EESTATUS (LOADDS PASCAL *pEEGetHSYMList)(PHSYML, PCXT, ushort, uchar FAR *, SHFLAG);
void (LOADDS PASCAL *pEEFreeHSYMList)(PHSYML);
EESTATUS (LOADDS PASCAL *pEEGetExtendedTypeInfo)(PHTM, PETI);
EESTATUS (LOADDS PASCAL *pEEGetAccessFromTM)(PHTM, PEEHSTR, ulong);
BOOL (LOADDS PASCAL *pEEEnableAutoClassCast)(BOOL);
void (LOADDS PASCAL *pEEInvalidateCache)(void);
EESTATUS (LOADDS PASCAL *pEEcSynthChildTM)(PHTM, long FAR *);
EESTATUS (LOADDS PASCAL *pEEGetBCIA)(PHTM, PHBCIA);
void (LOADDS PASCAL *pEEFreeBCIA)(PHBCIA);
SHFLAG (LOADDS PASCAL *pfnCmp)(HVOID, HVOID, char FAR *, SHFLAG);
SHFLAG (LOADDS PASCAL *ptdCmp)(HVOID, HVOID, char FAR *, SHFLAG);
SHFLAG (LOADDS PASCAL *pcsCmp)(HVOID, HVOID, char FAR *, SHFLAG);
} EXF;
typedef EXF FAR * PEXF;
typedef struct EI {
char cbEI;
char Version;
PEXF pStructExprAPI;
char Language;
char FAR *IdCharacters;
char FAR *EETitle;
char FAR *EESuffixes;
char FAR *Assign; // length prefixed assignment operator
} EI;
typedef EI FAR * PEI;
// FNEEINIT is the prototype for the EEInitializeExpr function
typedef VOID LOADDS EXPCALL FAR FNEEINIT(CI FAR *, EI FAR *);
typedef FNEEINIT FAR * PFNEEINIT;
typedef FNEEINIT FAR * LPFNEEINIT;
// This is the only EE function that's actually exported from the DLL
FNEEINIT EEInitializeExpr;
#endif // EE_API