次の方法で共有


IDataModelManager::CreateTypedObject メソッド (dbgmodel.h)

CreateTypedObject メソッドは、クライアントがデバッグ ターゲットのアドレス空間にネイティブ/言語オブジェクトの表現を作成できるようにするメソッドです。 新しく作成されたオブジェクトの型 (objectType 引数で示されているように) が、正規ビジュアライザーまたは拡張としてデータ モデル マネージャーに登録されている 1 つ以上の型シグネチャと一致する場合、一致するデータ モデルは、呼び出し元に返される前に、作成されたインスタンス オブジェクトに自動的にアタッチされます。

構文

HRESULT CreateTypedObject(
  IDebugHostContext           *context,
  Location                    objectLocation,
  IDebugHostType              *objectType,
  _COM_Errorptr_ IModelObject **object
);

パラメーター

context

このオブジェクトが配置されているデバッグ ホスト コンテキスト。 明示的なコンテキストが指定されていない場合、新しく作成されたオブジェクトのコンテキストは objectType 引数のコンテキストから継承されます。 呼び出し元は、USE_CURRENT_HOST_CONTEXT特別なマーカー値を渡して、デバッガーのユーザー インターフェイスで現在のコンテキストをオブジェクトが受け取る必要があることを示すことができます。

objectLocation

デバッグ ターゲットのアドレス空間内の オブジェクトの場所。 場所が仮想アドレスの場合は、アドレス空間への 64 ビット オフセットを使用して、クライアントによって場所を構築できます。それ以外の場合は、別のデバッグ ホスト インターフェイスから場所を取得する必要があります。

objectType

構築されるオブジェクトの型。 context 引数に明示的なコンテキストが渡されない場合、型のコンテキストは新しく作成されたオブジェクトに伝達されます。

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

要件

要件
Header dbgmodel.h

こちらもご覧ください

IDataModelManager インターフェイス