Condividi tramite


IDiaImageData

Espone i dettagli della posizione di base e degli offset di memoria del modulo o dell'immagine.

Sintassi

IDiaImageData : IUnknown

Metodi nell'ordine Vtable

Nella tabella seguente vengono illustrati i metodi di IDiaImageData.

metodo Descrizione
IDiaImageData::get_relativeVirtualAddress Recupera il percorso nella memoria virtuale del modulo relativo all'applicazione.
IDiaImageData::get_virtualAddress Recupera la posizione nella memoria virtuale dell'immagine.
IDiaImageData::get_imageBase Recupera il percorso di memoria in cui deve essere basata l'immagine.

Osservazioni:

Alcuni flussi di debug (XDATA, PDATA) contengono copie dei dati archiviati anche nell'immagine. Questi oggetti dati di flusso possono essere sottoposti a query per l'interfaccia IDiaImageData . Per informazioni dettagliate, vedere la sezione "Note per i chiamanti" in questo argomento.

Note per i chiamanti

Ottenere questa interfaccia chiamando QueryInterface su un oggetto IDiaEnumDebugStreamData . Si noti che non tutti i flussi di debug supportano l'interfaccia IDiaImageData . Ad esempio, attualmente solo i flussi XDATA e PDATA supportano l'interfaccia IDiaImageData .

Esempio

Questo esempio cerca in tutti i flussi di debug tutti i flussi che supportano l'interfaccia IDiaImageData . Se viene trovato un flusso di questo tipo, vengono visualizzate alcune informazioni su tale flusso.

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

Requisiti

Intestazione: Dia2.h

Libreria: diaguids.lib

DLL: msdia80.dll

Vedi anche