MCPcopy Create free account
hub / github.com/commial/ttd-bindings / GetPdbFilePath

Function GetPdbFilePath

example_calltree/main.cpp:63–111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61}
62
63BOOL WINAPI GetPdbFilePath(TTD::Cursor* cursor, TTD::GuestAddress pModuleBase, char* PdbPath, size_t PdbPathSize)
64{
65 CV_INFO_PDB70 Pdb70Info;
66 CHAR SymbolPath[MAX_PATH] = { 0 };
67 CHAR NtSymbolPath[MAX_PATH] = { 0 };
68 BOOL bResult = FALSE;
69
70 if (!GetModulePdbInfo(cursor, pModuleBase, &Pdb70Info)) goto End;
71 if (strchr((char*)Pdb70Info.PdbFileName, '\\') != NULL) // Local Path
72 {
73 StringCbPrintfA((STRSAFE_LPSTR)PdbPath, PdbPathSize, "%hs", Pdb70Info.PdbFileName);
74 }
75 else
76 {
77 int iResult;
78 char* pStar = NULL;
79 if (GetEnvironmentVariableA("_NT_SYMBOL_PATH", NtSymbolPath, sizeof(NtSymbolPath)) == 0) goto End;
80
81 iResult = sscanf_s(NtSymbolPath, "srv*%259s", SymbolPath, sizeof(SymbolPath));
82 if (iResult == 0) {
83 iResult = sscanf_s(NtSymbolPath, "SRV*%259s", SymbolPath, sizeof(SymbolPath));
84 if (iResult == 0) goto End;
85 }
86 pStar = strchr(SymbolPath + 4, '*');
87 if (pStar != NULL) *pStar = 0;
88
89
90 StringCbPrintfA((STRSAFE_LPSTR)PdbPath, PdbPathSize, "%s\\%s\\%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X%X\\%s",
91 SymbolPath,
92 Pdb70Info.PdbFileName,
93 Pdb70Info.Signature.Data1,
94 Pdb70Info.Signature.Data2,
95 Pdb70Info.Signature.Data3,
96 Pdb70Info.Signature.Data4[0],
97 Pdb70Info.Signature.Data4[1],
98 Pdb70Info.Signature.Data4[2],
99 Pdb70Info.Signature.Data4[3],
100 Pdb70Info.Signature.Data4[4],
101 Pdb70Info.Signature.Data4[5],
102 Pdb70Info.Signature.Data4[6],
103 Pdb70Info.Signature.Data4[7],
104 Pdb70Info.Age,
105 Pdb70Info.PdbFileName
106 );
107 }
108 bResult = TRUE;
109End:
110 return (bResult);
111}
112/**** END PDB ****/
113
114 // Indent level. Can be negative if we start inside a function

Callers 1

mainFunction · 0.85

Calls 1

GetModulePdbInfoFunction · 0.85

Tested by

no test coverage detected