Skip to content

Commit

Permalink
cosmetic fixes of previous commit
Browse files Browse the repository at this point in the history
  • Loading branch information
wbenny committed Jan 10, 2019
1 parent be7a72f commit 16c2a00
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 113 deletions.
47 changes: 29 additions & 18 deletions Source/PDB.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ SymbolModuleBase::Open(
)
{
//
// Obtain access to the provider
// Obtain access to the provider.
//

HRESULT HResult = S_OK;
auto PDBSearchPath = L"Srv*.\\Symbols*https://msdl.microsoft.com/download/symbols";
char FileExt[MAX_PATH] = { 0 };
HRESULT HResult = S_OK;
LPCOLESTR PDBSearchPath = L"Srv*.\\Symbols*https://msdl.microsoft.com/download/symbols";
char FileExt[MAX_PATH] = { 0 };

HResult = CoCreateInstance(
__uuidof(DiaSource),
Expand All @@ -82,10 +82,13 @@ SymbolModuleBase::Open(
(void**)&m_DataSource
);

// Retry with direct export call
//
// Retry with direct export call.
//

if (HResult == REGDB_E_CLASSNOTREG)
{
HMODULE HMod = LoadLibraryW(L"msdia140.dll");
HMODULE HMod = LoadLibrary(TEXT("msdia140.dll"));

if (!HMod)
{
Expand All @@ -94,16 +97,16 @@ SymbolModuleBase::Open(
}

auto DllGetClassObject = reinterpret_cast<BOOL(WINAPI*)(REFCLSID, REFIID, LPVOID)>(GetProcAddress(HMod, "DllGetClassObject"));

if (!DllGetClassObject)
{
HResult = HRESULT_FROM_WIN32(GetLastError());
return FALSE;
}

CComPtr<IClassFactory> ClassFactory;
CComPtr<IClassFactory> ClassFactory;
HResult = DllGetClassObject(__uuidof(DiaSource), __uuidof(IClassFactory), &ClassFactory);

if (FAILED(HResult))
{
return FALSE;
Expand All @@ -118,7 +121,7 @@ SymbolModuleBase::Open(
}

_splitpath_s(Path, nullptr, 0, nullptr, 0, nullptr, 0, FileExt, _countof(FileExt));

if (_stricmp(FileExt, ".pdb") == 0)
{
HResult = m_DataSource->loadDataFromPdb(
Expand Down Expand Up @@ -547,16 +550,24 @@ SymbolModule::BuildSymbolMap()
IDiaEnumSymbols* DiaSymbolEnumerator;

if (SUCCEEDED(m_GlobalSymbol->findChildren(SymTagPublicSymbol, nullptr, nsNone, &DiaSymbolEnumerator)))
{
BuildFunctionSetFromEnumerator(DiaSymbolEnumerator);
}

if (SUCCEEDED(m_GlobalSymbol->findChildren(SymTagEnum, nullptr, nsNone, &DiaSymbolEnumerator)))
{
BuildSymbolMapFromEnumerator(DiaSymbolEnumerator);
}

if (SUCCEEDED(m_GlobalSymbol->findChildren(SymTagUDT, nullptr, nsNone, &DiaSymbolEnumerator)))
{
BuildSymbolMapFromEnumerator(DiaSymbolEnumerator);
}

if (DiaSymbolEnumerator)
if (DiaSymbolEnumerator)
{
DiaSymbolEnumerator->Release();
}
}

const SymbolMap&
Expand Down Expand Up @@ -653,8 +664,8 @@ SymbolModule::ProcessSymbolEnum(
ULONG FetchedSymbolCount = 0;

for (DWORD Index = 0;
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
{
SYMBOL_ENUM_FIELD* EnumValue = &Symbol->u.Enum.Fields[Index];

Expand Down Expand Up @@ -782,8 +793,8 @@ SymbolModule::ProcessSymbolFunction(
ULONG FetchedSymbolCount = 0;

for (DWORD Index = 0;
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
{
SYMBOL* Argument;
Argument = GetSymbol(DiaChildSymbol);
Expand Down Expand Up @@ -837,8 +848,8 @@ SymbolModule::ProcessSymbolUdt(
ULONG FetchedSymbolCount = 0;

for (DWORD Index = 0;
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
SUCCEEDED(DiaSymbolEnumerator->Next(1, &DiaChildSymbol, &FetchedSymbolCount)) && (FetchedSymbolCount == 1);
Index++)
{
SYMBOL_UDT_FIELD* Member = &Symbol->u.Udt.Fields[Index];

Expand Down Expand Up @@ -1124,7 +1135,7 @@ PDB::GetBasicTypeString(
if (TypeMap[n].BaseType == BaseType)
{
if (TypeMap[n].Length == Size ||
TypeMap[n].Length == 0)
TypeMap[n].Length == 0)
{
return TypeMap[n].TypeString;
}
Expand Down
186 changes: 97 additions & 89 deletions Source/PDBCallback.h
Original file line number Diff line number Diff line change
@@ -1,112 +1,120 @@
#pragma once

#include <dia2.h> // IDia* interfaces

//////////////////////////////////////////////////////////////////////////
// PDBCallback
//

class PDBCallback : public IDiaLoadCallback2
class PDBCallback
: public IDiaLoadCallback2
{
volatile unsigned long m_RefCount = 0;

public:

//IUnknown
ULONG STDMETHODCALLTYPE AddRef() override
{
return m_RefCount++;
}
ULONG STDMETHODCALLTYPE Release() override
{
if ((--m_RefCount) == 0)
public:
//
// IUnknown
//

ULONG STDMETHODCALLTYPE AddRef() override
{
delete this;
return m_RefCount++;
}

return m_RefCount;
}
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID Rid, void **Interface) override
{
if (Interface == nullptr)
ULONG STDMETHODCALLTYPE Release() override
{
return E_INVALIDARG;
if ((--m_RefCount) == 0)
{
delete this;
}

return m_RefCount;
}

if (Rid == __uuidof(IDiaLoadCallback2))
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID Rid, void **Interface) override
{
*Interface = (IDiaLoadCallback2 *)this;
if (Interface == nullptr)
{
return E_INVALIDARG;
}

if (Rid == __uuidof(IDiaLoadCallback2))
{
*Interface = (IDiaLoadCallback2 *)this;
}
else if (Rid == __uuidof(IDiaLoadCallback))
{
*Interface = (IDiaLoadCallback *)this;
}
else if (Rid == __uuidof(IUnknown))
{
*Interface = (IUnknown *)this;
}
else
{
*Interface = nullptr;
}

if (*Interface != nullptr)
{
AddRef();
return S_OK;
}

return E_NOINTERFACE;
}
else if (Rid == __uuidof(IDiaLoadCallback))

HRESULT STDMETHODCALLTYPE NotifyDebugDir(
BOOL fExecutable,
DWORD cbData,
BYTE data[]) override // really a const struct _IMAGE_DEBUG_DIRECTORY *
{
*Interface = (IDiaLoadCallback *)this;
return S_OK;
}
else if (Rid == __uuidof(IUnknown))

HRESULT STDMETHODCALLTYPE NotifyOpenDBG(
LPCOLESTR dbgPath,
HRESULT resultCode) override
{
// wprintf(L"opening %s...\n", dbgPath);
return S_OK;
}

HRESULT STDMETHODCALLTYPE NotifyOpenPDB(
LPCOLESTR pdbPath,
HRESULT resultCode) override
{
*Interface = (IUnknown *)this;
// wprintf(L"opening %s...\n", pdbPath);
return S_OK;
}
else

HRESULT STDMETHODCALLTYPE RestrictRegistryAccess() override
{
*Interface = nullptr;
// return hr != S_OK to prevent querying the registry for symbol search paths
return S_OK;
}

HRESULT STDMETHODCALLTYPE RestrictSymbolServerAccess() override
{
// return hr != S_OK to prevent accessing a symbol server
return S_OK;
}

HRESULT STDMETHODCALLTYPE RestrictOriginalPathAccess() override
{
// return hr != S_OK to prevent querying the registry for symbol search paths
return S_OK;
}

HRESULT STDMETHODCALLTYPE RestrictReferencePathAccess() override
{
// return hr != S_OK to prevent accessing a symbol server
return S_OK;
}

HRESULT STDMETHODCALLTYPE RestrictDBGAccess() override
{
return S_OK;
}

if (*Interface != nullptr)
HRESULT STDMETHODCALLTYPE RestrictSystemRootAccess() override
{
AddRef();
return S_OK;
}

return E_NOINTERFACE;
}

HRESULT STDMETHODCALLTYPE NotifyDebugDir(
BOOL fExecutable,
DWORD cbData,
BYTE data[]) override // really a const struct _IMAGE_DEBUG_DIRECTORY *
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE NotifyOpenDBG(
LPCOLESTR dbgPath,
HRESULT resultCode) override
{
// wprintf(L"opening %s...\n", dbgPath);
return S_OK;
}

HRESULT STDMETHODCALLTYPE NotifyOpenPDB(
LPCOLESTR pdbPath,
HRESULT resultCode) override
{
// wprintf(L"opening %s...\n", pdbPath);
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictRegistryAccess() override
{
// return hr != S_OK to prevent querying the registry for symbol search paths
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictSymbolServerAccess() override
{
// return hr != S_OK to prevent accessing a symbol server
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictOriginalPathAccess() override
{
// return hr != S_OK to prevent querying the registry for symbol search paths
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictReferencePathAccess() override
{
// return hr != S_OK to prevent accessing a symbol server
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictDBGAccess() override
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE RestrictSystemRootAccess() override
{
return S_OK;
}
};
private:
volatile unsigned long m_RefCount = 0;
};
12 changes: 6 additions & 6 deletions Source/PDBExtractor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,10 @@ PDBExtractor::ParseParameters(
std::ios::out
);
}
else
{
m_Settings.PdbHeaderReconstructorSettings.OutputFile = nullptr;
}
else
{
m_Settings.PdbHeaderReconstructorSettings.OutputFile = nullptr;
}
break;

case 't':
Expand Down Expand Up @@ -685,11 +685,11 @@ PDBExtractor::CloseOpenedFiles()

if (m_Settings.TestFilename)
{
delete m_Settings.PdbHeaderReconstructorSettings.TestFile;
delete m_Settings.PdbHeaderReconstructorSettings.TestFile;
}

if (m_Settings.OutputFilename)
{
delete m_Settings.PdbHeaderReconstructorSettings.OutputFile;
delete m_Settings.PdbHeaderReconstructorSettings.OutputFile;
}
}

0 comments on commit 16c2a00

Please sign in to comment.