Freigeben über


IDiaImageData

Macht die Details der Speicherort- Arbeitsspeicher und Offset des Moduls oder eines Bilds.

IDiaImageData : IUnknown

Methoden in die Vtable-Reihenfolge

In der folgenden Tabelle werden die Methoden von IDiaImageDataan.

Methode

Beschreibung

IDiaImageData::get_relativeVirtualAddress

Ruft die Position im virtuellen Speicher des Moduls relativ zur Anwendung ab.

IDiaImageData::get_virtualAddress

Ruft die Position im virtuellen Speicher des Bilds ab.

IDiaImageData::get_imageBase

Ruft die Speicheradresse ab, in der das Bild basieren soll.

Hinweise

Einige von Streams (XDATA und PDATA) enthalten Kopien der Daten, die auch im Bild gespeichert werden.Diese Stream datenobjekte können für die IDiaImageData-Schnittstelle abgefragt werden.Weitere Informationen finden Sie im Abschnitt „Hinweise für Aufrufer“ in diesem Thema.

Hinweise für Aufrufer

Rufen Sie diese Schnittstelle, indem sie QueryInterface auf einem IDiaEnumDebugStreamData-Objekts aufruft.Beachten Sie, dass nicht alle Streams unterstützen die IDiaImageData-Schnittstelle debuggen.Zum Beispiel nur die derzeit XDATA- und PDATA-Datenströme unterstützen die IDiaImageData-Schnittstelle.

Beispiel

In diesem Beispiel wird in allen Debuggen von Streams für jeden Datenstrom, der die IDiaImageData-Schnittstelle unterstützt.Wenn ein solcher Streams gefunden wird, werden einige Informationen über diesen 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

DLLs: msdia80.dll

Siehe auch

Referenz

IDiaEnumDebugStreamData

Weitere Ressourcen

Schnittstellen (Debug Interface Access SDK)