Leaked source code of windows server 2003
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.
 
 
 
 
 
 

117 lines
2.9 KiB

#include "SymCommon.h"
#include <strsafe.h>
BOOL SymCommonPDBLinesStripped(PDB *ppdb, DBI *pdbi) {
// Return values:
// FALSE - Private Information has NOT been stripped
// TRUE - Private Information has been stripped
Mod *pmod;
Mod *prevmod;
long cb;
pmod = NULL;
prevmod=NULL;
while (DBIQueryNextMod(pdbi, pmod, &pmod) && pmod) {
if (prevmod != NULL) ModClose(prevmod);
// Check that Source line info is removed
ModQueryLines(pmod, NULL, &cb);
if (cb != 0) {
ModClose(pmod);
return FALSE;
}
// Check that local symbols are removed
ModQuerySymbols(pmod, NULL, &cb);
if (cb != 0) {
ModClose(pmod);
return FALSE;
}
prevmod=pmod;
}
if (pmod != NULL) ModClose(pmod);
if (prevmod != NULL) ModClose(prevmod);
return (TRUE);
}
BOOL SymCommonPDBPrivateStripped(PDB *ppdb, DBI *pdbi) {
AGE age;
BOOL PrivateStripped;
GSI *pgsi;
BOOL valid;
age = pdbi->QueryAge();
if (age == 0) {
// If the age is 0, then check for types to determine if this is
// a private pdb or not. PDB 5.0 and earlier may have types and no
// globals if the age is 0.
PrivateStripped= SymCommonPDBTypesStripped(ppdb, pdbi) &&
SymCommonPDBLinesStripped(ppdb, pdbi);
} else {
// Otherwise, use globals to determine if the private info is
// stripped or not. No globals means that private is stripped.
__try {
valid = pdbi->OpenGlobals(&pgsi);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
valid= FALSE;
}
if ( !valid ) {
return FALSE;
}
// Now, see if there are any globals in the pdb.
valid=TRUE;
__try {
PrivateStripped= ((pgsi->NextSym(NULL)) == NULL);
} __except( EXCEPTION_EXECUTE_HANDLER ) {
valid= FALSE;
}
GSIClose(pgsi);
if ( !valid ) {
return FALSE;
}
}
return (PrivateStripped);
}
BOOL SymCommonPDBTypesStripped(PDB *ppdb, DBI *pdbi) {
// Return values:
// FALSE - Private Information has NOT been stripped
// TRUE - Private Information has been stripped
unsigned itsm;
TPI *ptpi;
TI tiMin;
TI tiMac;
// Check that types are removed
for ( itsm = 0; itsm < 256; itsm++) {
ptpi = 0;
if (DBIQueryTypeServer(pdbi, (ITSM) itsm, &ptpi)) {
continue;
}
if (!ptpi) {
PDBOpenTpi(ppdb, pdbRead, &ptpi);
tiMin = TypesQueryTiMinEx(ptpi);
tiMac = TypesQueryTiMacEx(ptpi);
if (tiMin < tiMac) {
TypesClose(ptpi);
return FALSE;
}
}
}
TypesClose(ptpi);
return (TRUE);
}