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 |