mirror of https://github.com/tongzx/nt5src
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.
216 lines
3.8 KiB
216 lines
3.8 KiB
// 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;
|
|
}
|