IDiaImageData
Opisuje szczegóły bazowy przesunięcia lokalizacji i pamięci modułu lub obrazu.
IDiaImageData : IUnknown
Metody w kolejności Vtable
W poniższej tabeli przedstawiono metody IDiaImageData.
Metoda |
Opis |
---|---|
Pobiera lokalizacji w pamięci wirtualnej modułu w stosunku do aplikacji. |
|
Pobiera lokalizacji w pamięci wirtualnej obrazu. |
|
Pobiera lokalizacji pamięci, gdzie oparte obrazu. |
Uwagi
Niektóre strumienie debugowania (XDATA, PDATA) zawierają kopie danych również przechowywane na obrazie.Te strumienia danych, obiekty mogą być wysyłane kwerendy do IDiaImageData interfejsu.W sekcji "Uwagi do wywoływania" w tym temacie, aby uzyskać szczegółowe informacje.
Uwagi do wywoływania
Ten interfejs uzyskać, wywołując QueryInterface na IDiaEnumDebugStreamData obiektu.Należy zauważyć, że nie wszystkie debugowania strumieni wsparcie IDiaImageData interfejsu.Na przykład, obecnie obsługuje tylko strumienie XDATA i PDATA IDiaImageData interfejsu.
Przykład
W tym przykładzie wyszukiwane wszystkie strumienie debugowania dla wszelkich strumienia, który obsługuje IDiaImageData interfejsu.Jeśli zostanie znaleziony taki strumienia, niektóre informacje dotyczące tego strumienia jest wyświetlany.
void ShowImageData(IDiaSession *pSession)
{
if (pSession != NULL)
{
CComPtr<IDiaEnumDebugStreams> pStreamsList;
HRESULT hr;
hr = pSession->getEnumDebugStreams(&pStreamsList);
if (SUCCEEDED(hr))
{
LONG numStreams = 0;
hr = pStreamsList->get_Count(&numStreams);
if (SUCCEEDED(hr))
{
ULONG fetched = 0;
for (LONG i = 0; i < numStreams; i++)
{
CComPtr<IDiaEnumDebugStreamData> pStream;
hr = pStreamsList->Next(1,&pStream,&fetched);
if (fetched == 1)
{
CComPtr<IDiaImageData> pImageData;
hr = pStream->QueryInterface(__uuidof(IDiaImageData),
(void **)&pImageData);
if (SUCCEEDED(hr))
{
CComBSTR name;
hr = pStream->get_name(&name);
if (SUCCEEDED(hr))
{
wprintf(L"Stream %s:\n",(BSTR)name);
}
else
{
wprintf(L"Failed to get name of stream\n");
}
ULONGLONG imageBase = 0;
if (pImageData->get_imageBase(&imageBase) == S_OK)
{
wprintf(L" image base = 0x%0I64x\n",imageBase);
}
DWORD relVA = 0;
if (pImageData->get_relativeVirtualAddress(&relVA) == S_OK)
{
wprintf(L" relative virtual address = 0x%08lx\n",relVA);
}
ULONGLONG va = 0;
if (pImageData->get_virtualAddress(&va) == S_OK)
{
wprintf(L" virtual address = 0x%0I64x\n", va);
}
}
}
}
}
}
}
}
Wymagania
Nagłówek: Dia2.h
Biblioteki: diaguids.lib
Biblioteka DLL: msdia80.dll