IDiaImageData

Exposes the details of the base location and memory offsets of the module or image.

Syntax

IDiaImageData : IUnknown

Methods in Vtable Order

The following table shows the methods of IDiaImageData.

Method Description
IDiaImageData::get_relativeVirtualAddress Retrieves the location in virtual memory of the module relative to the application.
IDiaImageData::get_virtualAddress Retrieves the location in virtual memory of the image.
IDiaImageData::get_imageBase Retrieves the memory location where the image should be based.

Remarks

Some debug streams (XDATA, PDATA) contain copies of data also stored in the image. These stream data objects can be queried for the IDiaImageData interface. See the "Notes for Callers" section in this topic for details.

Notes for Callers

Obtain this interface by calling QueryInterface on an IDiaEnumDebugStreamData object. Note that not all debug streams support the IDiaImageData interface. For example, currently only the XDATA and PDATA streams support the IDiaImageData interface.

Example

This example searches all of the debug streams for any stream that supports the IDiaImageData interface. If such a stream is found, some information about that stream is displayed.

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

Requirements

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

See also