int IDebugModule2.GetInfo(enum_MODULE_INFO_FIELDS dwFields, MODULE_INFO[] infoArray)
{
try
{
MODULE_INFO info = new MODULE_INFO();
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_NAME))
{
info.m_bstrName = "";
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_NAME;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_URL))
{
info.m_bstrUrl = "";
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_URL;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_LOADADDRESS))
{
info.m_addrLoadAddress = 0;
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_LOADADDRESS;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_PREFFEREDADDRESS))
{
// A debugger that actually supports showing the preferred base should crack the PE header and get
// that field. This debugger does not do that, so assume the module loaded where it was suppose to.
info.m_addrPreferredLoadAddress = 0;
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_PREFFEREDADDRESS;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_SIZE))
{
info.m_dwSize = 0;
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_SIZE;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_LOADORDER))
{
info.m_dwLoadOrder = 0;
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_LOADORDER;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_URLSYMBOLLOCATION))
{
info.m_bstrUrlSymbolLocation = "";
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_URLSYMBOLLOCATION;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_FLAGS))
{
info.m_dwModuleFlags = 0;
info.m_dwModuleFlags |= (enum_MODULE_FLAGS.MODULE_FLAG_SYMBOLS);
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_FLAGS;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_VERSION))
{
info.m_bstrVersion = "";
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_VERSION;
}
if (dwFields.HasFlag(enum_MODULE_INFO_FIELDS.MIF_DEBUGMESSAGE))
{
info.m_bstrDebugMessage = "";
info.dwValidFields |= enum_MODULE_INFO_FIELDS.MIF_DEBUGMESSAGE;
}
infoArray[0] = info;
return VSConstants.S_OK;
}
catch (Exception e)
{
return EngineUtils.UnexpectedException(e);
}
}