(dbgmodel.h) IDataModelManager::CreateTypedObject 方法
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 |