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.
 
 
 
 
 
 

166 lines
4.6 KiB

/* symref.h - include file for database
*/
#define HANDLE_BAD ((HANDLE)-1)
#define CBBLK 0x1000
#define BLKSHFT 12
#define BLKMSK 0x0FFF
#if CBBLK != (1 << BLKSHFT)
#error CBBLK and BLKSHFT dont agree
#endif
#define SRREV 2 /* current revision */
typedef struct {
long rev; /* revision of database format */
long symmaxhash; /* hash table size */
} SRHDR;
typedef SRHDR *PSRHDR;
#define OHDR OFIRSTALLOCOBJ
#define OHASHTAB (OHDR + sizeof (SRHDR))
#define OHASH(h) (OHASHTAB + (OFFSET)(h) * sizeof (OFFSET))
#define SYMMAXHASH 32731
#define LINELEN 256
#define CBMSG 256
#define CMSG (100*CBMSG)
typedef USHORT LINE, *PLINE;
#define BADLINE ((LINE)-1)
/* database structures. The osymNext and type fields must be in the
* same offset.
*/
typedef struct SH {
OFFSET oshNext; // offset of next symbol in hash bucket
ULONG type; // type of this symbol
ULONG dName; // delta from the symbol to the name
} SH, *PSH;
typedef struct NAME {
BYTE cch; // length of name
char sz[1]; // ASCIIZ text of name
} NAME, *PNAME;
#define PNAME(psh) ((PNAME) ((char *) (psh) + ((psh)->dName)))
#define CCH(psh) (PNAME(psh)->cch)
#define SZ(psh) (PNAME(psh)->sz)
typedef struct SYM {
SH sh; // symbol header
OFFSET oref; // offset of first reference to sym
NAME name;
} SYM, *PSYM;
typedef struct EXT {
SH sh; // symbol header
NAME name;
} EXT, *PEXT;
typedef struct NOI {
SH sh; // symbol header
NAME name;
} NOI, *PNOI;
typedef struct FIL {
SH sh; // symbol header
OFFSET oref; // offset of reference to symbol
OFFSET ompBlkLine; // vector of block-to-beginning line
FILETIME tmMod; // time of modification of file
long cblk; // number of blocks in file
NAME name;
} FIL, *PFIL;
typedef struct DIR {
SH sh; // symbol header
NAME name;
} DIR, *PDIR;
#define TY_SYM 0
#define TY_EXT 1
#define TY_FIL 2
#define TY_DIR 3
#define TY_NOI 4
#define TY_ALL 0xFFFFFFFF
#define CBSYM(n) (sizeof (SYM) + (n))
#define CBEXT(n) (sizeof (EXT) + (n))
#define CBFIL(n) (sizeof (FIL) + (n))
#define CBDIR(n) (sizeof (DIR) + (n))
#define CBNOI(n) (sizeof (NOI) + (n))
typedef unsigned long HASH, *PHASH;
typedef struct {
OFFSET orefNext; /* next link in reference chain */
OFFSET ofil; /* file reference is in */
OFFSET orefFileNext; /* next reference for file */
OFFSET osym; /* symbol reference is for */
BYTE bm[1]; /* bitmap of references */
} REFERENCE, *PREF;
#define CBREF(n) (sizeof (REFERENCE) - 1 + ((n)+7)/8)
#define MAPHEADER(o) ((PSRHDR)DBMap (pdbSym, (o)))
#define MAPHASH(o) ((OFFSET *) DBMap (pdbSym, (o)))
#define MAPSH(o) ((PSH) DBMap (pdbSym, (o)))
#define MAPSYM(o) ((PSYM) DBMap (pdbSym, (o)))
#define MAPEXT(o) ((PEXT) DBMap (pdbSym, (o)))
#define MAPFIL(o) ((PFIL) DBMap (pdbSym, (o)))
#define MAPDIR(o) ((PDIR) DBMap (pdbSym, (o)))
#define MAPNOI(o) ((PNOI) DBMap (pdbSym, (o)))
#define MAPREFERENCE(o) ((PREF) DBMap (pdbRef, (o)))
#define MAPVECTOR(o) ((PLINE) DBMap (pdbRef, (o)))
char * database;
BOOL fDirty;
PDB pdbSym; /* database for hash/symbols */
PDB pdbRef; /* database for references */
#define SR_BAD_REV (1+DB_MAX_ERR)
#define SR_CANT_CARVE (1+SR_BAD_REV)
#define FND_SYM 0x01 /* symbol found in find routine */
#define FND_ERR 0x02 /* error in sending */
typedef void (*PFNENUM) (HASH h, OFFSET osh, PSH psh, void * pv);
typedef BOOL (*PFNFIND) (HANDLE h, PSZ psz);
/* Handy error display macro
*/
#define NOTEERROR(x) printf (x " returned %x\n", GetLastError ())
/* Forward declarations
*/
int SRCreate (PSZ psz);
int SROpen (PSZ psz);
void SRClose (BOOL fCommit);
HASH hashFromSym (PSZ psz);
PSYM psymFind (PSZ psz, OFFSET *posym, BOOL fCreate);
PFIL pfilFind (PSZ psz, OFFSET *pofil, BOOL fCreate);
PEXT pextFind (PSZ psz, OFFSET *poext, BOOL fCreate);
PDIR pdirFind (PSZ psz, OFFSET *podir, BOOL fCreate);
PNOI pnoiFind (PSZ psz, OFFSET *ponoi, BOOL fCreate);
PLINE pvecAlloc (PFIL pfil, int cblk);
PREF prefFind (PSYM psym, OFFSET osym, PFIL pfil, OFFSET ofil, int cblk);
BOOL fSetRefSymBit (PSZ psz, int ibit, PFIL pfil, OFFSET ofil, int cblk);
void SRIndexInit (void);
long IndexFile (HANDLE h, PSZ psz);
void RemoveFile (PSZ psz);
void RemoveSym (PSZ psz);
void SRSymLocate (PFNFIND pfn, HANDLE h, PSZ apsz[]);
BOOL fSymFileFind (PFNFIND pfn, HANDLE h, PSZ psz, PREF pref);
void EnSym (PFNENUM pfnen, void * pv, ULONG typeSym);