다음을 통해 공유


IDataModelManager::CreateTypedObject 메서드(dbgmodel.h)

CreateTypedObject 메서드는 클라이언트가 디버그 대상의 주소 공간에서 네이티브/언어 개체의 표현을 만들 수 있도록 하는 메서드입니다. objectType 인수로 표시된 대로 새로 만든 개체의 형식이 정식 시각화 도우미 또는 확장으로 데이터 모델 관리자에 등록된 하나 이상의 형식 서명과 일치하는 경우 일치하는 데이터 모델은 호출자에게 반환되기 전에 생성된 instance 개체에 자동으로 연결됩니다.

구문

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

추가 정보

IDataModelManager 인터페이스