Partager via


IDataModelManager ::CreateTypedObject, méthode (dbgmodel.h)

La méthode CreateTypedObject est la méthode qui permet à un client de créer une représentation d’un objet natif/de langage dans l’espace d’adressage d’une cible de débogage. Si le type de l’objet nouvellement créé (comme indiqué par l’argument objectType) correspond à une ou plusieurs signatures de type inscrites auprès du gestionnaire de modèles de données en tant que visualiseurs ou extensions canoniques, ces modèles de données correspondants sont automatiquement attachés à l’objet instance créé avant qu’il ne soit retourné à l’appelant.

Syntaxe

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

Paramètres

context

Contexte hôte de débogage dans lequel se trouve cet objet. Si aucun contexte explicite n’est donné, le contexte de l’objet nouvellement créé héritera du contexte de l’argument objectType. Un appelant peut passer la valeur de marqueur spéciale USE_CURRENT_HOST_CONTEXT pour indiquer que l’objet doit recevoir le contexte actuel dans l’interface utilisateur du débogueur.

objectLocation

Emplacement de l’objet dans l’espace d’adressage de la cible de débogage. Si l’emplacement est une adresse virtuelle, l’emplacement peut être construit par le client à l’aide d’un décalage 64 bits dans l’espace d’adressage ; sinon , l’emplacement doit être récupéré à partir d’une autre interface hôte de débogage.

objectType

Type de l’objet en cours de construction. Le contexte du type se propage à l’objet nouvellement créé si aucun contexte explicite n’est passé dans l’argument de contexte.

object

L’objet nouvellement créé sera retourné ici.

Valeur retournée

Cette méthode retourne HRESULT qui indique la réussite ou l’échec.

Remarques

Exemple de Code

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

Configuration requise

Condition requise Valeur
En-tête dbgmodel.h

Voir aussi

Interface IDataModelManager