// Copyright (C) 2002 Microsoft Corporation // // class ManageYourServer, which implements IManageYourServer // // 21 January 2002 sburns #ifndef MANAGEYOURSERVER_HPP_INCLUDED #define MANAGEYOURSERVER_HPP_INCLUDED #include enum HardenedLevel { NO_HARDENING, USERS_HARDENED, ADMINS_HARDENED, ALL_HARDENED }; class ManageYourServer : public IManageYourServer /* , public ISupportErrorInfo */ // CODEWORK: add support for ErrorInfo { // this is the only entity with access to the ctor of this class friend class ClassFactory; public: // IUnknown methods virtual HRESULT __stdcall QueryInterface(const IID& riid, void **ppv); virtual ULONG __stdcall AddRef(); virtual ULONG __stdcall Release(); // IDispatch methods virtual HRESULT __stdcall GetTypeInfoCount(UINT *pcti); virtual HRESULT __stdcall GetTypeInfo(UINT cti, LCID, ITypeInfo **ppti); virtual HRESULT __stdcall GetIDsOfNames( REFIID riid, OLECHAR **prgpsz, UINT cNames, LCID lcid, DISPID *prgids); virtual HRESULT __stdcall Invoke( DISPID id, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *params, VARIANT *pVarResult, EXCEPINFO *pei, UINT *puArgErr); // // ISupportErrorInfo methods // // virtual // HRESULT __stdcall // InterfaceSupportsErrorInfo(const IID& iid); // // IManageYourServer methods // virtual HRESULT __stdcall GetConfiguredRoleMarkup( /* [retval][out] */ BSTR *result); virtual HRESULT __stdcall HasRoleStatusChanged( /* [retval][out] */ BOOL *result); virtual HRESULT __stdcall IsClusterNode( /* [retval][out] */ BOOL *result); virtual HRESULT __stdcall IsCurrentUserAnAdministrator( /* [out, retval] */ BOOL* result); virtual HRESULT __stdcall IsSupportedSku( /* [out, retval] */ BOOL* result); virtual HRESULT __stdcall IsStartupFlagSet( /* [out, retval] */ BOOL* result); virtual HRESULT __stdcall SetRunAtLogon( /* [in] */ BOOL newState); // NTRAID#NTBUG9-530202-29-Mar-2002-jrowlett // support needed to check if link is valid virtual HRESULT __stdcall IsServerManagementConsolePresent( /* [out, retval] */ BOOL* result ); // NTRAID#NTBUG9-602954-29-Apr-2002-jrowlett // support hiding the startup checkbox when policy is enabled. virtual HRESULT __stdcall IsShowAtStartupPolicyEnabled( /* [out, retval] */ BOOL* result ); // NTRAID#NTBUG9-627875-2002/05/22-artm // support hiding startup checkbox when running on datacenter server virtual HRESULT __stdcall IsDatacenterServer( /* [out, retval] */ BOOL* result ); // NTRAID#NTBUG9-648428-2002/06/25-artm // support hiding web application server console link if on IA64 virtual HRESULT __stdcall IsWebServerConsolePresent( /* [out, retval] */ BOOL* result ); // NTRAID#NTBUG9-632113-2002/07/01-artm // support saving collapsed/expanded state of role nodes virtual HRESULT __stdcall CollapseRole( /* [in] */ BSTR roleId, /* [in] */ BOOL collapse ); // NTRAID#NTBUG9-632113-2002/07/01-artm // support checking collapsed state of role nodes virtual HRESULT __stdcall IsRoleCollapsed( /* [in] */ BSTR roleId, /* [out, retval] */ BOOL* result); // NTRAID#NTBUG9-680200-2002/08/01-artm // Support retrieving working area of the display. // // Area info is returned as a comma separated string b/c JScript does not // support getting back SAFEARRAY's. // // e.g. "0,0,800,600" --> working area is 800 wide, 600 high, and starts at // screen position (0,0) virtual HRESULT __stdcall GetWorkingAreaInfo( /* [out, retval] */ BSTR* info); private: // only our friend class factory can instantiate us. ManageYourServer(); // only Release can cause us to be deleted virtual ~ManageYourServer(); // not implemented: no copying allowed ManageYourServer(const ManageYourServer&); const ManageYourServer& operator=(const ManageYourServer&); struct RoleStatus { ServerRole role; // The enum used to identify a role InstallationStatus status; // The enum used for the role's state // we sort by role bool operator<(const RoleStatus& rhs) const { if (this == &rhs) { return false; } return this->role < rhs.role; } bool operator==(const RoleStatus& rhs) const { if (this == &rhs) { // identity is equality return true; } return (this->role == rhs.role) && (this->status == rhs.status); } }; typedef std::vector > RoleStatusVector; typedef void (*ParamSubFunc)(String& target); typedef std::map< ServerRole, std::pair, std::less, Burnslib::Heap::Allocator > > RoleToFragmentNameMap; static void AppendXmlFragment( String& s, const String& fragName, ParamSubFunc subFunc); static void BuildFragMap(); static void GetRoleStatus(RoleStatusVector& stat); // NTRAID#NTBUG9-698722-2002/09/03-artm static void InitDCPromoStatusCheck(); static bool isDCCheckInitialized; static RoleToFragmentNameMap fragMap; static bool fragMapBuilt; RoleStatusVector roleStatus; ComServerReference dllref; long refcount; ITypeInfo** m_ppTypeInfo; bool foundTLS; // Found terminal licensing server? HardenedLevel ieSecurity; // Level of IE security (hardening patch) }; #endif // MANAGEYOURSERVER_HPP_INCLUDED