35#define NONAMELESSUNION
50#include "wine/mscvpdb.h"
84#define CV_MAX_MODULES 32
99 const char* hexof =
"0123456789abcdef";
102 for (
i = 0;
i <
len;
i += 16)
108 msg[10 + 3 *
j + 0] = hexof[
x[
i +
j] >> 4];
109 msg[10 + 3 *
j + 1] = hexof[
x[
i +
j] & 15];
110 msg[10 + 3 *
j + 2] =
' ';
111 msg[10 + 3 * 16 + 1 +
j] = (
x[
i +
j] >= 0x20 &&
x[
i +
j] < 0x7f) ?
114 msg[10 + 3 * 16] =
' ';
115 msg[10 + 3 * 16 + 1 + 16] =
'\0';
124#define MAX_BUILTIN_TYPES 0x06FF
125#define FIRST_DEFINABLE_TYPE 0x1000
136#define CV_MAX_MODULES 32
261 unsigned short int type = *leaf++;
267 v->n1.n2.n3.uintVal =
type;
276 v->n1.n2.n3.cVal = *(
const char*)leaf;
282 v->n1.n2.n3.iVal = *(
const short*)leaf;
288 v->n1.n2.n3.uiVal = *leaf;
294 v->n1.n2.n3.lVal = *(
const int*)leaf;
300 v->n1.n2.n3.uiVal = *(
const unsigned int*)leaf;
306 v->n1.n2.n3.llVal = *(
const long long int*)leaf;
312 v->n1.n2.n3.ullVal = *(
const long long unsigned int*)leaf;
318 v->n1.n2.n3.fltVal = *(
const float*)leaf;
322 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
330 v->n1.n2.n3.fltVal = *(
const double*)leaf;
334 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
340 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
346 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
352 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
358 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
364 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
370 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
376 FIXME(
"Unknown numeric leaf type %04x\n",
type);
387 unsigned short int type = *leaf++;
400 *
value = *(
const char*)leaf;
405 *
value = *(
const short*)leaf;
415 *
value = *(
const int*)leaf;
420 *
value = *(
const unsigned int*)leaf;
425 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
431 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
437 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
443 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
449 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
455 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
461 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
467 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
473 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
479 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
485 FIXME(
"Unsupported numeric leaf type %04x\n",
type);
491 FIXME(
"Unknown numeric leaf type %04x\n",
type);
505 static char symname[256];
508 symname[p_name->
namelen] =
'\0';
510 return (!*symname ||
strcmp(symname,
"__unnamed") == 0) ?
NULL : symname;
529 unsigned mod_index = typeno >> 24;
530 unsigned mod_typeno = typeno & 0x00FFFFFF;
536 FIXME(
"Module of index %d isn't loaded yet (%x)\n", mod_index, typeno);
543 if (!
quiet && !
symt && typeno)
FIXME(
"Returning NULL symt for type-id %x\n", typeno);
565 FIXME(
"What the heck\n");
568 FIXME(
"Adding %x to non allowed module\n", typeno);
571 if ((typeno >> 24) != 0)
572 FIXME(
"No module index while inserting type-id assumption is wrong %x\n",
596 FIXME(
"Overwriting at %x\n", typeno);
637 if (!typeno)
return NULL;
643 FIXME(
"Cannot locate type %x\n", typeno);
647 if (!
symt)
FIXME(
"Couldn't load forward type %x\n", typeno);
652 struct symt* existing,
653 unsigned int pointee_type)
655 struct symt* pointee;
668 unsigned int elemtype,
669 unsigned int indextype,
670 unsigned int arr_len)
683 const unsigned char*
last = (
const BYTE*)ref_type + ref_type->
generic.len + 2;
696 switch (
type->generic.id)
701 const struct p_string* p_name = (
const struct p_string*)((
const unsigned char*)&
type->enumerate_v1.value + vlen);
710 const char*
name = (
const char*)&
type->enumerate_v3.value + vlen;
718 FIXME(
"Unsupported type %04x in ENUM field list\n",
type->generic.id);
729 struct symt* subtype;
763 unsigned fieldlistno)
765 const unsigned char*
ptr;
766 const unsigned char*
last;
773 if (!fieldlistno)
return TRUE;
788 switch (
type->generic.id)
795 ptr += 2 + 2 + 2 + leaf_len;
803 ptr += 2 + 2 + 4 + leaf_len;
809 const unsigned short int* p_vboff;
812 p_vboff = (
const unsigned short int*)((
const char*)&
type->vbclass_v1.vbpoff + leaf_len);
817 ptr += 2 + 2 + 2 + 2 + leaf_len + vplen;
824 const unsigned short int* p_vboff;
827 p_vboff = (
const unsigned short int*)((
const char*)&
type->vbclass_v2.vbpoff + leaf_len);
832 ptr += 2 + 2 + 4 + 4 + leaf_len + vplen;
841 type->member_v1.type);
843 ptr += 2 + 2 + 2 + leaf_len + (1 + p_name->
namelen);
848 p_name = (
const struct p_string*)((
const unsigned char*)&
type->member_v2.offset + leaf_len);
851 type->member_v2.type);
853 ptr += 2 + 2 + 4 + leaf_len + (1 + p_name->
namelen);
858 c_name = (
const char*)&
type->member_v3.offset + leaf_len;
862 ptr += 2 + 2 + 4 + leaf_len + (
strlen(c_name) + 1);
867 ptr += 2 + 2 + 2 + (1 +
type->stmember_v1.p_name.namelen);
872 ptr += 2 + 4 + 2 + (1 +
type->stmember_v2.p_name.namelen);
882 ptr += 2 + 2 + 2 + (1 +
type->method_v1.p_name.namelen);
887 ptr += 2 + 2 + 4 + (1 +
type->method_v2.p_name.namelen);
897 ptr += 2 + 2 + (1 +
type->nesttype_v1.p_name.namelen);
902 ptr += 2 + 2 + 4 + (1 +
type->nesttype_v2.p_name.namelen);
922 switch ((
type->onemethod_v1.attribute >> 2) & 7)
925 ptr += 2 + 2 + 2 + 4 + (1 +
type->onemethod_virt_v1.p_name.namelen);
929 ptr += 2 + 2 + 2 + (1 +
type->onemethod_v1.p_name.namelen);
936 switch ((
type->onemethod_v2.attribute >> 2) & 7)
939 ptr += 2 + 2 + 4 + 4 + (1 +
type->onemethod_virt_v2.p_name.namelen);
943 ptr += 2 + 2 + 4 + (1 +
type->onemethod_v2.p_name.namelen);
950 switch ((
type->onemethod_v3.attribute >> 2) & 7)
953 ptr += 2 + 2 + 4 + 4 + (
strlen(
type->onemethod_virt_v3.name) + 1);
975 FIXME(
"Unsupported type %04x in STRUCT field list\n",
type->generic.id);
984 struct symt* existing,
986 unsigned fieldlistno,
1011 struct symt* existing,
1012 const char*
name,
int structlen,
1034 existing = &
type->symt;
1057 struct symt* existing,
1065 if (!sym)
return NULL;
1098 FIXME(
"Unexpected leaf %x for signature's pmt\n", reftype->
generic.id);
1108 int value, leaf_len;
1111 struct symt* existing;
1115 switch (
type->generic.id)
1121 WARN(
"Modifier on %x: %s%s%s%s\n",
1122 type->modifier_v1.type,
1123 type->modifier_v1.attribute & 0x01 ?
"const " :
"",
1124 type->modifier_v1.attribute & 0x02 ?
"volatile " :
"",
1125 type->modifier_v1.attribute & 0x04 ?
"unaligned " :
"",
1126 type->modifier_v1.attribute & ~0x07 ?
"unknown " :
"");
1131 WARN(
"Modifier on %x: %s%s%s%s\n",
1132 type->modifier_v2.type,
1133 type->modifier_v2.attribute & 0x01 ?
"const " :
"",
1134 type->modifier_v2.attribute & 0x02 ?
"volatile " :
"",
1135 type->modifier_v2.attribute & 0x04 ?
"unaligned " :
"",
1136 type->modifier_v2.attribute & ~0x07 ?
"unknown " :
"");
1152 p_name = (
const struct p_string*)((
const unsigned char*)&
type->array_v1.arrlen + leaf_len);
1154 type->array_v1.elemtype,
1163 p_name = (
const struct p_string*)((
const unsigned char*)&
type->array_v2.arrlen + leaf_len);
1166 type->array_v2.elemtype,
1175 c_name = (
const char*)&
type->array_v3.arrlen + leaf_len;
1178 type->array_v3.elemtype,
1186 p_name = (
const struct p_string*)((
const unsigned char*)&
type->struct_v1.structlen + leaf_len);
1189 type->struct_v1.property);
1193 if (!(
type->struct_v1.property & 0x80))
1195 type->struct_v1.fieldlist);
1202 p_name = (
const struct p_string*)((
const unsigned char*)&
type->struct_v2.structlen + leaf_len);
1205 type->struct_v2.property);
1209 if (!(
type->struct_v2.property & 0x80))
1211 type->struct_v2.fieldlist);
1218 c_name = (
const char*)&
type->struct_v3.structlen + leaf_len;
1221 type->struct_v3.property);
1225 if (!(
type->struct_v3.property & 0x80))
1227 type->struct_v3.fieldlist);
1233 p_name = (
const struct p_string*)((
const unsigned char*)&
type->union_v1.un_len + leaf_len);
1240 type->union_v1.fieldlist);
1246 p_name = (
const struct p_string*)((
const unsigned char*)&
type->union_v2.un_len + leaf_len);
1253 type->union_v2.fieldlist);
1259 c_name = (
const char*)&
type->union_v3.un_len + leaf_len;
1266 type->union_v3.fieldlist);
1273 type->enumeration_v1.fieldlist,
1274 type->enumeration_v1.type);
1280 type->enumeration_v2.fieldlist,
1281 type->enumeration_v2.type);
1286 type->enumeration_v3.fieldlist,
1287 type->enumeration_v3.type);
1297 type->procedure_v1.rvtype,
1298 type->procedure_v1.arglist);
1308 type->procedure_v2.rvtype,
1309 type->procedure_v2.arglist);
1323 type->mfunction_v1.rvtype,
1324 type->mfunction_v1.arglist);
1337 type->mfunction_v2.rvtype,
1338 type->mfunction_v2.arglist);
1344 if (!(
symt = existing))
1347 snprintf(
buf,
sizeof(
buf),
"__internal_vt_shape_%x\n", curr_type);
1352 FIXME(
"Unsupported type-id leaf %x\n",
type->generic.id);
1379 if (!(
type->generic.id & 0x8600) || (
type->generic.id & 0x0100))
1390 unsigned seg,
unsigned offset);
1399 const unsigned int* filetab;
1400 const unsigned int* lt_ptr;
1401 const unsigned short* linenos;
1408 nfile = *(
const short*)linetab;
1409 filetab = (
const unsigned int*)(linetab + 2 *
sizeof(
short));
1411 for (
i = 0;
i < nfile;
i++)
1413 ptr = linetab + filetab[
i];
1414 nseg = *(
const short*)
ptr;
1415 lt_ptr = (
const unsigned int*)(
ptr + 2 *
sizeof(
short));
1426 for (
j = 0;
j < nseg;
j++)
1431 if (!func_addr0)
continue;
1445 WARN(
"--not a func at %04x:%08x %lx tag=%d\n",
1459 const char* strimage,
DWORD strsize)
1472 while ((
const BYTE*)(lt2 + 1) < linetab +
size)
1483 TRACE(
"No LT2_FILES_BLOCK found\n");
1488 while ((
const BYTE*)(lt2 + 1) < linetab +
size)
1499 TRACE(
"block from %04x:%08x #%x (%x lines)\n",
1508 WARN(
"--not a func at %04x:%08x %lx tag=%d\n",
1515 lines_blk->
l[
i].lineno ^ 0x80000000,
1516 lines_blk->
l[
i].offset);
1537 int nomap = msc_dbg->
nomap;
1541 if (!nomap || !omapp)
return offset;
1544 for (
i = 0;
i < nomap - 1;
i++)
1552 unsigned seg,
unsigned offset)
1554 int nsect = msc_dbg->
nsect;
1557 if (!seg || seg > nsect)
return 0;
1558 return msc_dbg->
module->module.BaseOfImage +
1565 unsigned segment,
unsigned offset,
1689 if (curr_func)
FIXME(
"nested function\n");
1703 if (curr_func)
FIXME(
"nested function\n");
1717 if (curr_func)
FIXME(
"nested function\n");
1829 TRACE(
"S-Compiland-V1 %x %s\n",
1841 ptr2 = ptr1 +
strlen(ptr1) + 1;
1843 ptr1 = ptr2 +
strlen(ptr2) + 1;
1855 ptr2 = ptr1 +
strlen(ptr1) + 1;
1857 ptr1 = ptr2 +
strlen(ptr2) + 1;
1904 TRACE(
"S-Constant-V1 %u %s %x\n",
1921 TRACE(
"S-Constant-V2 %u %s %x\n",
1938 TRACE(
"S-Constant-V3 %u %s %x\n",
1952 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
1963 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
1973 FIXME(
"S-Udt %s: couldn't find type 0x%x\n",
2000 TRACE(
"Start search: seg=0x%x at offset 0x%08x\n",
2005 TRACE(
"S-Align V1\n");
2008 TRACE(
"heap site: offset=0x%08x at sect_idx 0x%04x, inst_len 0x%08x, index 0x%08x\n",
2185 (
const char*)
pdb + block_list[
i] *
pdb->block_size,
pdb->block_size);
2203 (
const char*)
pdb + block_list[
i] *
pdb->block_size,
pdb->block_size);
2211 const WORD* block_list;
2217 for (
i = 0;
i < file_nr;
i++)
2218 block_list += (toc->
file[
i].size +
pdb->block_size - 1) /
pdb->block_size;
2226 const DWORD* block_list;
2233 for (
i = 0;
i < file_nr;
i++)
2242 switch (pdb_file->
kind)
2246 pdb_file->
u.
jg.toc, file_nr);
2249 pdb_file->
u.
ds.toc, file_nr);
2256 switch (pdb_file->
kind)
2258 case PDB_JG:
return pdb_file->
u.
jg.toc->file[file_nr].size;
2259 case PDB_DS:
return pdb_file->
u.
ds.toc->file_size[file_nr];
2271 switch (pdb_file->
kind)
2299 cpstr = (
char*)(pdb_file->
stream_dict + numok + 1);
2304 pdw += *ok_bits++ + 1;
2307 FIXME(
"unexpected value\n");
2313 if (ok_bits[
i / 32] & (1 << (
i % 32)))
2315 if (
j >= numok)
break;
2349 WARN(
"string table not found\n");
2357 for (
i = 0;
i < modfmt->
u.
pdb_info->used_subfiles;
i++)
2426 if (symbols->
version < 19970000)
2429 memset(sfile, 0,
sizeof(*sfile));
2464 WARN(
"\tCouldn't find %s\n",
lookup->filename);
2493 switch (
types.version)
2502 ERR(
"-Unknown type info version %d\n",
types.version);
2527static const char PDB_JG_IDENT[] =
"Microsoft C/C++ program database 2.00\r\n\032JG\0";
2560 switch (
root->Version)
2568 ERR(
"-Unknown root block version %d\n",
root->Version);
2577 pdb_file->
u.
jg.timestamp =
root->TimeDateStamp;
2580 else WARN(
"Found %s, but wrong signature: %08x %08x\n",
2583 else WARN(
"Found %s, but wrong age: %08x %08x\n",
2585 TRACE(
"found JG for %s: age=%x timestamp=%x\n",
2596 pdb_file->
u.
ds.toc =
2598 (
const DWORD*)((
const char*)
pdb +
pdb->toc_page *
pdb->block_size),
2606 switch (
root->Version)
2611 ERR(
"-Unknown root block version %d\n",
root->Version);
2614 pdb_file->
u.
ds.guid =
root->guid;
2617 else WARN(
"Found %s, but wrong GUID: %s %s\n",
2621 else WARN(
"Found %s, but wrong age: %08x %08x\n",
2623 TRACE(
"found DS for %s: age=%x guid=%s\n",
2634 switch (pdb_file->
kind)
2636 case PDB_JG: num_files = pdb_file->
u.
jg.toc->num_files;
break;
2637 case PDB_DS: num_files = pdb_file->
u.
ds.toc->num_files;
break;
2640 for (
i = 1;
i < num_files;
i++)
2643 FIXME(
"********************** [%u]: size=%08x\n",
2656 unsigned module_index);
2661 const void* symbols_image,
2665 unsigned module_index)
2687 if (module_index != -1)
FIXME(
"Twice the entry\n");
2688 else module_index =
i;
2701 imp_pdb_lookup.
age = imp->
Age;
2702 TRACE(
"got for %s: age=%u ts=%x\n",
2711 if (module_index == -1)
2725 unsigned module_index)
2730 char* files_image =
NULL;
2731 DWORD files_size = 0;
2762 int header_size = 0;
2774 ERR(
"-Unknown symbol info version %d %08x\n",
2796 if (files_image) files_size = *(
const DWORD*)(files_image + 8);
2811 file = symbols_image + header_size;
2836 files_image + 12, files_size);
2872 if (!modfmt)
return FALSE;
2891 msc_dbg->
module->module.PdbSig = pdb_info->
pdb_files[0].u.jg.timestamp;
2896 msc_dbg->
module->module.LoadedPdbName,
2900 msc_dbg->
module->module.GlobalSymbols =
TRUE;
2902 msc_dbg->
module->module.SourceIndexed =
TRUE;
2948#define PEV_MAX_LEN 32
2965#define PEV_ERROR(pev, msg) snprintf((pev)->error, sizeof((pev)->error), "%s", (msg))
2966#define PEV_ERROR1(pev, msg, pmt) snprintf((pev)->error, sizeof((pev)->error), (msg), (pmt))
2969static void pev_dump_stack(
struct pevaluator* pev)
3000 return PEV_ERROR1(pev,
"get_zvalue: no value found (%s)",
str);
3003 if (
n ==
str || *
n !=
'\0')
3017 if (!at)
return PEV_ERROR(pev,
"push: out of memory");
3027 if (!at)
return PEV_ERROR(pev,
"pop: stack empty");
3058 if (!zv)
return PEV_ERROR(pev,
"set_value: out of memory");
3077 case '+':
c =
v1 +
v2;
break;
3078 case '-':
c =
v1 -
v2;
break;
3079 case '*':
c =
v1 *
v2;
break;
3080 case '/':
c =
v1 /
v2;
break;
3081 case '%':
c =
v1 %
v2;
break;
3082 default:
return PEV_ERROR1(pev,
"binop: unknown op (%c)",
op);
3097 return PEV_ERROR1(pev,
"deref: cannot read mem at %lx\n",
v1);
3110 if (p2[0] !=
'$')
return PEV_ERROR1(pev,
"assign: %s isn't a variable", p2);
3125 pev->
error[0] =
'\0';
3126 for (; cpair->
name; cpair++)
3138 if (cpair)
for (; cpair->
name; cpair++)
3159 if (*
ptr ==
' ' || (over = *
ptr ==
'\0'))
3206 unsigned i,
size, strsize;
3215 pdb_info =
pair.effective->format_info[
DFI_PDB]->u.pdb_info;
3220 if (!strbase)
return FALSE;
3221 strsize = *(
const DWORD*)(strbase + 8);
3224 if (fpoext && (
size %
sizeof(*fpoext)) == 0)
3226 size /=
sizeof(*fpoext);
3231 TRACE(
"\t%08x %08x %8x %8x %4x %4x %4x %08x %s\n",
3232 fpoext[
i].
start, fpoext[
i].func_size, fpoext[
i].locals_size,
3233 fpoext[
i].params_size, fpoext[
i].maxstack_size, fpoext[
i].prolog_size,
3234 fpoext[
i].savedregs_size, fpoext[
i].
flags,
3235 fpoext[
i].str_offset < strsize ?
3236 wine_dbgstr_a(strbase + 12 + fpoext[
i].str_offset) :
"<out of bounds>");
3237 if (fpoext[
i].str_offset < strsize)
3256#define MAKESIG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
3257#define CODEVIEW_NB09_SIG MAKESIG('N','B','0','9')
3258#define CODEVIEW_NB10_SIG MAKESIG('N','B','1','0')
3259#define CODEVIEW_NB11_SIG MAKESIG('N','B','1','1')
3260#define CODEVIEW_RSDS_SIG MAKESIG('R','S','D','S')
3285 for (
i = 0;
i <
hdr->cDir;
i++)
3313 prev = (
i == 0) ?
NULL :
3342 msc_dbg->
module->module.GlobalSymbols =
TRUE;
3344 msc_dbg->
module->module.SourceIndexed =
TRUE;
3365 TRACE(
"Got RSDS type of PDB file: guid=%s age=%08x name=%s\n",
3375 ERR(
"Unknown CODEVIEW signature %08x in module %s\n",
3383 sizeof(msc_dbg->
module->module.CVData));
3411 for (
i = 0;
i < nDbg;
i++)
3422 for (
i = 0;
i < nDbg;
i++)
3432 for (
i = 0;
i < nDbg;
i++)
3445 for (
i = 0;
i < nDbg;
i++)
3447 FIXME(
"This guy has FPO information\n");
3473 ERR(
"Got a page fault while loading symbols\n");
std::map< E_MODULE, HMODULE > mod
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
DECLSPEC_HIDDEN BOOL coff_process_info(const struct msc_debug_info *msc_dbg)
struct symt_hierarchy_point * symt_add_function_point(struct module *module, struct symt_function *func, enum SymTagEnum point, const struct location *loc, const char *name) DECLSPEC_HIDDEN
struct symt_thunk * symt_new_thunk(struct module *module, struct symt_compiland *parent, const char *name, THUNK_ORDINAL ord, ULONG_PTR addr, ULONG_PTR size) DECLSPEC_HIDDEN
struct symt_function * symt_new_function(struct module *module, struct symt_compiland *parent, const char *name, ULONG_PTR addr, ULONG_PTR size, struct symt *type) DECLSPEC_HIDDEN
BOOL symt_get_info(struct module *module, const struct symt *type, IMAGEHLP_SYMBOL_TYPE_INFO req, void *pInfo) DECLSPEC_HIDDEN
void hash_table_init(struct pool *pool, struct hash_table *ht, unsigned num_buckets) DECLSPEC_HIDDEN
void vector_init(struct vector *v, unsigned elt_sz, unsigned bucket_sz) DECLSPEC_HIDDEN
struct symt_data * symt_new_constant(struct module *module, struct symt_compiland *parent, const char *name, struct symt *type, const VARIANT *v) DECLSPEC_HIDDEN
struct symt_data * symt_add_func_local(struct module *module, struct symt_function *func, enum DataKind dt, const struct location *loc, struct symt_block *block, struct symt *type, const char *name) DECLSPEC_HIDDEN
void * vector_add(struct vector *v, struct pool *pool) DECLSPEC_HIDDEN
void * pool_alloc(struct pool *a, size_t len) DECLSPEC_HIDDEN
struct symt_pointer * symt_new_pointer(struct module *module, struct symt *ref_type, ULONG_PTR size) DECLSPEC_HIDDEN
BOOL symt_add_enum_element(struct module *module, struct symt_enum *enum_type, const char *name, int value) DECLSPEC_HIDDEN
void pool_init(struct pool *a, size_t arena_size) DECLSPEC_HIDDEN
struct symt_udt * symt_new_udt(struct module *module, const char *typename, unsigned size, enum UdtKind kind) DECLSPEC_HIDDEN
void pool_destroy(struct pool *a) DECLSPEC_HIDDEN
unsigned vector_length(const struct vector *v) DECLSPEC_HIDDEN
unsigned source_new(struct module *module, const char *basedir, const char *source) DECLSPEC_HIDDEN
struct symt_typedef * symt_new_typedef(struct module *module, struct symt *ref, const char *name) DECLSPEC_HIDDEN
BOOL path_find_symbol_file(const struct process *pcs, const struct module *module, PCSTR full_path, enum module_type type, const GUID *guid, DWORD dw1, DWORD dw2, WCHAR *buffer, BOOL *is_unmatched) DECLSPEC_HIDDEN
struct symt_public * symt_new_public(struct module *module, struct symt_compiland *parent, const char *typename, BOOL is_function, ULONG_PTR address, unsigned size) DECLSPEC_HIDDEN
void hash_table_iter_init(const struct hash_table *ht, struct hash_table_iter *hti, const char *name) DECLSPEC_HIDDEN
struct symt_function_signature * symt_new_function_signature(struct module *module, struct symt *ret_type, enum CV_call_e call_conv) DECLSPEC_HIDDEN
struct symt_block * symt_close_func_block(struct module *module, const struct symt_function *func, struct symt_block *block, unsigned pc) DECLSPEC_HIDDEN
struct symt_data * symt_new_global_variable(struct module *module, struct symt_compiland *parent, const char *name, unsigned is_static, struct location loc, ULONG_PTR size, struct symt *type) DECLSPEC_HIDDEN
struct symt_enum * symt_new_enum(struct module *module, const char *typename, struct symt *basetype) DECLSPEC_HIDDEN
BOOL symt_set_udt_size(struct module *module, struct symt_udt *type, unsigned size) DECLSPEC_HIDDEN
struct symt_block * symt_open_func_block(struct module *module, struct symt_function *func, struct symt_block *block, unsigned pc, unsigned len) DECLSPEC_HIDDEN
struct symt_array * symt_new_array(struct module *module, int min, int max, struct symt *base, struct symt *index) DECLSPEC_HIDDEN
BOOL sw_read_mem(struct cpu_stack_walk *csw, DWORD64 addr, void *ptr, DWORD sz) DECLSPEC_HIDDEN
void * hash_table_iter_up(struct hash_table_iter *hti) DECLSPEC_HIDDEN
struct symt_compiland * symt_new_compiland(struct module *module, ULONG_PTR address, unsigned src_idx) DECLSPEC_HIDDEN
struct module * module_find_by_addr(const struct process *pcs, DWORD64 addr, enum module_type type) DECLSPEC_HIDDEN
void * vector_at(const struct vector *v, unsigned pos) DECLSPEC_HIDDEN
BOOL symt_add_function_signature_parameter(struct module *module, struct symt_function_signature *sig, struct symt *param) DECLSPEC_HIDDEN
BOOL symt_add_udt_element(struct module *module, struct symt_udt *udt_type, const char *name, struct symt *elt_type, unsigned offset, unsigned size) DECLSPEC_HIDDEN
struct symt_basic * symt_new_basic(struct module *module, enum BasicType, const char *typename, unsigned size) DECLSPEC_HIDDEN
void symt_add_func_line(struct module *module, struct symt_function *func, unsigned source_idx, int line_num, ULONG_PTR offset) DECLSPEC_HIDDEN
BOOL module_get_debug(struct module_pair *) DECLSPEC_HIDDEN
char * pool_strdup(struct pool *a, const char *str) DECLSPEC_HIDDEN
void hash_table_add(struct hash_table *ht, struct hash_table_elt *elt) DECLSPEC_HIDDEN
BOOL symt_normalize_function(struct module *module, const struct symt_function *func) DECLSPEC_HIDDEN
struct symt_hierarchy_point * symt_new_label(struct module *module, struct symt_compiland *compiland, const char *name, ULONG_PTR address) DECLSPEC_HIDDEN
struct symt_ht * symt_find_nearest(struct module *module, DWORD_PTR addr) DECLSPEC_HIDDEN
#define SYMOPT_NO_PUBLICS
#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC
#define INVALID_HANDLE_VALUE
#define CreateFileMappingW(a, b, c, d, e, f)
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * debugstr_an(const char *s, int n)
#define IMAGE_DEBUG_TYPE_FPO
#define stricmp(_String1, _String2)
#define IMAGE_DEBUG_TYPE_CODEVIEW
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
#define MultiByteToWideChar
#define __EXCEPT_PAGE_FAULT
#define IMAGE_DEBUG_TYPE_COFF
struct process * process_find_by_handle(HANDLE hProcess)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLenum GLenum GLvoid * values
GLuint GLsizei GLsizei * length
GLenum const GLvoid * addr
GLenum GLenum GLenum GLenum mapping
GLfloat GLfloat GLfloat v2
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
BOOL WINAPI HeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem)
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
JBLOCKROW JDIMENSION num_blocks
#define memcpy(s1, s2, n)
#define sprintf(buf, format,...)
static HMODULE MODULEINFO DWORD cb
static unsigned pdb_get_stream_by_name(const struct pdb_file_info *pdb_file, const char *name)
#define FIRST_DEFINABLE_TYPE
static BOOL pev_binop(struct pevaluator *pev, char op)
static const void * codeview_jump_to_type(const struct codeview_type_parse *ctp, DWORD idx)
static void pdb_free_file(struct pdb_file_info *pdb_file)
BOOL pdb_virtual_unwind(struct cpu_stack_walk *csw, DWORD_PTR ip, union ctx *context, struct pdb_cmd_pair *cpair)
static struct symt * codeview_new_func_signature(struct codeview_type_parse *ctp, struct symt *existing, enum CV_call_e call_conv)
static void * pdb_read_jg_file(const struct PDB_JG_HEADER *pdb, const struct PDB_JG_TOC *toc, DWORD file_nr)
#define PEV_ERROR(pev, msg)
#define CODEVIEW_NB09_SIG
static BOOL pev_push(struct pevaluator *pev, const char *elt)
static BOOL pev_pop(struct pevaluator *pev, char *elt)
static void * pdb_read_file(const struct pdb_file_info *pdb_file, DWORD file_nr)
static void codeview_init_basic_types(struct module *module)
#define CODEVIEW_NB10_SIG
static struct symt * codeview_parse_one_type(struct codeview_type_parse *ctp, unsigned curr_type, const union codeview_type *type, BOOL details)
static struct symt * codeview_add_type_pointer(struct codeview_type_parse *ctp, struct symt *existing, unsigned int pointee_type)
#define CODEVIEW_NB11_SIG
static BOOL pdb_parse_cmd_string(struct cpu_stack_walk *csw, PDB_FPO_DATA *fpoext, const char *cmd, struct pdb_cmd_pair *cpair)
static int codeview_add_type_struct_field_list(struct codeview_type_parse *ctp, struct symt_udt *symt, unsigned fieldlistno)
static void * pdb_read_ds_file(const struct PDB_DS_HEADER *pdb, const struct PDB_DS_TOC *toc, DWORD file_nr)
#define MAX_BUILTIN_TYPES
static BOOL pev_set_value(struct pevaluator *pev, const char *name, DWORD_PTR val)
static void * pdb_ds_read(const struct PDB_DS_HEADER *pdb, const DWORD *block_list, int size)
static const char * terminate_string(const struct p_string *p_name)
static BOOL pev_pop_val(struct pevaluator *pev, DWORD_PTR *val)
static struct symt * codeview_add_type_array(struct codeview_type_parse *ctp, const char *name, unsigned int elemtype, unsigned int indextype, unsigned int arr_len)
static void codeview_add_variable(const struct msc_debug_info *msc_dbg, struct symt_compiland *compiland, const char *name, unsigned segment, unsigned offset, unsigned symtype, BOOL is_local, BOOL in_tls, BOOL force)
static void pdb_load_stream_name_table(struct pdb_file_info *pdb_file, const char *str, unsigned cb)
static HANDLE map_pdb_file(const struct process *pcs, const struct pdb_lookup *lookup, struct module *module)
static void dump(const void *ptr, unsigned len)
#define CODEVIEW_RSDS_SIG
static struct symt * codeview_get_type(unsigned int typeno, BOOL quiet)
static BOOL codeview_add_type_enum_field_list(struct module *module, struct symt_enum *symt, const union codeview_reftype *ref_type)
static struct symt * codeview_add_type_struct(struct codeview_type_parse *ctp, struct symt *existing, const char *name, int structlen, enum UdtKind kind, unsigned property)
static int codeview_add_type(unsigned int typeno, struct symt *dt)
static void pdb_process_types(const struct msc_debug_info *msc_dbg, const struct pdb_file_info *pdb_file)
#define PEV_ERROR1(pev, msg, pmt)
static void pdb_module_remove(struct process *pcsn, struct module_format *modfmt)
static struct cv_defined_module cv_zmodules[CV_MAX_MODULES]
static BOOL pev_assign(struct pevaluator *pev)
static void * pdb_jg_read(const struct PDB_JG_HEADER *pdb, const WORD *block_list, int size)
static void pdb_convert_types_header(PDB_TYPES *types, const BYTE *image)
static BOOL pdb_process_file(const struct process *pcs, const struct msc_debug_info *msc_dbg, struct pdb_lookup *pdb_lookup)
static struct symt * cv_basic_types[MAX_BUILTIN_TYPES]
static void pdb_process_symbol_imports(const struct process *pcs, const struct msc_debug_info *msc_dbg, const PDB_SYMBOLS *symbols, const void *symbols_image, const char *image, const struct pdb_lookup *pdb_lookup, struct pdb_module_info *pdb_module_info, unsigned module_index)
static const char PDB_JG_IDENT[]
static void pdb_convert_symbols_header(PDB_SYMBOLS *symbols, int *header_size, const BYTE *image)
BOOL pe_load_debug_directory(const struct process *pcs, struct module *module, const BYTE *mapping, const IMAGE_SECTION_HEADER *sectp, DWORD nsect, const IMAGE_DEBUG_DIRECTORY *dbg, int nDbg)
static BOOL codeview_snarf(const struct msc_debug_info *msc_dbg, const BYTE *root, int offset, int size, BOOL do_globals)
static void codeview_clear_type_table(void)
static BOOL codeview_parse_type_table(struct codeview_type_parse *ctp)
static const char PDB_DS_IDENT[]
static struct symt * codeview_add_type_enum(struct codeview_type_parse *ctp, struct symt *existing, const char *name, unsigned fieldlistno, unsigned basetype)
static void codeview_add_udt_element(struct codeview_type_parse *ctp, struct symt_udt *symt, const char *name, int value, unsigned type)
static struct cv_defined_module * cv_current_module
static ULONG_PTR codeview_get_address(const struct msc_debug_info *msc_dbg, unsigned seg, unsigned offset)
static unsigned int codeview_map_offset(const struct msc_debug_info *msc_dbg, unsigned int offset)
static BOOL pdb_process_internal(const struct process *pcs, const struct msc_debug_info *msc_dbg, const struct pdb_lookup *pdb_lookup, struct pdb_module_info *pdb_module_info, unsigned module_index)
static void pdb_free(void *buffer)
static BOOL pev_free(struct pevaluator *pev, struct pdb_cmd_pair *cpair)
static int leaf_as_variant(VARIANT *v, const unsigned short int *leaf)
static void * codeview_cast_symt(struct symt *symt, enum SymTagEnum tag)
static BOOL pev_get_val(struct pevaluator *pev, const char *str, DWORD_PTR *val)
static int numeric_leaf(int *value, const unsigned short int *leaf)
static void * pdb_read_strings(const struct pdb_file_info *pdb_file)
static void codeview_snarf_linetab2(const struct msc_debug_info *msc_dbg, const BYTE *linetab, DWORD size, const char *strimage, DWORD strsize)
static void pev_init(struct pevaluator *pev, struct cpu_stack_walk *csw, PDB_FPO_DATA *fpoext, struct pdb_cmd_pair *cpair)
BOOL pdb_fetch_file_info(const struct pdb_lookup *pdb_lookup, unsigned *matched)
static void codeview_add_func_signature_args(struct codeview_type_parse *ctp, struct symt_function_signature *sym, unsigned ret_type, unsigned args_list)
static BOOL codeview_process_info(const struct process *pcs, const struct msc_debug_info *msc_dbg)
static struct symt * codeview_fetch_type(struct codeview_type_parse *ctp, unsigned typeno, BOOL details)
static void codeview_snarf_linetab(const struct msc_debug_info *msc_dbg, const BYTE *linetab, int size, BOOL pascal_str)
static BOOL pev_deref(struct pevaluator *pev)
static void pdb_convert_symbol_file(const PDB_SYMBOLS *symbols, PDB_SYMBOL_FILE_EX *sfile, unsigned *size, const void *image)
static BOOL pdb_init(const struct pdb_lookup *pdb_lookup, struct pdb_file_info *pdb_file, const char *image, unsigned *matched)
static BOOL codeview_snarf_public(const struct msc_debug_info *msc_dbg, const BYTE *root, int offset, int size)
static unsigned pdb_get_file_size(const struct pdb_file_info *pdb_file, DWORD file_nr)
static unsigned __int64 next
static const struct codeview_linetab2 * codeview_linetab2_next_block(const struct codeview_linetab2 *lt2)
struct _PDB_TYPES_OLD PDB_TYPES_OLD
#define S_DEFRANGE_SUBFIELD_REGISTER
#define S_DEFRANGE_REGISTER
struct _PDB_SYMBOL_FILE_EX PDB_SYMBOL_FILE_EX
struct _PDB_SYMBOLS_OLD PDB_SYMBOLS_OLD
struct _PDB_SYMBOLS PDB_SYMBOLS
#define S_DEFRANGE_FRAMEPOINTER_REL
struct _PDB_SYMBOL_FILE PDB_SYMBOL_FILE
#define S_DEFRANGE_REGISTER_REL
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
static __inline const char * wine_dbgstr_guid(const GUID *id)
PDB_SYMBOL_RANGE_EX range
struct codeview_linetab2 lt2
struct codeview_lt2blk_lines::@3764 l[1]
unsigned int num_defined_types
struct symt ** defined_types
IMAGEHLP_MODULEW64 module
const IMAGE_SECTION_HEADER * sectp
struct pdb_stream_name * stream_dict
struct pdb_file_info::@412::@413 jg
struct pdb_file_info::@412::@414 ds
union pdb_file_info::@412 u
struct pdb_file_info pdb_files[CV_MAX_MODULES]
struct cpu_stack_walk * csw
struct hash_table_elt elt
#define CONTAINING_RECORD(address, type, field)
struct codeview_reftype::@3681 bitfield_v2
struct codeview_reftype::@3680 bitfield_v1
struct codeview_reftype::@3682 arglist_v1
struct codeview_reftype::@3683 arglist_v2
struct codeview_reftype::@3678 generic
struct codeview_reftype::@3679 fieldlist
struct codeview_symbol::@3752 udt_v3
struct codeview_symbol::@3748 constant_v2
struct codeview_symbol::@3734 public_v2
struct codeview_symbol::@3733 public_v1
struct codeview_symbol::@3755 compiland_v2
struct codeview_symbol::@3739 regrel_v3
struct codeview_symbol::@3751 udt_v2
struct codeview_symbol::@3740 register_v1
struct codeview_symbol::@3750 udt_v1
struct codeview_symbol::@3759 thread_v3
struct codeview_symbol::@3728 thunk_v1
struct codeview_symbol::@3745 label_v1
struct codeview_symbol::@3735 public_v3
struct codeview_symbol::@3744 block_v3
struct codeview_symbol::@3730 proc_v1
struct codeview_symbol::@3760 ssearch_v1
struct codeview_symbol::@3758 thread_v2
struct codeview_symbol::@3725 data_v1
struct codeview_symbol::@3732 proc_v3
struct codeview_symbol::@3729 thunk_v3
struct codeview_symbol::@3737 stack_v2
struct codeview_symbol::@3753 objname_v1
struct codeview_symbol::@3727 data_v3
struct codeview_symbol::@3741 register_v2
struct codeview_symbol::@3757 thread_v1
struct codeview_symbol::@3731 proc_v2
struct codeview_symbol::@3749 constant_v3
struct codeview_symbol::@3763 heap_alloc_site
struct codeview_symbol::@3736 stack_v1
struct codeview_symbol::@3742 register_v3
struct codeview_symbol::@3746 label_v3
struct codeview_symbol::@3743 block_v1
struct codeview_symbol::@3747 constant_v1
struct codeview_symbol::@3726 data_v2
struct codeview_symbol::@3738 stack_v3
struct codeview_symbol::@3756 compiland_v3
struct codeview_symbol::@3724 generic
struct codeview_symbol::@3754 compiland_v1
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
struct _FPO_DATA FPO_DATA
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
static unsigned int block