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.
180 lines
4.3 KiB
180 lines
4.3 KiB
/********************************************************************
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
UnsolicitedRC.cpp
|
|
|
|
Abstract:
|
|
SAFRemoteDesktopConnection Object
|
|
|
|
Revision History:
|
|
Kalyani Narlanka (kalyanin) 09/29/'00
|
|
Created
|
|
|
|
********************************************************************/
|
|
|
|
// SAFRemoteDesktopConnection.cpp : Implementation of CSAFRemoteDesktopConnection
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSAFRemoteDesktopConnection
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// construction / destruction
|
|
|
|
// **************************************************************************
|
|
CSAFRemoteDesktopConnection::CSAFRemoteDesktopConnection()
|
|
{
|
|
|
|
}
|
|
|
|
// **************************************************************************
|
|
CSAFRemoteDesktopConnection::~CSAFRemoteDesktopConnection()
|
|
{
|
|
Cleanup();
|
|
}
|
|
|
|
// **************************************************************************
|
|
void CSAFRemoteDesktopConnection::Cleanup(void)
|
|
{
|
|
|
|
}
|
|
|
|
static HRESULT Error(UINT nID, const REFIID riid, HRESULT hRes)
|
|
{
|
|
|
|
__MPC_FUNC_ENTRY( COMMONID, "CSAFRemoteDesktopConnection::ConnectRemoteDesktop" );
|
|
|
|
CComPtr<ICreateErrorInfo> pCrErrInfo = 0;
|
|
CComPtr<IErrorInfo> pErrorInfo;
|
|
HRESULT hr;
|
|
CComBSTR bstrDescription;
|
|
|
|
|
|
//Step1 initialize the error
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, CreateErrorInfo(&pCrErrInfo));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, pCrErrInfo->SetGUID(riid));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::LocalizeString( IDS_NOPOLICY, bstrDescription, /*fMUI*/true ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, pCrErrInfo->SetDescription(bstrDescription));
|
|
|
|
//Step2 throw the error
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, pCrErrInfo->QueryInterface(IID_IErrorInfo, (void**)&pErrorInfo));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, SetErrorInfo(0, pErrorInfo));
|
|
|
|
hr = hRes;
|
|
|
|
__MPC_FUNC_CLEANUP;
|
|
|
|
if(pCrErrInfo)
|
|
{
|
|
pCrErrInfo.Release();
|
|
}
|
|
if(pErrorInfo)
|
|
{
|
|
pErrorInfo.Release();
|
|
}
|
|
|
|
__MPC_FUNC_EXIT(hr);
|
|
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSAFRemoteDesktopConnection properties
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSAFRemoteDesktopConnection Methods
|
|
|
|
STDMETHODIMP CSAFRemoteDesktopConnection::InterfaceSupportsErrorInfo(REFIID riid)
|
|
{
|
|
static const IID* arr[] =
|
|
{
|
|
&IID_ISAFRemoteDesktopConnection
|
|
};
|
|
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP CSAFRemoteDesktopConnection::ConnectRemoteDesktop( /*[in]*/ BSTR bstrServerName, /*[out]*/ ISAFRemoteConnectionData* *ppRCD )
|
|
{
|
|
__MPC_FUNC_ENTRY( COMMONID, "CSAFRemoteDesktopConnection::ConnectRemoteDesktop" );
|
|
|
|
HRESULT hr;
|
|
CComPtr<CSAFRemoteConnectionData> pRCD;
|
|
DWORD dwSessions;
|
|
|
|
__MPC_PARAMCHECK_BEGIN(hr)
|
|
__MPC_PARAMCHECK_POINTER_AND_SET(ppRCD,NULL);
|
|
__MPC_PARAMCHECK_END();
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pRCD ));
|
|
|
|
// Invoke the GetUserSessionInfo to populate the Users and Sessions information.
|
|
|
|
hr = pRCD->InitUserSessionsInfo( bstrServerName );
|
|
|
|
if(hr == HRESULT_FROM_WIN32( ERROR_ACCESS_DISABLED_BY_POLICY ))
|
|
{
|
|
// Populate the error description.
|
|
// This Error() method sets up the IErrorInfo interface to provide error information to the client.
|
|
// To call the Error method, the object must implement the ISupportErrorInfo interface.
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, Error(IDS_NOPOLICY,IID_ISAFRemoteDesktopConnection,hr));
|
|
|
|
}
|
|
else
|
|
{
|
|
if(FAILED(hr))
|
|
{
|
|
// return the hr
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, hr);
|
|
}
|
|
|
|
}
|
|
|
|
// Return the RemoteConnectionData Interface to the caller
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, pRCD.QueryInterface( ppRCD ));
|
|
|
|
hr = S_OK;
|
|
|
|
__MPC_FUNC_CLEANUP;
|
|
|
|
__MPC_FUNC_EXIT(hr);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|