Freigeben über


IDataModelManager3::CreateTypedObject-Methode (dbgmodel.h)

Die CreateTypedObject-Methode ist die Methode, mit der ein Client eine Darstellung eines systemeigenen/spracheigenen Objekts im Adressraum eines Debugziels erstellen kann. Wenn der Typ des neu erstellten Objekts (wie durch das ObjectType-Argument angegeben) mit einer oder mehreren Typsignaturen übereinstimmt, die mit dem Datenmodell-Manager als kanonische Visualisierungen oder Erweiterungen registriert sind, werden diese übereinstimmenden Datenmodelle automatisch an das erstellte Instanzobjekt angefügt, bevor sie an den Aufrufer zurückgegeben wird.

Syntax

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

Parameter

context

Der Debughostkontext, in dem sich dieses Objekt befindet. Wenn kein expliziter Kontext angegeben wird, erbt der Kontext des neu erstellten Objekts vom Kontext des ObjectType-Arguments. Ein Aufrufer kann den speziellen Markerwert USE_CURRENT_HOST_CONTEXT übergeben, um anzugeben, dass das Objekt den Kontext empfangen soll, der sich auf der Benutzeroberfläche des Debuggers befindet.

objectLocation

Die Position des Objekts im Adressraum des Debugziels. Wenn der Standort eine virtuelle Adresse ist, kann der Standort vom Client mithilfe eines 64-Bit-Offsets in den Adressraum erstellt werden. andernfalls muss der Speicherort von einer anderen Debughostschnittstelle abgerufen werden.

objectType

Der Typ des zu erstellenden Objekts. Der Kontext des Typs wird an das neu erstellte Objekt weitergegeben, wenn kein expliziter Kontext im Kontextargument übergeben wird.

object

Das neu erstellte Objekt wird hier zurückgegeben.

Rückgabewert

Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt.

Bemerkungen

Beispielcode-

// As an example, create an instance of nt!_EPROCESS at address 0x100
ComPtr<IDebugHost> spHost;           /* get the host */
ComPtr<IDataModelManager3> 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
            }
        }
    }
}

Anforderungen

Anforderung Wert
Header- dbgmodel.h

Siehe auch

IDataModelManager3-Schnittstelle