Metodo IDataModelManager::CreateTypedObject (dbgmodel.h)
Il metodo CreateTypedObject è il metodo che consente a un client di creare una rappresentazione di un oggetto nativo/linguistico nello spazio indirizzi di una destinazione di debug. Se il tipo dell'oggetto appena creato (come indicato dall'argomento objectType) corrisponde a una o più firme di tipo registrate con gestione modelli di dati come visualizzatori canonici o estensioni, tali modelli di dati corrispondenti verranno collegati automaticamente all'oggetto istanza creata prima che venga restituito al chiamante.
Sintassi
HRESULT CreateTypedObject(
IDebugHostContext *context,
Location objectLocation,
IDebugHostType *objectType,
_COM_Errorptr_ IModelObject **object
);
Parametri
context
Contesto host di debug in cui si trova questo oggetto. Se non viene specificato alcun contesto esplicito, il contesto dell'oggetto appena creato erediterà dal contesto dell'argomento objectType. Un chiamante può passare il valore del marcatore speciale USE_CURRENT_HOST_CONTEXT per indicare che l'oggetto deve ricevere il contesto corrente nell'interfaccia utente del debugger.
objectLocation
Posizione dell'oggetto nello spazio indirizzi della destinazione di debug. Se la posizione è un indirizzo virtuale, la posizione può essere costruita dal client usando un offset a 64 bit nello spazio indirizzi; in caso contrario, il percorso deve essere recuperato da un'altra interfaccia host di debug.
objectType
Tipo dell'oggetto costruito. Il contesto del tipo verrà propagato all'oggetto appena creato se non viene passato alcun contesto esplicito nell'argomento di contesto.
object
L'oggetto appena creato verrà restituito qui.
Valore restituito
Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore.
Commenti
Codice di esempio
// 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
}
}
}
}
Requisiti
Requisito | Valore |
---|---|
Intestazione | dbgmodel.h |