You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
420 lines
9.4 KiB
420 lines
9.4 KiB
/**MOD+**********************************************************************/
|
|
/* Module: tsdbg.cpp */
|
|
/* */
|
|
/* Class : CMsTscDebugger */
|
|
/* */
|
|
/* Purpose: Implements debugger interface for RDP ActiveX control */
|
|
/* */
|
|
/* Copyright(C) Microsoft Corporation 1999 */
|
|
/* */
|
|
/* Author : Nadim Abdo (nadima) */
|
|
/****************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "tsdbg.h"
|
|
#include "atlwarn.h"
|
|
|
|
BEGIN_EXTERN_C
|
|
#define TRC_GROUP TRC_GROUP_UI
|
|
#define TRC_FILE "tsdbg"
|
|
#include <atrcapi.h>
|
|
END_EXTERN_C
|
|
|
|
|
|
CMsTscDebugger::CMsTscDebugger()
|
|
{
|
|
m_pUI=NULL;
|
|
m_bLockedForWrite = FALSE;
|
|
}
|
|
|
|
CMsTscDebugger::~CMsTscDebugger()
|
|
{
|
|
}
|
|
|
|
BOOL CMsTscDebugger::SetUI(CUI* pUI)
|
|
{
|
|
ATLASSERT(pUI);
|
|
if(!pUI)
|
|
{
|
|
return FALSE;
|
|
}
|
|
m_pUI = pUI;
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//
|
|
// HatchBitmapPDU property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_HatchBitmapPDU(BOOL hatchBitmapPDU)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.hatchBitmapPDUData = hatchBitmapPDU != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(hatchBitmapPDU);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_HatchBitmapPDU(BOOL* phatchBitmapPDU)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(phatchBitmapPDU);
|
|
if(!phatchBitmapPDU)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*phatchBitmapPDU = m_pUI->_UI.hatchBitmapPDUData ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(phatchBitmapPDU);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// HatchSSBOrder property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_HatchSSBOrder(BOOL hatchSSBOrder)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.hatchSSBOrderData = hatchSSBOrder != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(hatchSSBOrder);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_HatchSSBOrder(BOOL* phatchSSBOrder)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(phatchSSBOrder);
|
|
if(!phatchSSBOrder)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*phatchSSBOrder = m_pUI->_UI.hatchSSBOrderData ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(phatchSSBOrder);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// HatchMembltOrder property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_HatchMembltOrder(BOOL hatchMembltOrder)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.hatchMemBltOrderData = hatchMembltOrder != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(hatchMembltOrder);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_HatchMembltOrder(BOOL* phatchMembltOrder)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(phatchMembltOrder);
|
|
if(!phatchMembltOrder)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*phatchMembltOrder = m_pUI->_UI.hatchMemBltOrderData ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(phatchMembltOrder);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// HatchIndexPDU property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_HatchIndexPDU(BOOL hatchIndexPDU)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.hatchIndexPDUData = hatchIndexPDU != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(hatchIndexPDU);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_HatchIndexPDU(BOOL* phatchIndexPDU)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(phatchIndexPDU);
|
|
if(!phatchIndexPDU)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*phatchIndexPDU = m_pUI->_UI.hatchIndexPDUData ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(phatchIndexPDU);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// LabelMemblt property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_LabelMemblt(BOOL labelMemblt)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.labelMemBltOrders = labelMemblt != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(labelMemblt);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_LabelMemblt(BOOL* plabelMemblt)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(plabelMemblt);
|
|
if(!plabelMemblt)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*plabelMemblt = m_pUI->_UI.labelMemBltOrders ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(plabelMemblt);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// BitmapCacheMonitor property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_BitmapCacheMonitor(BOOL bitmapCacheMonitor)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
m_pUI->_UI.bitmapCacheMonitor = bitmapCacheMonitor != 0;
|
|
m_pUI->UI_CoreDebugSettingChanged();
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(bitmapCacheMonitor);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_BitmapCacheMonitor(BOOL* pbitmapCacheMonitor)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(pbitmapCacheMonitor);
|
|
if(!pbitmapCacheMonitor)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
*pbitmapCacheMonitor = m_pUI->_UI.bitmapCacheMonitor ? VB_TRUE : VB_FALSE;
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(pbitmapCacheMonitor);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// MallocFailures property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_MallocFailuresPercent(LONG mallocFailures)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
if(mallocFailures < 0 || mallocFailures > 100)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
m_pUI->UI_SetRandomFailureItem(UT_FAILURE_MALLOC, mallocFailures);
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(mallocFailures);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_MallocFailuresPercent(LONG* pmallocFailures)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(pmallocFailures);
|
|
if(!pmallocFailures)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*pmallocFailures = (LONG)m_pUI->UI_GetRandomFailureItem(UT_FAILURE_MALLOC);
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(pmallocFailures);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// MallocHugeFailures property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_MallocHugeFailuresPercent(LONG mallocHugeFailures)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
if(mallocHugeFailures < 0 || mallocHugeFailures > 100)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
m_pUI->UI_SetRandomFailureItem(UT_FAILURE_MALLOC_HUGE, mallocHugeFailures);
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(mallocHugeFailures);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_MallocHugeFailuresPercent(LONG* pmallocHugeFailures)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(pmallocHugeFailures);
|
|
if(!pmallocHugeFailures)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
*pmallocHugeFailures = (LONG)m_pUI->UI_GetRandomFailureItem(UT_FAILURE_MALLOC_HUGE);
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(pmallocHugeFailures);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
|
|
//
|
|
// NetThroughput property
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_NetThroughput(LONG netThroughput)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
// m_NetThroughput = netThroughput;
|
|
if(netThroughput < 0 || netThroughput > 50000)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
m_pUI->UI_SetNetworkThroughput((DCUINT)netThroughput);
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(netThroughput);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_NetThroughput(LONG* pnetThroughput)
|
|
{
|
|
#ifdef DC_DEBUG
|
|
ATLASSERT(pnetThroughput);
|
|
if(!pnetThroughput)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
*pnetThroughput = (LONG)m_pUI->UI_GetNetworkThroughput();
|
|
|
|
return S_OK;
|
|
#else
|
|
UNREFERENCED_PARAMETER(pnetThroughput);
|
|
return E_NOTIMPL;
|
|
#endif
|
|
}
|
|
|
|
//
|
|
// CLXCommand Line
|
|
// this property is valid in both checked and free builds
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_CLXCmdLine(BSTR CLXCmdLine)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
if(GetLockedForWrite())
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
if (CLXCmdLine)
|
|
{
|
|
hr = CUT::StringPropPut(
|
|
m_pUI->_UI.CLXCmdLine,
|
|
SIZE_TCHARS(m_pUI->_UI.CLXCmdLine),
|
|
(LPTSTR)CLXCmdLine);
|
|
}
|
|
else
|
|
{
|
|
m_pUI->_UI.CLXCmdLine[0] = 0;
|
|
hr = S_OK;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CMsTscDebugger::get_CLXCmdLine(BSTR* pCLXCmdLine)
|
|
{
|
|
ATLASSERT(pCLXCmdLine);
|
|
if(!pCLXCmdLine)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
OLECHAR* oleClxCmdLine = (OLECHAR*)(m_pUI->_UI.CLXCmdLine);
|
|
ATLASSERT(oleClxCmdLine);
|
|
if (!oleClxCmdLine)
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
*pCLXCmdLine = SysAllocString(oleClxCmdLine);
|
|
if(!*pCLXCmdLine)
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//
|
|
// CLXDll
|
|
// this property is deprecated for security reasons
|
|
// see #533846
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::put_CLXDll(BSTR CLXDll)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//
|
|
// CLXDll
|
|
// Deprecated for security reasons: bug#533846
|
|
//
|
|
STDMETHODIMP CMsTscDebugger::get_CLXDll(BSTR* pCLXDll)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|