Compartir a través de


IDiaImageData

Expone los detalles de la ubicación base y los desplazamientos de memoria del módulo o la imagen.

Syntax

IDiaImageData : IUnknown

Métodos en orden de Vtable

En la tabla siguiente se muestran los métodos de IDiaImageData.

Método Descripción
IDiaImageData::get_relativeVirtualAddress Recupera la ubicación en la memoria virtual del módulo que hace referencia a la aplicación.
IDiaImageData::get_virtualAddress Recupera la ubicación en la memoria virtual de la imagen.
IDiaImageData::get_imageBase Recupera la ubicación de la memoria en la que se debe basar la imagen.

Comentarios

Algunos flujos de depuración (XDATA, PDATA) contienen copias de datos que también se almacenan en la imagen. Estos objetos de datos de flujo se pueden consultar para la interfaz IDiaImageData. Consulte la sección "Notas para autores de la llamada" de este tema para obtener más información.

Notas para autores de la llamada

Obtenga esta interfaz llamando a QueryInterface en un objeto IDiaEnumDebugStreamData. Tenga en cuenta que no todos los flujos de depuración admiten la interfaz IDiaImageData. Por ejemplo, actualmente solo los flujos XDATA y PDATA admiten la interfaz IDiaImageData.

Ejemplo

En este ejemplo se busca en todas las secuencias de depuración cualquier flujo que admita la interfaz IDiaImageData. Si se encuentra dicha secuencia, se muestra alguna información sobre esa secuencia.

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

Encabezado: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Vea también