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 |