IDataModelManager2::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
            }
        }
    }
}

IDataModelManager2 接口

要求

要求
Header dbgmodel.h