Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Macht die Details der Basisadresse und der Speicheroffsets des Moduls oder Bilds verfügbar.
Syntax
IDiaImageData : IUnknown
Methoden in Vtable-Reihenfolge
In der folgenden Tabelle sind die Methoden von IDiaImageData
aufgeführt.
Methode | BESCHREIBUNG |
---|---|
IDiaImageData::get_relativeVirtualAddress | Ruft den Speicherort im virtuellen Speicher des Moduls relativ zur Anwendung ab. |
IDiaImageData::get_virtualAddress | Ruft den Speicherort im virtuellen Arbeitsspeicher des Images ab. |
IDiaImageData::get_imageBase | Ruft den Speicherort im Arbeitsspeicher ab, an dem sich das Image (seine Basis) befinden soll. |
Bemerkungen
Einige Debugstreams (XDATA, PDATA) enthalten Kopien von Daten, die ebenfalls im Image gespeichert sind. Diese Streamdatenobjekte können für die IDiaImageData
-Schnittstelle abgefragt werden. Ausführliche Informationen finden Sie im Abschnitt „Hinweise für Aufrufer“ in diesem Thema.
Hinweise für Aufrufer
Rufen Sie diese Schnittstelle ab, indem Sie QueryInterface
für ein IDiaEnumDebugStreamData-Objekt aufrufen. Beachten Sie, dass nicht alle Debugstreams die IDiaImageData
-Schnittstelle unterstützen. Beispielsweise unterstützen derzeit nur die XDATA- und PDATA-Streams die IDiaImageData
-Schnittstelle.
Beispiel
In diesem Beispiel werden alle Debugstreams nach einem Stream durchsucht, der die IDiaImageData
-Schnittstelle unterstützt. Wenn ein solcher Stream gefunden wird, werden einige Informationen zu diesem Stream angezeigt.
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);
}
}
}
}
}
}
}
}
Anforderungen
Header: Dia2.h
Bibliothek: diaguids.lib
DLL: msdia80.dll