Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод 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 |