Metode IDataModelManager2::CreateTypedObject (dbgmodel.h)

Metode CreateTypedObject adalah metode yang memungkinkan klien membuat representasi objek asli/bahasa di ruang alamat target debug. Jika jenis objek yang baru dibuat (seperti yang ditunjukkan oleh argumen objectType) kebetulan cocok dengan satu atau beberapa jenis tanda tangan yang terdaftar dengan manajer model data sebagai visualizer atau ekstensi kanonis, model data yang cocok tersebut akan secara otomatis dilampirkan ke objek instans yang dibuat sebelum dikembalikan ke pemanggil.

Sintaks

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

Parameter

context

Konteks host debug tempat objek ini berada. Jika tidak ada konteks eksplisit yang diberikan, konteks objek yang baru dibuat akan mewarisi dari konteks argumen objectType. Penelepon dapat meneruskan nilai penanda khusus USE_CURRENT_HOST_CONTEXT untuk menunjukkan bahwa objek harus menerima konteks yang saat ini ada di antarmuka pengguna debugger.

objectLocation

Lokasi objek di ruang alamat target debug. Jika lokasi adalah alamat virtual, lokasi dapat dibangun oleh klien menggunakan offset 64-bit ke ruang alamat; jika tidak - lokasi harus diambil dari antarmuka host debug lain.

objectType

Jenis objek yang sedang dibangun. Konteks jenis akan disebarluaskan ke objek yang baru dibuat jika tidak ada konteks eksplisit yang diteruskan dalam argumen konteks.

object

Objek yang baru dibuat akan dikembalikan di sini.

Mengembalikan nilai

Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan.

Keterangan

Kode Sampel

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

Antarmuka IDataModelManager2

Persyaratan

Persyaratan Nilai
Header dbgmodel.h