Partager via


IDiaImageData

Expose les détails de l’emplacement de base et des décalages de mémoire du module ou de l’image.

Syntax

IDiaImageData : IUnknown

Méthodes dans l'ordre Vtable

Le tableau suivant présente les méthodes de IDiaImageData.

Méthode Description
IDiaImageData::get_relativeVirtualAddress Récupère l’emplacement dans la mémoire virtuelle du module lié à l’application.
IDiaImageData::get_virtualAddress Récupère l’emplacement dans la mémoire virtuelle de l’image.
IDiaImageData::get_imageBase Récupère l’emplacement de mémoire où l’image doit être basée.

Remarques

Certains flux de débogage (XDATA, PDATA) contiennent des copies de données également stockées dans l’image. Ces objets de données de flux peuvent être interrogés pour l’interface IDiaImageData. Pour plus d’informations, consultez la section « Remarques pour les appelants ».

Remarques pour les appelants

Obtenez cette interface en appelant QueryInterface ou un objet IDiaEnumDebugStreamData. Notez que tous les flux de débogage ne prennent pas en charge l’interface IDiaImageData. Par exemple, actuellement, seuls les flux XDATA et PDATA prennent en charge l’interface IDiaImageData.

Exemple

Cet exemple recherche tous les flux de débogage pour tout flux prenant en charge l’interface IDiaImageData. Si un tel flux est trouvé, certaines informations sur ce flux sont affichées.

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

Configuration requise

En-tête : Dia2.h

Bibliothèque : diaguids.lib

DLL : msdia80.dll

Voir aussi