IDataModelManager2::CreateTypedObject-Methode (dbgmodel.h)

Die CreateTypedObject-Methode ist die Methode, mit der ein Client eine Darstellung eines nativen/Sprachobjekts 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 beim Datenmodell-Manager als kanonische Schnellansichten oder Erweiterungen registriert sind, werden diese übereinstimmenden Datenmodelle automatisch an das erstellte instance -Objekt angefügt, bevor es 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 aktuellen Kontext in der Benutzeroberfläche des Debuggers empfangen soll.

objectLocation

Die Position des Objekts im Adressraum des Debugziels. Wenn es sich bei dem Standort um eine virtuelle Adresse handelt, 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 Objekts, das erstellt wird. Der Kontext des Typs wird an das neu erstellte Objekt weitergegeben, wenn im Kontextargument kein expliziter Kontext übergeben wird.

object

Das neu erstellte Objekt wird hier zurückgegeben.

Rückgabewert

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

Hinweise

Beispielcode

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

IDataModelManager2-Schnittstelle

Anforderungen

Anforderung Wert
Header dbgmodel.h