146 assert(bitcount && bitcount <= 32);
147 assert(fromalign <= toalign);
151 bool flipped =
height < 0;
157 int fromstride =
alignup(bytesperrow, fromalign);
158 int tostride =
alignup(bytesperrow, toalign);
159 assert(fromstride <= tostride);
168 const int pad = tostride - fromstride;
176 tostride = - tostride;
201 b.bmi.bmiHeader.biSize =
sizeof(
b.bmi.bmiHeader);
202 b.bmi.bmiHeader.biWidth =
width;
203 b.bmi.bmiHeader.biHeight =
height;
204 b.bmi.bmiHeader.biPlanes = 1;
205 b.bmi.bmiHeader.biBitCount = bitcount;
206 b.bmi.bmiHeader.biCompression =
BI_RGB;
207 b.bmi.bmiHeader.biSizeImage = 0;
208 b.bmi.bmiHeader.biXPelsPerMeter = 0;
209 b.bmi.bmiHeader.biYPelsPerMeter = 0;
213 b.bmi.bmiHeader.biClrUsed = 0;
214 b.bmi.bmiHeader.biClrImportant = 0;
218 b.bmi.bmiHeader.biClrUsed = 2 << bitcount;
219 b.bmi.bmiHeader.biClrImportant = 2 << bitcount;
274 for(
size_t i = 0;
i < 8; ++
i)
292#if defined(_MSC_VER) && _MSC_VER >= 1400
293#define SEALED_ sealed
316 WNDCLASSEX wcexConsole = {
sizeof(wcexConsole) };
317 WNDCLASSEX wcexDisplay = {
sizeof(wcexDisplay) };
641 for(
int i = 0;
i < npoints; ++
i)
701 for(
int i = 0;
i <
cy; ++
i)
759 void Display_TriBlt(
uint8 opcode,
int x,
int y,
int cx,
int cy,
HBITMAP src,
int srcx,
int srcy,
BRUSH * brush,
int bgcolour,
int fgcolour)
797 rcDamage.
left = startx;
798 rcDamage.
right = endx;
802 rcDamage.
left = endx;
803 rcDamage.
right = startx;
808 rcDamage.
top = starty;
861 for(
int i = 1;
i < npoints; ++
i)
946 int xyoffset = ttext[++
idx];
948 if((xyoffset & 0x80))
951 y += ttext[
idx + 1] | (ttext[
idx + 2] << 8);
953 x += ttext[
idx + 1] | (ttext[
idx + 2] << 8);
1041 warning(
"Skipping short 0xff command:");
1060 warning(
"Skipping short 0xfe command:");
1133 for(
int i = 0;
i <
cy; ++
i)
1240#pragma warning(push)
1241#pragma warning(disable: 4584)
1288 DWORD m_apartmentThreadId;
1290 bool InsideApartment()
const
1304 return InnerToOuter(
this);
1315 return Outer()->addRef();
1320 return Outer()->release();
1356 return m_SafetyOptions & INTERFACESAFE_FOR_UNTRUSTED_CALLER;
1461 assert(InsideApartment());
1476 assert(InsideApartment());
1491 assert(InsideApartment());
1519 assert(InsideApartment());
1529 assert(InsideApartment());
1551 assert(InsideApartment());
1563 assert(InsideApartment());
1574 assert(InsideApartment());
1585 assert(InsideApartment());
1590 *retVal = prop ? VARIANT_TRUE : VARIANT_FALSE;
1596 assert(InsideApartment());
1608 if(m_EventSinksCount > 1)
1609 return m_EventSinks;
1623 assert(InsideApartment());
1634 for(
size_t i = 0;
i < m_EventSinksCount; ++
i)
1638 typedef void (RdpClient::* AsyncEventCallback)
1656 for(
unsigned int i = 0;
i < cArgs; ++
i)
1668 unsigned int cArgs = 0,
1673 assert(InsideApartment());
1681 InvokeSinks(eventId, rgvarg, cArgs,
retval);
1733 case RDPC_WM_SYNC_EVENT:
1736 case RDPC_WM_ASYNC_EVENT:
1741 FireEventInsideApartment
1750 if(uMsg == RDPC_WM_ASYNC_EVENT)
1757 case RDPC_WM_DISCONNECT:
1760 assert(InsideApartment());
1765 JoinProtocolThread();
1768 PerformDisconnect(
static_cast<long>(
wParam));
1773 case RDPC_WM_REDIRECT:
1829 ReplaceProperty(m_Server, lpszNewServer);
1830 ReplaceProperty(m_LoadBalanceInfo, lpszNewCookie);
1831 ReplaceProperty(m_UserName, strNewUsername);
1832 ReplaceProperty(m_Domain, strNewDomain);
1833 ReplaceProperty(m_ClearTextPassword, strNewPassword);
1855 case RDPC_WM_REQUEST_CLOSE:
1862 if(m_loggedIn && !FireConfirmClose())
1866 if(m_protocolThread ==
NULL)
1870 TerminateProtocolThread();
1892 unsigned int cArgs = 0,
1897 assert(!InsideApartment());
1899 SendMessage(m_controlWindow, RDPC_WM_SYNC_EVENT, 0,
reinterpret_cast<LPARAM>(&syncEvent));
1907 unsigned int cArgs = 0,
1912 assert(!InsideApartment());
1916 if(asyncEvent ==
NULL)
1919 asyncEvent->
eventId = eventId;
1920 asyncEvent->
rgvarg = rgvarg;
1921 asyncEvent->
cArgs = cArgs;
1924 if(!
PostMessage(m_controlWindow, RDPC_WM_ASYNC_EVENT, 0,
reinterpret_cast<LPARAM>(asyncEvent)))
1937 FireEventOutsideApartment(1);
1943 FireEventOutsideApartment(2);
1949 FireEventOutsideApartment(3);
1961 FireEventInsideApartment(5);
1967 FireEventInsideApartment(6);
1975 std::copy(chanName + 0, chanName +
ARRAYSIZE(chanName), wchanName);
1979 if(bstrChanName ==
NULL)
1984 if(bstrChanData ==
NULL)
1990 CopyMemory(bstrChanData, chanData, chanDataSize);
1995 args[1].bstrVal = bstrChanName;
1998 args[0].bstrVal = bstrChanData;
2012 FireEventInsideApartment(8);
2018 FireEventInsideApartment(9);
2026 arg.lVal = errorCode;
2029 FireEventOutsideApartment(10, &
arg, 1);
2037 arg.lVal = errorCode;
2040 FireEventInsideApartment(10, &
arg, 1);
2048 arg.lVal = warningCode;
2051 FireEventOutsideApartment(11, &
arg, 1);
2071 FireEventOutsideApartment(13);
2077 FireEventInsideApartment(14);
2086 retval.pboolVal = &allowClose;
2089 FireEventInsideApartment(15,
NULL, 0, &
retval);
2091 return allowClose != VARIANT_FALSE;
2098 if(!m_NotifyTSPublicKey)
2103 if(bstrPublicKey ==
NULL)
2106 CopyMemory(bstrPublicKey, publicKey, publicKeyLength);
2113 arg.bstrVal = bstrPublicKey;
2116 retval.pboolVal = &continueLogon;
2119 FireEventOutsideApartment(16, &
arg, 1, &
retval);
2131 args[1].lVal = disconnectReason;
2134 args[0].lVal = attemptCount;
2137 retval.plVal = &continueStatus;
2142 return continueStatus;
2148 FireEventOutsideApartment(18);
2154 FireEventOutsideApartment(19);
2165 pvObject =
static_cast<IUnknown *
>(&m_inner);
2170 else if(
riid == IID_IObjectSafety)
2183 pvObject =
static_cast<IPersist *
>(
this);
2190 else if(
riid == IID_IQuickActivate)
2197 pvObject =
static_cast<IMsTscAx *
>(
this);
2243 m_punkOuter(punkOuter),
2245 m_typeLibIndex(libIndex),
2248 m_controlWindow(
NULL),
2268 m_DisconnectedText(),
2270 m_FullScreenTitle(),
2273 m_LoadBalanceInfo(),
2274 m_ConnectedStatusText(),
2275 m_ClearTextPassword(),
2276 m_RdpdrLocalPrintingDocName(),
2277 m_RdpdrClipCleanTempDirString(),
2278 m_RdpdrClipPasteInfoString(),
2279 m_UIParentWindowHandle(),
2284 m_KeyboardHookMode(2),
2285 m_AudioRedirectionMode(0),
2287 m_SasSequence(0xAA03),
2294 m_HotKeyCtrlAltDel(
VK_END),
2296 m_orderDrawThresold(0),
2297 m_BitmapCacheSize(1500),
2298 m_BitmapVirtualCacheSize(10),
2299 m_brushSupportLevel(),
2300 m_minInputSendInterval(),
2301 m_InputEventsAtOnce(),
2303 m_keepAliveInternal(0),
2304 m_shutdownTimeout(10),
2305 m_overallConnectionTimeout(120),
2306 m_singleConnectionTimeout(30),
2307 m_MinutesToIdleTimeout(0),
2308 m_BitmapVirtualCache16BppSize(20),
2309 m_BitmapVirtualCache24BppSize(30),
2310 m_PerformanceFlags(),
2311 m_MaxReconnectAttempts(20),
2312 m_AuthenticationLevel(0),
2316 m_BitmapPersistence(
true),
2317 m_allowBackgroundInput(
false),
2318 m_ContainerHandledFullScreen(
false),
2319 m_DisableRdpdr(
false),
2320 m_SecuredSettingsEnabled(
true),
2321 m_FullScreen(
false),
2322 m_AcceleratorPassthrough(
true),
2323 m_ShadowBitmap(
true),
2324 m_EncryptionEnabled(
true),
2325 m_DedicatedTerminal(
false),
2326 m_DisableCtrlAltDel(
true),
2327 m_EnableWindowsKey(
true),
2328 m_DoubleClickDetect(
false),
2329 m_MaximizeShell(
true),
2330 m_ScaleBitmapCachesByBpp(
false),
2331 m_CachePersistenceActive(
false),
2332 m_ConnectToServerConsole(
false),
2333 m_SmartSizing(
false),
2334 m_DisplayConnectionBar(
true),
2335 m_PinConnectionBar(
true),
2336 m_GrabFocusOnConnect(
true),
2337 m_RedirectDrives(
false),
2338 m_RedirectPrinters(
false),
2339 m_RedirectPorts(
false),
2340 m_RedirectSmartCards(
false),
2341 m_NotifyTSPublicKey(
false),
2342 m_CanAutoReconnect(
false),
2343 m_EnableAutoReconnect(
true),
2344 m_ConnectionBarShowMinimizeButton(
true),
2345 m_ConnectionBarShowRestoreButton(
true)
2347 if(m_punkOuter ==
NULL)
2348 m_punkOuter = &m_inner;
2359 TerminateProtocolThread();
2368 DestroyControlWindow();
2378 for(
size_t i = 0;
i < m_EventSinksCount; ++
i)
2381 if(m_EventSinksCount > 1)
2382 delete[] m_EventSinks;
2413 friend class AdvancedSettings;
2420 return InnerToOuter(
this);
2425 return InnerToOuter(
this);
2436 HRESULT hr = Outer()->LoadTypeLibrary();
2441 assert(MSTSCLib::IID_IMsRdpClientAdvancedSettings4 == MSTSCLib_Redist::IID_IMsRdpClientAdvancedSettings4);
2443 hr = Outer()->m_typeLib->GetTypeInfoOfGuid(MSTSCLib::IID_IMsRdpClientAdvancedSettings4, &m_dispTypeInfo);
2459 m_dispTypeInfo->
AddRef();
2460 *ppTI = m_dispTypeInfo;
2500 return Outer()->addRef();
2505 return Outer()->release();
2520 return AcquireDispTypeInfo(ppTInfo);
2530 return m_dispTypeInfo->
GetIDsOfNames(rgszNames, cNames, rgDispId);
2535 return m_dispTypeInfo->
Invoke
2550 return Outer()->SetProperty(Outer()->m_Compress, pcompress);
2553 virtual STDMETHODIMP IMsTscAdvancedSettings::get_Compress(
long * pcompress)
const
2555 return Outer()->GetProperty(Outer()->m_Compress, pcompress);
2558 virtual STDMETHODIMP IMsTscAdvancedSettings::put_BitmapPeristence(
long pbitmapPeristence)
2560 return Outer()->SetProperty(Outer()->m_BitmapPersistence, pbitmapPeristence);
2563 virtual STDMETHODIMP IMsTscAdvancedSettings::get_BitmapPeristence(
long * pbitmapPeristence)
const
2565 return Outer()->GetProperty(Outer()->m_BitmapPersistence, pbitmapPeristence);
2568 virtual STDMETHODIMP IMsTscAdvancedSettings::put_allowBackgroundInput(
long pallowBackgroundInput)
2570 if(Outer()->IsSafeForScripting())
2573 return Outer()->SetProperty(Outer()->m_allowBackgroundInput, pallowBackgroundInput);
2576 virtual STDMETHODIMP IMsTscAdvancedSettings::get_allowBackgroundInput(
long * pallowBackgroundInput)
const
2578 return Outer()->GetProperty(Outer()->m_allowBackgroundInput, pallowBackgroundInput);
2583 return Outer()->SetProperty(Outer()->m_KeyboardLayoutString, rhs);
2591 if(Outer()->IsSafeForScripting())
2610 virtual STDMETHODIMP IMsTscAdvancedSettings::put_ContainerHandledFullScreen(
long pContainerHandledFullScreen)
2612 if(Outer()->IsSafeForScripting())
2615 return Outer()->SetProperty(Outer()->m_ContainerHandledFullScreen, pContainerHandledFullScreen);
2618 virtual STDMETHODIMP IMsTscAdvancedSettings::get_ContainerHandledFullScreen(
long * pContainerHandledFullScreen)
const
2620 return Outer()->GetProperty(Outer()->m_ContainerHandledFullScreen, pContainerHandledFullScreen);
2623 virtual STDMETHODIMP IMsTscAdvancedSettings::put_DisableRdpdr(
long pDisableRdpdr)
2625 return Outer()->SetProperty(Outer()->m_DisableRdpdr, pDisableRdpdr);
2628 virtual STDMETHODIMP IMsTscAdvancedSettings::get_DisableRdpdr(
long * pDisableRdpdr)
const
2630 return Outer()->GetProperty(Outer()->m_DisableRdpdr, pDisableRdpdr);
2634 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_SmoothScroll(
long psmoothScroll)
2639 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_SmoothScroll(
long * psmoothScroll)
const
2644 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_AcceleratorPassthrough(
long pacceleratorPassthrough)
2646 return Outer()->SetProperty(Outer()->m_AcceleratorPassthrough, pacceleratorPassthrough);
2649 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_AcceleratorPassthrough(
long * pacceleratorPassthrough)
const
2651 return Outer()->GetProperty(Outer()->m_AcceleratorPassthrough, pacceleratorPassthrough);
2654 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_ShadowBitmap(
long pshadowBitmap)
2656 return Outer()->SetProperty(Outer()->m_ShadowBitmap, pshadowBitmap);
2659 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_ShadowBitmap(
long * pshadowBitmap)
const
2661 return Outer()->GetProperty(Outer()->m_ShadowBitmap, pshadowBitmap);
2664 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_TransportType(
long ptransportType)
2667 return Outer()->SetProperty(Outer()->m_TransportType, ptransportType);
2670 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_TransportType(
long * ptransportType)
const
2673 return Outer()->GetProperty(Outer()->m_TransportType, ptransportType);
2676 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_SasSequence(
long psasSequence)
2679 return Outer()->SetProperty(Outer()->m_SasSequence, psasSequence);
2682 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_SasSequence(
long * psasSequence)
const
2685 return Outer()->GetProperty(Outer()->m_SasSequence, psasSequence);
2688 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_EncryptionEnabled(
long pencryptionEnabled)
2690 return Outer()->SetProperty(Outer()->m_EncryptionEnabled, pencryptionEnabled);
2693 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_EncryptionEnabled(
long * pencryptionEnabled)
const
2695 return Outer()->GetProperty(Outer()->m_EncryptionEnabled, pencryptionEnabled);
2698 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_DedicatedTerminal(
long pdedicatedTerminal)
2700 return Outer()->SetProperty(Outer()->m_DedicatedTerminal, pdedicatedTerminal);
2703 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_DedicatedTerminal(
long * pdedicatedTerminal)
const
2705 return Outer()->GetProperty(Outer()->m_DedicatedTerminal, pdedicatedTerminal);
2708 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_RDPPort(
long prdpPort)
2710 if(prdpPort == 0 || prdpPort > 65535)
2713 return Outer()->SetProperty(Outer()->m_RDPPort, prdpPort);
2716 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_RDPPort(
long * prdpPort)
const
2718 return Outer()->GetProperty(Outer()->m_RDPPort, prdpPort);
2721 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_EnableMouse(
long penableMouse)
2726 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_EnableMouse(
long * penableMouse)
const
2731 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_DisableCtrlAltDel(
long pdisableCtrlAltDel)
2733 return Outer()->SetProperty(Outer()->m_DisableCtrlAltDel, pdisableCtrlAltDel);
2736 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_DisableCtrlAltDel(
long * pdisableCtrlAltDel)
const
2738 return Outer()->GetProperty(Outer()->m_DisableCtrlAltDel, pdisableCtrlAltDel);
2741 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_EnableWindowsKey(
long penableWindowsKey)
2743 return Outer()->SetProperty(Outer()->m_EnableWindowsKey, penableWindowsKey);
2746 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_EnableWindowsKey(
long * penableWindowsKey)
const
2748 return Outer()->GetProperty(Outer()->m_EnableWindowsKey, penableWindowsKey);
2751 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_DoubleClickDetect(
long pdoubleClickDetect)
2753 return Outer()->SetProperty(Outer()->m_DoubleClickDetect, pdoubleClickDetect);
2756 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_DoubleClickDetect(
long * pdoubleClickDetect)
const
2758 return Outer()->GetProperty(Outer()->m_DoubleClickDetect, pdoubleClickDetect);
2761 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_MaximizeShell(
long pmaximizeShell)
2763 return Outer()->SetProperty(Outer()->m_MaximizeShell, pmaximizeShell);
2766 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_MaximizeShell(
long * pmaximizeShell)
const
2768 return Outer()->GetProperty(Outer()->m_MaximizeShell, pmaximizeShell);
2771 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyFullScreen(
long photKeyFullScreen)
2773 return Outer()->SetProperty(Outer()->m_HotKeyFullScreen, photKeyFullScreen);
2776 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyFullScreen(
long * photKeyFullScreen)
const
2778 return Outer()->GetProperty(Outer()->m_HotKeyFullScreen, photKeyFullScreen);
2781 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyCtrlEsc(
long photKeyCtrlEsc)
2783 return Outer()->SetProperty(Outer()->m_HotKeyCtrlEsc, photKeyCtrlEsc);
2786 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyCtrlEsc(
long * photKeyCtrlEsc)
const
2788 return Outer()->GetProperty(Outer()->m_HotKeyCtrlEsc, photKeyCtrlEsc);
2791 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyAltEsc(
long photKeyAltEsc)
2793 return Outer()->SetProperty(Outer()->m_HotKeyAltEsc, photKeyAltEsc);
2796 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyAltEsc(
long * photKeyAltEsc)
const
2798 return Outer()->GetProperty(Outer()->m_HotKeyAltEsc, photKeyAltEsc);
2801 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyAltTab(
long photKeyAltTab)
2803 return Outer()->SetProperty(Outer()->m_HotKeyAltTab, photKeyAltTab);
2806 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyAltTab(
long * photKeyAltTab)
const
2808 return Outer()->GetProperty(Outer()->m_HotKeyAltTab, photKeyAltTab);
2811 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyAltShiftTab(
long photKeyAltShiftTab)
2813 return Outer()->SetProperty(Outer()->m_HotKeyAltShiftTab, photKeyAltShiftTab);
2816 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyAltShiftTab(
long * photKeyAltShiftTab)
const
2818 return Outer()->GetProperty(Outer()->m_HotKeyAltShiftTab, photKeyAltShiftTab);
2821 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyAltSpace(
long photKeyAltSpace)
2823 return Outer()->SetProperty(Outer()->m_HotKeyAltSpace, photKeyAltSpace);
2826 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyAltSpace(
long * photKeyAltSpace)
const
2828 return Outer()->GetProperty(Outer()->m_HotKeyAltSpace, photKeyAltSpace);
2831 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_HotKeyCtrlAltDel(
long photKeyCtrlAltDel)
2833 return Outer()->SetProperty(Outer()->m_HotKeyCtrlAltDel, photKeyCtrlAltDel);
2836 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_HotKeyCtrlAltDel(
long * photKeyCtrlAltDel)
const
2838 return Outer()->GetProperty(Outer()->m_HotKeyCtrlAltDel, photKeyCtrlAltDel);
2841 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_orderDrawThreshold(
long porderDrawThreshold)
2846 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_orderDrawThreshold(
long * porderDrawThreshold)
const
2851 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_BitmapCacheSize(
long pbitmapCacheSize)
2854 if(pbitmapCacheSize < 0 || pbitmapCacheSize > 32)
2857 return Outer()->SetProperty(Outer()->m_BitmapCacheSize, pbitmapCacheSize);
2860 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_BitmapCacheSize(
long * pbitmapCacheSize)
const
2862 return Outer()->GetProperty(Outer()->m_BitmapCacheSize, pbitmapCacheSize);
2865 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_BitmapVirtualCacheSize(
long pbitmapVirtualCacheSize)
2867 if(pbitmapVirtualCacheSize < 0 || pbitmapVirtualCacheSize > 32)
2870 return Outer()->SetProperty(Outer()->m_BitmapVirtualCacheSize, pbitmapVirtualCacheSize);
2873 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_BitmapVirtualCacheSize(
long * pbitmapVirtualCacheSize)
const
2875 return Outer()->GetProperty(Outer()->m_BitmapVirtualCacheSize, pbitmapVirtualCacheSize);
2878 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_ScaleBitmapCachesByBPP(
long pbScale)
2883 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_ScaleBitmapCachesByBPP(
long * pbScale)
const
2888 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_NumBitmapCaches(
long pnumBitmapCaches)
2890 return Outer()->SetProperty(Outer()->m_NumBitmapCaches, pnumBitmapCaches);
2893 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_NumBitmapCaches(
long * pnumBitmapCaches)
const
2895 return Outer()->GetProperty(Outer()->m_NumBitmapCaches, pnumBitmapCaches);
2898 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_CachePersistenceActive(
long pcachePersistenceActive)
2900 return Outer()->SetProperty(Outer()->m_CachePersistenceActive, pcachePersistenceActive);
2903 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_CachePersistenceActive(
long * pcachePersistenceActive)
const
2905 return Outer()->GetProperty(Outer()->m_CachePersistenceActive, pcachePersistenceActive);
2913 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_brushSupportLevel(
long pbrushSupportLevel)
2915 return Outer()->SetProperty(Outer()->m_brushSupportLevel, pbrushSupportLevel);
2918 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_brushSupportLevel(
long * pbrushSupportLevel)
const
2920 return Outer()->GetProperty(Outer()->m_brushSupportLevel, pbrushSupportLevel);
2923 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_minInputSendInterval(
long pminInputSendInterval)
2929 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_minInputSendInterval(
long * pminInputSendInterval)
const
2935 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_InputEventsAtOnce(
long pinputEventsAtOnce)
2941 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_InputEventsAtOnce(
long * pinputEventsAtOnce)
const
2947 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_maxEventCount(
long pmaxEventCount)
2953 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_maxEventCount(
long * pmaxEventCount)
const
2959 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_keepAliveInterval(
long pkeepAliveInterval)
2961 if(pkeepAliveInterval && pkeepAliveInterval < 10)
2964 return Outer()->SetProperty(Outer()->m_keepAliveInternal, pkeepAliveInterval);
2967 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_keepAliveInterval(
long * pkeepAliveInterval)
const
2969 return Outer()->GetProperty(Outer()->m_keepAliveInternal, pkeepAliveInterval);
2972 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_shutdownTimeout(
long pshutdownTimeout)
2974 if(pshutdownTimeout >= 600)
2977 return Outer()->SetProperty(Outer()->m_shutdownTimeout, pshutdownTimeout);
2980 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_shutdownTimeout(
long * pshutdownTimeout)
const
2982 return Outer()->GetProperty(Outer()->m_shutdownTimeout, pshutdownTimeout);
2985 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_overallConnectionTimeout(
long poverallConnectionTimeout)
2987 if(poverallConnectionTimeout < 0 || poverallConnectionTimeout >= 600)
2990 return Outer()->SetProperty(Outer()->m_overallConnectionTimeout, poverallConnectionTimeout);
2993 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_overallConnectionTimeout(
long * poverallConnectionTimeout)
const
2995 return Outer()->GetProperty(Outer()->m_overallConnectionTimeout, poverallConnectionTimeout);
2998 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_singleConnectionTimeout(
long psingleConnectionTimeout)
3000 if(psingleConnectionTimeout >= 600)
3003 return Outer()->SetProperty(Outer()->m_singleConnectionTimeout, psingleConnectionTimeout);
3006 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_singleConnectionTimeout(
long * psingleConnectionTimeout)
const
3008 return Outer()->GetProperty(Outer()->m_singleConnectionTimeout, psingleConnectionTimeout);
3011 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_KeyboardType(
long pkeyboardType)
3016 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_KeyboardType(
long * pkeyboardType)
const
3021 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_KeyboardSubType(
long pkeyboardSubType)
3026 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_KeyboardSubType(
long * pkeyboardSubType)
const
3031 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_KeyboardFunctionKey(
long pkeyboardFunctionKey)
3036 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_KeyboardFunctionKey(
long * pkeyboardFunctionKey)
const
3041 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_WinceFixedPalette(
long pwinceFixedPalette)
3046 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_WinceFixedPalette(
long * pwinceFixedPalette)
const
3053 return Outer()->SetProperty(Outer()->m_ConnectToServerConsole, pConnectToConsole);
3058 return Outer()->GetProperty(Outer()->m_ConnectToServerConsole, pConnectToConsole);
3061 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_BitmapPersistence(
long pbitmapPersistence)
3063 return put_BitmapPeristence(pbitmapPersistence);
3066 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_BitmapPersistence(
long * pbitmapPersistence)
const
3068 return get_BitmapPeristence(pbitmapPersistence);
3071 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_MinutesToIdleTimeout(
long pminutesToIdleTimeout)
3073 if(pminutesToIdleTimeout > 240)
3076 return Outer()->SetProperty(Outer()->m_MinutesToIdleTimeout, pminutesToIdleTimeout);
3079 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_MinutesToIdleTimeout(
long * pminutesToIdleTimeout)
const
3081 return Outer()->GetProperty(Outer()->m_MinutesToIdleTimeout, pminutesToIdleTimeout);
3086 return Outer()->SetProperty(Outer()->m_SmartSizing, pfSmartSizing);
3091 return Outer()->GetProperty(Outer()->m_SmartSizing, pfSmartSizing);
3094 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_RdpdrLocalPrintingDocName(
BSTR pLocalPrintingDocName)
3096 return Outer()->SetProperty(Outer()->m_RdpdrLocalPrintingDocName, pLocalPrintingDocName);
3099 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_RdpdrLocalPrintingDocName(
BSTR * pLocalPrintingDocName)
const
3101 return Outer()->GetProperty(Outer()->m_RdpdrLocalPrintingDocName, pLocalPrintingDocName);
3104 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_RdpdrClipCleanTempDirString(
BSTR clipCleanTempDirString)
3106 return Outer()->SetProperty(Outer()->m_RdpdrClipCleanTempDirString, clipCleanTempDirString);
3109 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_RdpdrClipCleanTempDirString(
BSTR * clipCleanTempDirString)
const
3111 return Outer()->GetProperty(Outer()->m_RdpdrClipCleanTempDirString, clipCleanTempDirString);
3114 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_RdpdrClipPasteInfoString(
BSTR clipPasteInfoString)
3116 return Outer()->SetProperty(Outer()->m_RdpdrClipPasteInfoString, clipPasteInfoString);
3119 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_RdpdrClipPasteInfoString(
BSTR * clipPasteInfoString)
const
3121 return Outer()->GetProperty(Outer()->m_RdpdrClipPasteInfoString, clipPasteInfoString);
3126 return Outer()->put_ClearTextPassword(rhs);
3131 if(!pDisplayConnectionBar && Outer()->IsSafeForScripting())
3134 return Outer()->SetProperty(Outer()->m_DisplayConnectionBar, pDisplayConnectionBar);
3139 return Outer()->GetProperty(Outer()->m_DisplayConnectionBar, pDisplayConnectionBar);
3144 if(Outer()->IsSafeForScripting())
3147 return Outer()->SetProperty(Outer()->m_PinConnectionBar, pPinConnectionBar);
3152 return Outer()->GetProperty(Outer()->m_PinConnectionBar, pPinConnectionBar);
3157 return Outer()->SetProperty(Outer()->m_GrabFocusOnConnect, pfGrabFocusOnConnect);
3162 return Outer()->GetProperty(Outer()->m_GrabFocusOnConnect, pfGrabFocusOnConnect);
3167 return Outer()->SetProperty(Outer()->m_LoadBalanceInfo, pLBInfo);
3172 return Outer()->GetProperty(Outer()->m_LoadBalanceInfo, pLBInfo);
3177 return Outer()->SetProperty(Outer()->m_RedirectDrives, pRedirectDrives);
3182 return Outer()->GetProperty(Outer()->m_RedirectDrives, pRedirectDrives);
3187 return Outer()->SetProperty(Outer()->m_RedirectPrinters, pRedirectPrinters);
3192 return Outer()->GetProperty(Outer()->m_RedirectPrinters, pRedirectPrinters);
3197 return Outer()->SetProperty(Outer()->m_RedirectPorts, pRedirectPorts);
3202 return Outer()->GetProperty(Outer()->m_RedirectPorts, pRedirectPorts);
3207 return Outer()->SetProperty(Outer()->m_RedirectSmartCards, pRedirectSmartCards);
3212 return Outer()->GetProperty(Outer()->m_RedirectSmartCards, pRedirectSmartCards);
3215 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_BitmapVirtualCache16BppSize(
long pBitmapVirtualCache16BppSize)
3217 if(pBitmapVirtualCache16BppSize < 0 || pBitmapVirtualCache16BppSize > 32)
3220 return Outer()->SetProperty(Outer()->m_BitmapVirtualCache16BppSize, pBitmapVirtualCache16BppSize);
3223 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_BitmapVirtualCache16BppSize(
long * pBitmapVirtualCache16BppSize)
const
3225 return Outer()->GetProperty(Outer()->m_BitmapVirtualCache16BppSize, pBitmapVirtualCache16BppSize);
3228 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_BitmapVirtualCache24BppSize(
long pBitmapVirtualCache24BppSize)
3230 if(pBitmapVirtualCache24BppSize < 0 || pBitmapVirtualCache24BppSize > 32)
3233 return Outer()->SetProperty(Outer()->m_BitmapVirtualCache24BppSize, pBitmapVirtualCache24BppSize);
3236 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_BitmapVirtualCache24BppSize(
long * pBitmapVirtualCache24BppSize)
const
3238 return Outer()->GetProperty(Outer()->m_BitmapVirtualCache24BppSize, pBitmapVirtualCache24BppSize);
3241 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::put_PerformanceFlags(
long pDisableList)
3243 return Outer()->SetProperty(Outer()->m_PerformanceFlags, pDisableList);
3246 virtual STDMETHODIMP IMsRdpClientAdvancedSettings::get_PerformanceFlags(
long * pDisableList)
const
3248 return Outer()->GetProperty(Outer()->m_PerformanceFlags, pDisableList);
3259 return Outer()->SetProperty(Outer()->m_NotifyTSPublicKey, pfNotify);
3264 return Outer()->GetProperty(Outer()->m_NotifyTSPublicKey, pfNotify);
3275 return Outer()->SetProperty(Outer()->m_EnableAutoReconnect, pfEnableAutoReconnect);
3280 return Outer()->GetProperty(Outer()->m_EnableAutoReconnect, pfEnableAutoReconnect);
3283 virtual STDMETHODIMP IMsRdpClientAdvancedSettings2::put_MaxReconnectAttempts(
long pMaxReconnectAttempts)
3285 if(pMaxReconnectAttempts < 0 || pMaxReconnectAttempts > 200)
3288 return Outer()->SetProperty(Outer()->m_MaxReconnectAttempts, pMaxReconnectAttempts);
3291 virtual STDMETHODIMP IMsRdpClientAdvancedSettings2::get_MaxReconnectAttempts(
long * pMaxReconnectAttempts)
const
3293 return Outer()->GetProperty(Outer()->m_MaxReconnectAttempts, pMaxReconnectAttempts);
3299 return Outer()->SetProperty(Outer()->m_ConnectionBarShowMinimizeButton, pfShowMinimize);
3304 return Outer()->GetProperty(Outer()->m_ConnectionBarShowMinimizeButton, pfShowMinimize);
3309 return Outer()->SetProperty(Outer()->m_ConnectionBarShowRestoreButton, pfShowRestore);
3314 return Outer()->GetProperty(Outer()->m_ConnectionBarShowRestoreButton, pfShowRestore);
3318 virtual STDMETHODIMP IMsRdpClientAdvancedSettings4::put_AuthenticationLevel(
unsigned int puiAuthLevel)
3321 return Outer()->SetProperty(Outer()->m_AuthenticationLevel, puiAuthLevel);
3324 virtual STDMETHODIMP IMsRdpClientAdvancedSettings4::get_AuthenticationLevel(
unsigned int * puiAuthLevel)
const
3326 return Outer()->GetProperty(Outer()->m_AuthenticationLevel, puiAuthLevel);
3334 *ppAdvSettings = &m_advancedSettings;
3339 friend class SecuredSettings;
3346 return InnerToOuter(
this);
3351 return InnerToOuter(
this);
3362 HRESULT hr = Outer()->LoadTypeLibrary();
3367 assert(MSTSCLib::IID_IMsRdpClientSecuredSettings == MSTSCLib_Redist::IID_IMsRdpClientSecuredSettings);
3369 hr = Outer()->m_typeLib->GetTypeInfoOfGuid(MSTSCLib::IID_IMsRdpClientSecuredSettings, &m_dispTypeInfo);
3385 m_dispTypeInfo->
AddRef();
3386 *ppTI = m_dispTypeInfo;
3423 return Outer()->addRef();
3428 return Outer()->release();
3443 return AcquireDispTypeInfo(ppTInfo);
3453 return m_dispTypeInfo->
GetIDsOfNames(rgszNames, cNames, rgDispId);
3458 return m_dispTypeInfo->
Invoke
3473 return Outer()->SetProperty(Outer()->m_StartProgram, pStartProgram);
3478 return Outer()->GetProperty(Outer()->m_StartProgram, pStartProgram);
3483 return Outer()->SetProperty(Outer()->m_WorkDir, pWorkDir);
3488 return Outer()->GetProperty(Outer()->m_WorkDir, pWorkDir);
3491 virtual STDMETHODIMP IMsTscSecuredSettings::put_FullScreen(
long pfFullScreen)
3493 return Outer()->put_FullScreen(!!pfFullScreen);
3496 virtual STDMETHODIMP IMsTscSecuredSettings::get_FullScreen(
long * pfFullScreen)
const
3498 return Outer()->GetProperty(Outer()->m_FullScreen, pfFullScreen);
3502 virtual STDMETHODIMP IMsRdpClientSecuredSettings::put_KeyboardHookMode(
long pkeyboardHookMode)
3504 if(pkeyboardHookMode < 0 || pkeyboardHookMode > 2)
3507 return Outer()->SetProperty(Outer()->m_KeyboardHookMode, pkeyboardHookMode);
3510 virtual STDMETHODIMP IMsRdpClientSecuredSettings::get_KeyboardHookMode(
long * pkeyboardHookMode)
const
3512 return Outer()->GetProperty(Outer()->m_KeyboardHookMode, pkeyboardHookMode);
3515 virtual STDMETHODIMP IMsRdpClientSecuredSettings::put_AudioRedirectionMode(
long pAudioRedirectionMode)
3517 if(pAudioRedirectionMode < 0 || pAudioRedirectionMode > 2)
3520 return Outer()->SetProperty(Outer()->m_AudioRedirectionMode, pAudioRedirectionMode);
3523 virtual STDMETHODIMP IMsRdpClientSecuredSettings::get_AudioRedirectionMode(
long * pAudioRedirectionMode)
const
3525 return Outer()->GetProperty(Outer()->m_AudioRedirectionMode, pAudioRedirectionMode);
3532 if(!m_SecuredSettingsEnabled)
3536 *ppSecuredSettings = &m_securedSettings;
3557 assert(m_typeLibIndex < 10);
3559 szPath[cchPathLen + 0] =
L'\\';
3560 szPath[cchPathLen + 1] =
static_cast<WCHAR>(
L'0' + m_typeLibIndex);
3561 szPath[cchPathLen + 2] = 0;
3584 assert(MSTSCLib::IID_IMsRdpClient4 == MSTSCLib_Redist::IID_IMsRdpClient4);
3602 m_dispTypeInfo->
AddRef();
3603 *ppTI = m_dispTypeInfo;
3659 return InnerToOuter(
This)->OnPublicKey(
key, key_size);
3664 return InnerToOuter(
This)->OnLogon();
3683 return InnerToOuter(
This)->OnRedirect
3716 FireLoginComplete();
3735 assert(!InsideApartment());
3753 return SendMessage(m_controlWindow, RDPC_WM_REDIRECT, 0,
reinterpret_cast<LPARAM>(&redirectArgs)) == 0;
3759 static_cast<RdpClient *
>(lpParam)->ProtocolLoop();
3785 if(m_AudioRedirectionMode == 1)
3788 if(m_ClearTextPassword)
3799 if(m_overallConnectionTimeout)
3801 overallTimeout.
QuadPart = - ((m_overallConnectionTimeout * 1000 * 1000 * 1000) / 100);
3805 if(overallConnectionTimer ==
NULL)
3809 if(overallConnectionTimer)
3820 m_ClearTextPassword,
3827 if(overallConnectionTimer)
3837 uint32 extendedDisconnectReason = 0;
3839 m_actuallyConnected =
true;
3849 m_actuallyConnected =
false;
3876 long autoReconnections = 0;
3877 long totalReconnections = 0;
3883 ++ totalReconnections;
3886 long reconnectMode = FireAutoReconnecting(m_protocolState.
disconnect_reason, totalReconnections);
3895 assert(!m_reconnectAborted);
3896 assert(m_protocolThreadWaitingReconnection ==
NULL);
3898 if(waitingReconnection ==
NULL)
3902 if(waitingReconnection ==
NULL)
3907 m_protocolThreadWaitingReconnection = waitingReconnection;
3911 m_protocolThreadWaitingReconnection =
NULL;
3913 if(m_reconnectAborted)
3923 if(m_EnableAutoReconnect)
3927 if(autoReconnections == m_MaxReconnectAttempts)
3930 ++ autoReconnections;
3933 if(overallConnectionTimer)
3944 m_ClearTextPassword,
3951 if(overallConnectionTimer)
3961 if(overallConnectionTimer)
3967 assert(m_protocolThread);
3970 m_protocolThread =
NULL;
3975 assert(m_protocolThread);
3978 if(m_protocolThreadWaitingReconnection)
3980 assert(!m_reconnectAborted);
3981 m_reconnectAborted =
true;
3982 SetEvent(m_protocolThreadWaitingReconnection);
3991 assert(m_protocolThreadWaitingReconnection ==
NULL);
3996 assert(InsideApartment());
4004 m_Connected =
false;
4013 FireEventInsideApartment(4, &
arg, 1);
4043 RdpClient *
obj =
new RdpClient(rclsid, libIndex, punkOuter);
4121 if(cConnections == 0 || m_done)
4134 if(cConnections == 0)
4137 if(cConnections == 1 && !m_done)
4143 assert(cConnections > 1 || m_done);
4185 text = m_DisconnectedText;
4186 else if(m_actuallyConnected)
4187 text = m_ConnectedStatusText;
4189 text = m_ConnectingText;
4273 TEXT(
"MissTosca_Control"),
4286 if(m_controlWindow ==
NULL)
4289 m_UIParentWindowHandle = m_controlWindow;
4295 if(m_controlWindow ==
NULL)
4299 std::swap(controlWindow, m_controlWindow);
4306 if(pActiveSite ==
NULL)
4307 pActiveSite = m_clientSite;
4309 if(pActiveSite ==
NULL)
4325 hr =
site->CanInPlaceActivate();
4333 site->OnInPlaceActivate();
4345 OLEINPLACEFRAMEINFO frameInfo = {
sizeof(frameInfo) };
4347 site->GetWindowContext(&frame, &uiWindow, &rcPos, &rcClip, &frameInfo);
4349 if(lprcPosRect ==
NULL)
4350 lprcPosRect = &rcPos;
4362 SetObjectRects(lprcPosRect, &rcClip);
4369 hr =
site->OnUIActivate();
4428 return m_punkOuter->
AddRef();
4433 return m_punkOuter->
Release();
4448 return AcquireDispTypeInfo(ppTInfo);
4458 return m_dispTypeInfo->
GetIDsOfNames(rgszNames, cNames, rgDispId);
4468 return m_dispTypeInfo->
Invoke
4486 *pIID = MSTSCLib::DIID_IMsTscAxEvents;
4510 if(m_EventSinksCount)
4514 for(
size_t i = 0;
i < m_EventSinksCount; ++
i)
4516 found = (sinks[
i] ==
NULL);
4529 if(newSinks ==
NULL)
4535 std::copy(sinks, sinks + m_EventSinksCount, newSinks);
4537 m_EventSinks = newSinks;
4554 if(dwCookie >= m_EventSinksCount || sinks[dwCookie] ==
NULL)
4557 sinks[dwCookie]->Release();
4558 sinks[dwCookie] =
NULL;
4584 if(
riid != MSTSCLib::DIID_IMsTscAxEvents)