Compartir a través de


Método IDataModelManager2::CreateTypedObject (dbgmodel.h)

El método CreateTypedObject es el método que permite a un cliente crear una representación de un objeto nativo o de idioma en el espacio de direcciones de un destino de depuración. Si el tipo del objeto recién creado (como se indica en el argumento objectType) coincide con una o varias firmas de tipo registradas con el administrador de modelos de datos como visualizadores canónicos o extensiones, esos modelos de datos coincidentes se asociarán automáticamente al objeto de instancia creado antes de que se devuelva al autor de la llamada.

Sintaxis

HRESULT CreateTypedObject(
  IDebugHostContext           *context,
  Location                    objectLocation,
  IDebugHostType              *objectType,
  _COM_Errorptr_ IModelObject **object
);

Parámetros

context

Contexto de host de depuración en el que se encuentra este objeto. Si no se da ningún contexto explícito, el contexto del objeto recién creado heredará del contexto del argumento objectType. Un autor de la llamada puede pasar el valor de marcador especial USE_CURRENT_HOST_CONTEXT para indicar que el objeto debe recibir el contexto actual en la interfaz de usuario del depurador.

objectLocation

Ubicación del objeto en el espacio de direcciones del destino de depuración. Si la ubicación es una dirección virtual, el cliente puede construir la ubicación mediante un desplazamiento de 64 bits en el espacio de direcciones; de lo contrario: la ubicación debe recuperarse de otra interfaz de host de depuración.

objectType

Tipo del objeto que se está construyendo. El contexto del tipo se propagará al objeto recién creado si no se pasa ningún contexto explícito en el argumento context.

object

El objeto recién creado se devolverá aquí.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error.

Comentarios

Código de ejemplo

// As an example, create an instance of nt!_EPROCESS at address 0x100
ComPtr<IDebugHost> spHost;           /* get the host */
ComPtr<IDataModelManager> spManager; /* get the data model manager */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    // Find a context in which to query.  This queries the current *UI* 
    // context.  You can fetch the context from a process or something 
    // else to query within a specific process.
    ComPtr<IDebugHostModule> spNtModule;
    if (SUCCEEDED(spSym->FindModuleByName(USE_CURRENT_HOST_CONTEXT, 
                                          L"nt", 
                                          &spNtModule)))
    {
        ComPtr<IDebugHostType> spEProcessType;
        if (SUCCEEDED(spNtModule->FindTypeByName(L"_EPROCESS", &spEProcessType)))
        {
            Location creationLocation = 0x100;
            ComPtr<IModelObject> spProcess;
            if (SUCCEEDED(spManager->CreateTypedObject(nullptr, 
                                                       creationLocation,
                                                       spEProcessType.Get(),
                                                       &spProcess)))
            {
                // spProcess is now the _EPROCESS at address 0x100
                // You can get fields, etc... through standard IModelObject methods
            }
        }
    }
}

Interfaz IDataModelManager2

Requisitos

Requisito Valor
Header dbgmodel.h