IDataModelManager::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) einer oder mehreren Typsignaturen entspricht, 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 arguments objectType. Ein Aufrufer kann den speziellen Markerwert USE_CURRENT_HOST_CONTEXT übergeben, um anzugeben, dass das Objekt den Kontext empfangen soll, der auf der Benutzeroberfläche des Debuggers aktuell ist.
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 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 auf Erfolg oder Fehler hinweist.
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
}
}
}
}
Anforderungen
Anforderung | Wert |
---|---|
Header | dbgmodel.h |