//Copyright (c) 1998 - 1999 Microsoft Corporation /********************************************************************************************* * * * Module Name: * * CfgComp.h * * Abstract: * This contains the declaration for the functions in CfgBkEnd. * * * Author: Arathi Kundapur: a-akunda * * * Revision: * * ************************************************************************************************/ #ifndef __CFGCOMP_H_ #define __CFGCOMP_H_ #include "resource.h" // main symbols #include "PtrArray.h" // Added by ClassView extern HINSTANCE g_hInstance; ///////////////////////////////////////////////////////////////////////////// // CCfgComp class ATL_NO_VTABLE CCfgComp : public CComObjectRootEx, public CComCoClass, public ICfgComp, public ISettingsComp , public IUserSecurity { public: CCfgComp() { m_bInitialized = FALSE; m_bAdmin = FALSE; lstrcpy( m_szConsole , L"Console" ); /* LoadString(g_hInstance, IDS_SYSTEM_CONSOLE_NAME, m_szConsole, WINSTATIONNAME_LENGTH ); */ } ~CCfgComp() { UnInitialize(); } DECLARE_REGISTRY_RESOURCEID(IDR_CFGCOMP) DECLARE_NOT_AGGREGATABLE(CCfgComp) BEGIN_COM_MAP(CCfgComp) COM_INTERFACE_ENTRY(ICfgComp) COM_INTERFACE_ENTRY(ISettingsComp) COM_INTERFACE_ENTRY(IUserSecurity) END_COM_MAP() // ICfgComp Methods public: // STDMETHOD(SetDefaultSecurity)(ULONG Offset); // STDMETHOD(GetDefaultSecurity)(ULONG * pDefaultSecurity); STDMETHOD(SetInternetConLic)(BOOL bInternetConLic , PDWORD ); STDMETHOD(GetInternetConLic)(BOOL * pbInternetConLic , PDWORD ); STDMETHOD(SetLicensingMode)(ULONG ulMode , PDWORD, PDWORD ); STDMETHOD(GetLicensingMode)(ULONG *pulMode , PDWORD ); STDMETHOD(GetLicensingModeInfo)(ULONG ulMode , WCHAR **pwszName, WCHAR **pwszDescription, PDWORD ); STDMETHOD(GetLicensingModeList)(ULONG *pcModes , ULONG **prgulModes, PDWORD ); STDMETHOD(SetUseTempDirPerSession)(BOOL bTempDirPerSession); STDMETHOD(GetUseTempDirPerSession)(BOOL * pbTempDir); STDMETHOD(SetDelDirsOnExit)(BOOL bDelDirsOnExit); STDMETHOD(GetDelDirsOnExit)(BOOL * pDelDirsOnExit); // STDMETHOD(SetCachedSessions)(DWORD dCachedSessions); STDMETHOD_(BOOL, IsAsyncDeviceAvailable)(LPCTSTR pDeviceName); STDMETHOD(DeleteWS)(PWINSTATIONNAME pWs); STDMETHOD(IsNetWorkConnectionUnique)(WCHAR * WdName, WCHAR * PdName, ULONG LanAdapter , BOOL * pUnique); STDMETHOD(GetDefaultUserConfig)(WCHAR * WdName,long * pSize,PUSERCONFIG* ppUser); STDMETHOD(CreateNewWS)(WS WinstationInfo,long UserCnfgSize, PUSERCONFIG pUserConfig, PASYNCCONFIGW pAsyncConfig); STDMETHOD(GetWSInfo)(PWINSTATIONNAME pWSName, long * Size, WS **ppWS); STDMETHOD(UpDateWS)( PWS , DWORD Data , PDWORD, BOOLEAN bPerformMerger ); STDMETHOD(GetDefaultSecurityDescriptor)(long * pSize,PSECURITY_DESCRIPTOR *ppSecurityDescriptor); STDMETHOD(IsSessionReadOnly)(BOOL * pReadOnly); STDMETHOD(RenameWinstation)(PWINSTATIONNAMEW pOldWinstation, PWINSTATIONNAMEW pNewWinstation); STDMETHOD(EnableWinstation)(PWINSTATIONNAMEW pWSName, BOOL fEnable); STDMETHOD(SetUserConfig)(PWINSTATIONNAMEW pWsName, ULONG size, PUSERCONFIG pUserConfig , PDWORD ); STDMETHOD(GetLanAdapterList)(WCHAR * pdName, ULONG * pNumAdapters,ULONG * pSize,WCHAR ** ppData); STDMETHOD(GetLanAdapterList2)(WCHAR * pdName, ULONG * pNumAdapters, PGUIDTBL *); STDMETHOD( BuildGuidTable )( PGUIDTBL * , int , WCHAR * ); STDMETHOD(GetTransportTypes)(WCHAR * Name, NameType Type,ULONG *pNumWd,ULONG * pSize, WCHAR **ppData); STDMETHOD(IsWSNameUnique)(PWINSTATIONNAMEW pWSName,BOOL * pUnique); STDMETHOD(GetWdTypeList)(ULONG *pNumWd,ULONG * pSize, WCHAR **ppData); STDMETHOD(GetWinstationList)(ULONG * NumWinstations, ULONG * Size, PWS * ppWS); STDMETHOD(Initialize)(); STDMETHOD(GetEncryptionLevels)(WCHAR * pName, NameType Type,ULONG * pNumEncryptionLevels,Encryption ** ppEncryption); STDMETHOD(GetUserConfig)(PWINSTATIONNAMEW pWsName, long * pSize,PUSERCONFIG * ppUser, BOOLEAN bPerformMerger); STDMETHOD(SetSecurityDescriptor)(PWINSTATIONNAMEW pWsName,DWORD Size,PSECURITY_DESCRIPTOR pSecurityDescriptor); STDMETHOD(GetSecurityDescriptor)(PWINSTATIONNAMEW pWSName,long * pSize,PSECURITY_DESCRIPTOR *ppSecurityDescriptor); STDMETHOD( ForceUpdate )( void ); STDMETHOD( Refresh )( void ); STDMETHOD( GetWdType )( PWDNAMEW , PULONG ); STDMETHOD( GetTransportType )( WCHAR * , WCHAR * , DWORD * ); STDMETHOD( IsAsyncUnique )( WCHAR * , WCHAR * , BOOL * ); STDMETHOD( SetAsyncConfig )( WCHAR * , NameType , PASYNCCONFIGW , PDWORD ); STDMETHOD( GetAsyncConfig )( WCHAR * , NameType , PASYNCCONFIGW ); STDMETHOD( GetDeviceList )( WCHAR * , NameType , ULONG * , LPBYTE * ); STDMETHOD( GetConnTypeName )( int , WCHAR * ); STDMETHOD( GetHWReceiveName )( int , WCHAR * ); STDMETHOD( GetHWTransmitName )( int , WCHAR * ); STDMETHOD( GetModemCallbackString )( int , WCHAR * ); STDMETHOD( GetCaps )( WCHAR * , ULONG * ); STDMETHOD( QueryLoggedOnCount )( WCHAR * , LONG * ); STDMETHOD( GetNumofWinStations )(WCHAR *,WCHAR *, PULONG ); STDMETHOD( UpdateSessionDirectory )( PDWORD ); STDMETHOD( GetColorDepth )( /* in */ PWINSTATIONNAMEW pWs, /* out */ BOOL * , /* out */ PDWORD ); STDMETHOD( SetColorDepth )( /* in */ PWINSTATIONNAMEW pWs, /* in */ BOOL, /* out */ PDWORD ); STDMETHOD( GetKeepAliveTimeout )( /* in */ PWINSTATIONNAMEW pWs, /* out */ BOOL * , /* out */ PDWORD ); STDMETHOD( SetKeepAliveTimeout )( /* in */ PWINSTATIONNAMEW pWs, /* in */ BOOL, /* out */ PDWORD ); STDMETHOD( GetProfilePath )( /* out */ BSTR * , /* out */ PDWORD ); STDMETHOD( SetProfilePath )( /* in */ BSTR , /* out */ PDWORD ); STDMETHOD( GetHomeDir )( /* out */ BSTR * , /* out */ PDWORD ); STDMETHOD( SetHomeDir )( /* in */ BSTR , /* out */ PDWORD ); //ISettingComp Methods // STDMETHOD( GetCachedSessions )(DWORD * ); STDMETHOD( SetActiveDesktopState )( /* in */ BOOL , /* out */ PDWORD ); STDMETHOD( GetActiveDesktopState )( /* out */ PBOOL , /* out */ PDWORD ); STDMETHOD( GetTermSrvMode )( /* out */ PDWORD , /* out */ PDWORD ); STDMETHOD( GetWdKey )( /* in */ WCHAR * , /* out , string */ WCHAR * ); STDMETHOD( GetUserPerm )( /* out */ BOOL * , /* out */ DWORD * ); STDMETHOD( SetUserPerm )( /* in */ BOOL , /* out */ PDWORD ); STDMETHOD( GetSalemHelpMode )( /* out */ BOOL *, /* out */ PDWORD ); STDMETHOD( SetSalemHelpMode )( /* in */ BOOL, /* out */ PDWORD ); STDMETHOD( GetDenyTSConnections )( /* out */ BOOL * , /* out */ PDWORD ); STDMETHOD( SetDenyTSConnections )( /* in */ BOOL, /* out */ PDWORD ); STDMETHOD( GetSingleSessionState )( /* out */ BOOL * , /* out */ PDWORD ); STDMETHOD( SetSingleSessionState )( /* in */ BOOL, /* out */ PDWORD ); //IUserSecurity Methods STDMETHOD( ModifyUserAccess )( /* in */ WCHAR *pwszWinstaName , /* in */ WCHAR *pwszAccountName , /* in */ DWORD dwMask , /* in */ BOOL fDel , /* in */ BOOL fAllow , /* in */ BOOL fNew , /* in */ BOOL fAuditing , /* out*/ PDWORD pdwStatus ); STDMETHOD( ModifyDefaultSecurity )( /* in */ WCHAR *pwszWinstaName , /* in */ WCHAR *pwszAccountName , /* in */ DWORD dwMask , /* in */ BOOL fDel , /* in */ BOOL fAllow , /* in */ BOOL fAuditing , /* out*/ PDWORD pdwStatus ); STDMETHOD( GetUserPermList )( /* in */ WCHAR *pwszWinstaName , /* out*/ PDWORD pcbItems , /* out*/ PUSERPERMLIST *ppUserPermList, /* in */ BOOL fAudit ); private: // PSECURITY_DESCRIPTOR ReadSecurityDescriptor(ULONG index); // HRESULT SetDefaultSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurity); DWORD RemoveUserEntriesInACL( LPCTSTR pszUserName, PACL pAcl, PACL* ppNewAcl ); DWORD GetUserSid( LPCTSTR pszUserName, PSID* ppUserSid ); HRESULT SetSecurityDescriptor( BOOL bDefaultSecurity, PWINSTATIONNAMEW pWsName, DWORD Size, PSECURITY_DESCRIPTOR pSecurityDescriptor ); BOOL ValidDefaultSecurity( const WCHAR* pwszName ); HRESULT ModifyWinstationSecurity( BOOL bDefaultSecurity, WCHAR *pwszWinstaName , WCHAR *pwszAccountName , DWORD dwMask , BOOL fDel , BOOL fAllow , BOOL fNew , BOOL fAuditing , PDWORD pdwStatus ); void DeleteWDArray(); STDMETHODIMP FillWdArray(); STDMETHODIMP FillWsArray(); STDMETHODIMP InsertInWSArray( PWINSTATIONNAMEW pWSName,PWINSTATIONCONFIG2W pWSConfig, PWS * ppObject ); void DeleteWSArray(); PWD GetWdObject(PWDNAMEW pWdName); PWS GetWSObject(WINSTATIONNAMEW WSName); STDMETHOD(UnInitialize)(); BOOL GetResourceStrings( int * , int , WCHAR * ); HRESULT GetWinStationSecurity(BOOL bDefault, PWINSTATIONNAMEW pWSName,PSECURITY_DESCRIPTOR *ppSecurityDescriptor); //Function borrowed from security.c in tscfg project DWORD ValidateSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor); // BOOL CompareSD(PSECURITY_DESCRIPTOR pSd1,PSECURITY_DESCRIPTOR pSd2); BOOL RegServerAccessCheck(REGSAM samDesired); void GetPdConfig( WDNAME WdKey,WINSTATIONCONFIG2W& WsConfig); void VerifyGuidsExistence( PGUIDTBL * , int , WCHAR *); HRESULT AdjustLanaId( PGUIDTBL * , int , int , PDWORD , PDWORD , int* , int ); CPtrArray m_WDArray; BOOL m_bInitialized; BOOL m_bAdmin; CPtrArray m_WSArray; TCHAR m_szConsole[WINSTATIONNAME_LENGTH + 1]; }; #endif //__CFGCOMP_H_