IDiaImageData

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

Weitere Informationen