Método IDataModelManager::CreateTypedObject (dbgmodel.h)
El método CreateTypedObject es el método que permite a un cliente crear una representación de un objeto nativo o de idioma en el espacio de direcciones de un destino de depuración. Si el tipo del objeto recién creado (como se indica en el argumento objectType) coincide con una o varias firmas de tipo registradas con el administrador de modelos de datos como visualizadores canónicos o extensiones, esos modelos de datos coincidentes se asociarán automáticamente al objeto de instancia creado antes de que se devuelva al autor de la llamada.
Sintaxis
HRESULT CreateTypedObject(
IDebugHostContext *context,
Location objectLocation,
IDebugHostType *objectType,
_COM_Errorptr_ IModelObject **object
);
Parámetros
context
Contexto de host de depuración en el que se encuentra este objeto. Si no se da ningún contexto explícito, el contexto del objeto recién creado heredará del contexto del argumento objectType. Un autor de la llamada puede pasar el valor de marcador especial USE_CURRENT_HOST_CONTEXT para indicar que el objeto debe recibir el contexto actual en la interfaz de usuario del depurador.
objectLocation
Ubicación del objeto en el espacio de direcciones del destino de depuración. Si la ubicación es una dirección virtual, el cliente puede construir la ubicación mediante un desplazamiento de 64 bits en el espacio de direcciones; de lo contrario: la ubicación debe recuperarse de otra interfaz de host de depuración.
objectType
Tipo del objeto que se está construyendo. El contexto del tipo se propagará al objeto recién creado si no se pasa ningún contexto explícito en el argumento context.
object
El objeto recién creado se devolverá aquí.
Valor devuelto
Este método devuelve HRESULT que indica éxito o error.
Comentarios
Código de ejemplo
// 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
}
}
}
}
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |