Поделиться через


Метод 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

См. также раздел

Интерфейс IDataModelManager