Метод IDataModelManager::CreateTypedObject (dbgmodel.h)
Метод CreateTypedObject — это метод, который позволяет клиенту создавать представление собственного или языкового объекта в адресном пространстве целевого объекта отладки. Если тип вновь созданного объекта (как указано в аргументе objectType) совпадает с одной или несколькими сигнатурами типа, зарегистрированными в диспетчере моделей данных в качестве канонических визуализаторов или расширений, эти соответствующие модели данных будут автоматически присоединены к созданному объекту экземпляра перед его возвратом вызывающему объекту.
Синтаксис
HRESULT CreateTypedObject(
IDebugHostContext *context,
Location objectLocation,
IDebugHostType *objectType,
_COM_Errorptr_ IModelObject **object
);
Параметры
context
Контекст узла отладки, в котором находится этот объект. Если явный контекст не задан, контекст вновь созданного объекта наследуется от контекста аргумента objectType. Вызывающий объект может передать специальное значение маркера USE_CURRENT_HOST_CONTEXT, чтобы указать, что объект должен получать контекст, текущий в пользовательском интерфейсе отладчика.
objectLocation
Расположение объекта в адресном пространстве целевого объекта отладки. Если расположение является виртуальным адресом, это расположение может быть создано клиентом с помощью 64-разрядного смещения в адресном пространстве; в противном случае — расположение должно быть получено из другого интерфейса узла отладки.
objectType
Тип создаваемого объекта. Контекст типа будет распространяться на вновь созданный объект, если в аргументе контекста не передается явный контекст.
object
Сюда будет возвращен только что созданный объект .
Возвращаемое значение
Этот метод возвращает HRESULT, указывающее на успех или сбой.
Комментарии
Образец кода
// 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
}
}
}
}
Требования
Требование | Значение |
---|---|
Заголовок | dbgmodel.h |