windows-nt/Source/XPSP1/NT/termsrv/remdsk/server/sessmgr/rdsgp.cpp
2020-09-26 16:20:57 +08:00

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;
}