Sdílet prostřednictvím


IDiaImageData

Zveřejňuje podrobnosti o základním umístění a posunech paměti modulu nebo image.

Syntaxe

IDiaImageData : IUnknown

Metody v pořadí Vtable

Následující tabulka ukazuje metody IDiaImageData.

metoda Popis
IDiaImageData::get_relativeVirtualAddress Načte umístění ve virtuální paměti modulu vzhledem k aplikaci.
IDiaImageData::get_virtualAddress Načte umístění ve virtuální paměti image.
IDiaImageData::get_imageBase Načte umístění paměti, kde má být image založena.

Poznámky

Některé ladicí streamy (XDATA, PDATA) obsahují kopie dat také uložené na obrázku. Tyto datové objekty datového proudu lze dotazovat na IDiaImageData rozhraní. Podrobnosti najdete v části Poznámky pro volající v tomto tématu.

Poznámky pro volající

Získejte toto rozhraní voláním QueryInterfaceIDiaEnumDebugStreamData objektu. Všimněte si, že rozhraní nepodporují IDiaImageData všechny ladicí streamy. V současné době rozhraní podporují IDiaImageData pouze datové proudy XDATA a PDATA.

Příklad

Tento příklad vyhledá všechny ladicí streamy pro všechny streamy, které podporují IDiaImageData rozhraní. Pokud se takový datový proud najde, zobrazí se některé informace o tomto datovém proudu.

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);
                            }
                        }
                    }
                }
            }
        }
    }
}

Požadavky

Hlavička: Dia2.h

Knihovna: diaguids.lib

DLL: msdia80.dll

Viz také