Condividi tramite


Metodo IDataModelManager::CreateTypedObject (dbgmodel.h)

Il metodo CreateTypedObject è il metodo che consente a un client di creare una rappresentazione di un oggetto nativo/linguistico nello spazio indirizzi di una destinazione di debug. Se il tipo dell'oggetto appena creato (come indicato dall'argomento objectType) corrisponde a una o più firme di tipo registrate con gestione modelli di dati come visualizzatori canonici o estensioni, tali modelli di dati corrispondenti verranno collegati automaticamente all'oggetto istanza creata prima che venga restituito al chiamante.

Sintassi

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

Parametri

context

Contesto host di debug in cui si trova questo oggetto. Se non viene specificato alcun contesto esplicito, il contesto dell'oggetto appena creato erediterà dal contesto dell'argomento objectType. Un chiamante può passare il valore del marcatore speciale USE_CURRENT_HOST_CONTEXT per indicare che l'oggetto deve ricevere il contesto corrente nell'interfaccia utente del debugger.

objectLocation

Posizione dell'oggetto nello spazio indirizzi della destinazione di debug. Se la posizione è un indirizzo virtuale, la posizione può essere costruita dal client usando un offset a 64 bit nello spazio indirizzi; in caso contrario, il percorso deve essere recuperato da un'altra interfaccia host di debug.

objectType

Tipo dell'oggetto costruito. Il contesto del tipo verrà propagato all'oggetto appena creato se non viene passato alcun contesto esplicito nell'argomento di contesto.

object

L'oggetto appena creato verrà restituito qui.

Valore restituito

Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore.

Commenti

Codice di esempio

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

Requisiti

Requisito Valore
Intestazione dbgmodel.h

Vedi anche

Interfaccia IDataModelManager