blob: 23e5e318ef2504ed9968503902494d2ad48071c2 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_
#define REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>
#include "remoting/base/scoped_sc_handle_win.h"
// chromoting_lib.h contains MIDL-generated declarations.
#include "remoting/host/chromoting_lib.h"
namespace remoting {
class __declspec(uuid(DAEMON_CONTROLLER_CLSID)) ElevatedController
: public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>,
public ATL::CComCoClass<ElevatedController,
&__uuidof(ElevatedController)>,
public ATL::IDispatchImpl<IDaemonControl2, &IID_IDaemonControl2,
&LIBID_ChromotingLib, 1, 0> {
public:
// Declare a class factory which must not lock the ATL module. This is the
// same as DECLARE_CLASSFACTORY() with the exception that
// ATL::CComObjectNoLock is used unconditionally.
//
// By default ATL generates locking class factories (by wrapping them in
// ATL::CComObjectCached) for classes hosted in a DLL. This class is compiled
// into a DLL but it is registered as an out-of-process class, so its class
// factory should not use locking.
typedef ATL::CComCreator<ATL::CComObjectNoLock<ATL::CComClassFactory> >
_ClassFactoryCreatorClass;
ElevatedController();
HRESULT FinalConstruct();
void FinalRelease();
// IDaemonControl implementation.
STDMETHOD(GetConfig)(BSTR* config_out);
STDMETHOD(GetVersion)(BSTR* version_out);
STDMETHOD(SetConfig)(BSTR config);
STDMETHOD(SetOwnerWindow)(LONG_PTR owner_window);
STDMETHOD(StartDaemon)();
STDMETHOD(StopDaemon)();
STDMETHOD(UpdateConfig)(BSTR config);
// IDaemonControl2 implementation.
STDMETHOD(GetUsageStatsConsent)(BOOL* allowed, BOOL* set_by_policy);
STDMETHOD(SetUsageStatsConsent)(BOOL allowed);
DECLARE_NO_REGISTRY()
private:
HRESULT OpenService(ScopedScHandle* service_out);
BEGIN_COM_MAP(ElevatedController)
COM_INTERFACE_ENTRY(IDaemonControl)
COM_INTERFACE_ENTRY(IDaemonControl2)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// Handle of the owner window (if any) for any UI to be shown.
HWND owner_window_;
DECLARE_PROTECT_FINAL_CONSTRUCT()
};
} // namespace remoting
#endif // REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_