| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_ | |
| 6 #define REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_ | |
| 7 | |
| 8 #include <atlbase.h> | |
| 9 #include <atlcom.h> | |
| 10 #include <atlctl.h> | |
| 11 | |
| 12 #include "remoting/base/scoped_sc_handle_win.h" | |
| 13 | |
| 14 // chromoting_lib.h contains MIDL-generated declarations. | |
| 15 #include "remoting/host/chromoting_lib.h" | |
| 16 | |
| 17 namespace remoting { | |
| 18 | |
| 19 class __declspec(uuid(DAEMON_CONTROLLER_CLSID)) ElevatedController | |
| 20 : public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>, | |
| 21 public ATL::CComCoClass<ElevatedController, | |
| 22 &__uuidof(ElevatedController)>, | |
| 23 public ATL::IDispatchImpl<IDaemonControl2, &IID_IDaemonControl2, | |
| 24 &LIBID_ChromotingLib, 1, 0> { | |
| 25 public: | |
| 26 // Declare a class factory which must not lock the ATL module. This is the | |
| 27 // same as DECLARE_CLASSFACTORY() with the exception that | |
| 28 // ATL::CComObjectNoLock is used unconditionally. | |
| 29 // | |
| 30 // By default ATL generates locking class factories (by wrapping them in | |
| 31 // ATL::CComObjectCached) for classes hosted in a DLL. This class is compiled | |
| 32 // into a DLL but it is registered as an out-of-process class, so its class | |
| 33 // factory should not use locking. | |
| 34 typedef ATL::CComCreator<ATL::CComObjectNoLock<ATL::CComClassFactory> > | |
| 35 _ClassFactoryCreatorClass; | |
| 36 | |
| 37 ElevatedController(); | |
| 38 | |
| 39 HRESULT FinalConstruct(); | |
| 40 void FinalRelease(); | |
| 41 | |
| 42 // IDaemonControl implementation. | |
| 43 STDMETHOD(GetConfig)(BSTR* config_out); | |
| 44 STDMETHOD(GetVersion)(BSTR* version_out); | |
| 45 STDMETHOD(SetConfig)(BSTR config); | |
| 46 STDMETHOD(SetOwnerWindow)(LONG_PTR owner_window); | |
| 47 STDMETHOD(StartDaemon)(); | |
| 48 STDMETHOD(StopDaemon)(); | |
| 49 STDMETHOD(UpdateConfig)(BSTR config); | |
| 50 | |
| 51 // IDaemonControl2 implementation. | |
| 52 STDMETHOD(GetUsageStatsConsent)(BOOL* allowed, BOOL* set_by_policy); | |
| 53 STDMETHOD(SetUsageStatsConsent)(BOOL allowed); | |
| 54 | |
| 55 DECLARE_NO_REGISTRY() | |
| 56 | |
| 57 private: | |
| 58 HRESULT OpenService(ScopedScHandle* service_out); | |
| 59 | |
| 60 BEGIN_COM_MAP(ElevatedController) | |
| 61 COM_INTERFACE_ENTRY(IDaemonControl) | |
| 62 COM_INTERFACE_ENTRY(IDaemonControl2) | |
| 63 COM_INTERFACE_ENTRY(IDispatch) | |
| 64 END_COM_MAP() | |
| 65 | |
| 66 // Handle of the owner window (if any) for any UI to be shown. | |
| 67 HWND owner_window_; | |
| 68 | |
| 69 DECLARE_PROTECT_FINAL_CONSTRUCT() | |
| 70 }; | |
| 71 | |
| 72 } // namespace remoting | |
| 73 | |
| 74 #endif // REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_ | |
| OLD | NEW |