Compartilhar via


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

O método CreateTypedObject é o método que permite que um cliente crie uma representação de um objeto nativo/idioma no espaço de endereço de um destino de depuração. Se o tipo do objeto recém-criado (conforme indicado pelo argumento objectType) corresponder a uma ou mais assinaturas de tipo registradas com o gerenciador de modelos de dados como visualizadores canônicos ou extensões, esses modelos de dados correspondentes serão anexados automaticamente ao objeto de instância criado antes de serem retornados ao chamador.

Sintaxe

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

Parâmetros

context

O contexto do host de depuração no qual esse objeto está localizado. Se nenhum contexto explícito for fornecido, o contexto do objeto recém-criado herdará do contexto do argumento objectType. Um chamador pode passar o valor do marcador especial USE_CURRENT_HOST_CONTEXT para indicar que o objeto deve receber o contexto atual na interface do usuário do depurador.

objectLocation

O local do objeto no espaço de endereço do destino de depuração. Se o local for um endereço virtual, o local poderá ser construído pelo cliente usando um deslocamento de 64 bits para o espaço de endereço; caso contrário, o local deve ser recuperado de outra interface de host de depuração.

objectType

O tipo do objeto que está sendo construído. O contexto do tipo será propagado para o objeto recém-criado se nenhum contexto explícito for passado no argumento de contexto.

object

O objeto recém-criado será retornado aqui.

Retornar valor

Esse método retorna HRESULT que indica êxito ou falha.

Comentários

Código de exemplo

// 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
            }
        }
    }
}

Requisitos

Requisito Valor
Cabeçalho dbgmodel.h

Confira também

Interface IDataModelManager