Bagikan melalui


IDiaImageData

Mengekspos detail lokasi dasar dan offset memori dari modul atau gambar.

Sintaks

IDiaImageData : IUnknown

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDiaImageData.

Metode Deskripsi
IDiaImageData::get_relativeVirtualAddress Mengambil lokasi dalam memori virtual modul relatif terhadap aplikasi.
IDiaImageData::get_virtualAddress Mengambil lokasi dalam memori virtual gambar.
IDiaImageData::get_imageBase Mengambil lokasi memori tempat gambar harus didasarkan.

Keterangan

Beberapa aliran debug (XDATA, PDATA) berisi salinan data yang juga disimpan dalam gambar. Objek data aliran ini dapat dikueri untuk IDiaImageData antarmuka. Lihat bagian "Catatan untuk Penelepon" di topik ini untuk detailnya.

Catatan untuk Penelepon

Dapatkan antarmuka ini dengan memanggil QueryInterface objek IDiaEnumDebugStreamData . Perhatikan bahwa tidak semua aliran debug mendukung IDiaImageData antarmuka. Misalnya, saat ini hanya aliran XDATA dan PDATA yang mendukung IDiaImageData antarmuka.

Contoh

Contoh ini mencari semua aliran debug untuk aliran apa pun yang mendukung IDiaImageData antarmuka. Jika aliran seperti itu ditemukan, beberapa informasi tentang aliran tersebut ditampilkan.

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

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Baca juga