217 lines
3.8 KiB
C++
217 lines
3.8 KiB
C++
|
// policy.cpp : Implementation of CCRemoteDesktopSystemPolicy
|
||
|
#include "stdafx.h"
|
||
|
#include "rdsgp.h"
|
||
|
|
||
|
CCriticalSection CRemoteDesktopSystemPolicy::m_Lock;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CRemoteDesktopSystemPolicy
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopSystemPolicy::get_AllowGetHelp(
|
||
|
/*[out, retval]*/ BOOL *pVal
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Retrieve where system is allowed to be in 'GetHelp' mode.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
pVal : Pointer to BOOL to receive whether system can be
|
||
|
in GetHelp mode.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK or error code.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
*pVal = TSIsMachinePolicyAllowHelp();
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopSystemPolicy::put_AllowGetHelp(
|
||
|
/*[in]*/ BOOL Val
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Set Allow to get help on local system, caller must
|
||
|
be Administrator or member of Administrators group.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Val : TRUE to enable GetHelp, FALSE otherwise.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK
|
||
|
HRESULT_FROM_WIN32( ERROR_ACCESS_DENIED )
|
||
|
error code.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = ImpersonateClient();
|
||
|
|
||
|
if( SUCCEEDED(hRes) )
|
||
|
{
|
||
|
hRes = HRESULT_FROM_WIN32( ConfigSystemGetHelp( Val ) );
|
||
|
EndImpersonateClient();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopSystemPolicy::get_RemoteDesktopSharingSetting(
|
||
|
/*[out, retval]*/ REMOTE_DESKTOP_SHARING_CLASS *pLevel
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Retrieve RDS sharing level on local system, function
|
||
|
retrieve setting from Group Policy first, then from
|
||
|
WINSTATION setting.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
pLevel : Pointer to REMOTE_DESKTOP_SHARING_CLASS to receive
|
||
|
RDS sharing level.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK or error code.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = HRESULT_FROM_WIN32( GetSystemRDSLevel( GetUserTSLogonId(), pLevel ) );
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopSystemPolicy::put_RemoteDesktopSharingSetting(
|
||
|
/*[in]*/ REMOTE_DESKTOP_SHARING_CLASS Level
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Set machine level RDS sharing level, this level
|
||
|
will override user setting.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Level : new REMOTE_DESKTOP_SHARING_CLASS level
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK or error code.
|
||
|
|
||
|
Note:
|
||
|
|
||
|
Function depends on platform and setting from Group Policy
|
||
|
and TSCC settings.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes;
|
||
|
|
||
|
hRes = ImpersonateClient();
|
||
|
|
||
|
if( SUCCEEDED(hRes) )
|
||
|
{
|
||
|
hRes = HRESULT_FROM_WIN32( ConfigSystemRDSLevel(Level) );
|
||
|
EndImpersonateClient();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CRemoteDesktopUserPolicy
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopUserPolicy::get_AllowGetHelp(
|
||
|
/*[out, retval]*/ BOOL* pVal
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Retrieve whether currently logon user can
|
||
|
'GetHelp'
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
pVal : Pointer to BOOL to receive user's GetHelp setting.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK or error code
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes;
|
||
|
CComBSTR bstrUserSid;
|
||
|
|
||
|
hRes = ImpersonateClient();
|
||
|
|
||
|
GetUserSidString( bstrUserSid );
|
||
|
if( SUCCEEDED(hRes) )
|
||
|
{
|
||
|
*pVal = IsUserAllowToGetHelp(GetUserTSLogonId(), (LPCTSTR) CComBSTRtoLPTSTR(bstrUserSid) );
|
||
|
EndImpersonateClient();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CRemoteDesktopUserPolicy::get_RemoteDesktopSharingSetting(
|
||
|
/*[out, retval]*/ REMOTE_DESKTOP_SHARING_CLASS* pLevel
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Retrieve currently logon user's desktop sharing level.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
pLevel : Pointer to REMOTE_DESKTOP_SHARING_CLASS to receive user's RDS level.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
S_OK or error code.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hRes;
|
||
|
|
||
|
hRes = ImpersonateClient();
|
||
|
|
||
|
if( SUCCEEDED(hRes) )
|
||
|
{
|
||
|
hRes = HRESULT_FROM_WIN32( GetUserRDSLevel(GetUserTSLogonId(), pLevel) );
|
||
|
EndImpersonateClient();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|