HRESULT RemoteDebuggerProxy::GetThreadContext( ICoreProcess* process, ICoreThread* thread, IRegisterSet*& regSet ) { _ASSERT( process != NULL ); _ASSERT( thread != NULL ); if ( process == NULL || thread == NULL ) return E_INVALIDARG; if ( process->GetProcessType() != CoreProcess_Remote || thread->GetProcessType() != CoreProcess_Remote ) return E_INVALIDARG; HRESULT hr = S_OK; ArchData* archData = process->GetArchData(); ArchThreadContextSpec contextSpec; UniquePtr<BYTE[]> context; archData->GetThreadContextSpec( contextSpec ); context.Attach( new BYTE[ contextSpec.Size ] ); if ( context.IsEmpty() ) return E_OUTOFMEMORY; hr = GetThreadContextNoException( process, thread, GetContextHandle(), contextSpec, context.Get() ); if ( FAILED( hr ) ) return hr; hr = archData->BuildRegisterSet( context.Get(), contextSpec.Size, regSet ); if ( FAILED( hr ) ) return hr; return S_OK; }