Partilhar via


IDiaImageData

Expõe os detalhes do local base e dos deslocamentos de memória do módulo ou da imagem.

Sintaxe

IDiaImageData : IUnknown

Métodos na ordem VTable

A tabela a seguir mostra os métodos de IDiaImageData.

Método Descrição
IDiaImageData::get_relativeVirtualAddress Recupera o local na memória virtual do módulo em relação ao aplicativo.
IDiaImageData::get_virtualAddress Recupera o local na memória virtual da imagem.
IDiaImageData::get_imageBase Recupera o local de memória em que a imagem deve ser baseada.

Comentários

Alguns fluxos de depuração (XDATA, PDATA) contêm cópias de dados também armazenados na imagem. Esses objetos de dados de fluxo podem ser consultados para a interface IDiaImageData. Consulte a seção "Observações para chamadores" neste tópico para obter detalhes.

Observações para chamadores

Obtenha essa interface chamando QueryInterface em um objeto IDiaEnumDebugStreamData. Observe que nem todos os fluxos de depuração dão suporte à interface IDiaImageData. Por exemplo, atualmente, apenas os fluxos XDATA e PDATA dão suporte à interface IDiaImageData.

Exemplo

Esse exemplo pesquisa todos os fluxos de depuração para qualquer fluxo que dê suporte à interface IDiaImageData. Se esse fluxo for encontrado, algumas informações sobre esse fluxo serão exibidas.

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

Requisitos

Cabeçalho: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Confira também