summaryrefslogtreecommitdiffstats
path: root/remoting/host/elevated_controller_win.h
blob: 64a9afac6bf417cbd917629361fde7a3bc1a7f81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 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_ELEVATED_CONTROLLER_WIN_H_
#define REMOTING_HOST_ELEVATED_CONTROLLER_WIN_H_

#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>

// MIDL-generated declarations.
#include <elevated_controller.h>

namespace remoting {

class ATL_NO_VTABLE ElevatedControllerWin
    : public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>,
      public ATL::CComCoClass<ElevatedControllerWin, &CLSID_ElevatedController>,
      public ATL::IDispatchImpl<IDaemonControl, &IID_IDaemonControl,
                                &LIBID_ChromotingElevatedControllerLib, 1, 0>,
      public ATL::IConnectionPointContainerImpl<ElevatedControllerWin>,
      public ATL::IConnectionPointImpl<ElevatedControllerWin,
                                       &IID_IDaemonEvents> {
 public:
  ElevatedControllerWin();

  HRESULT FinalConstruct();
  void FinalRelease();

  // IDaemonControl implementation.
  STDMETHOD(get_State)(DaemonState* state_out);
  STDMETHOD(ReadConfig)(BSTR* config_out);
  STDMETHOD(WriteConfig)(BSTR config);
  STDMETHOD(StartDaemon)();
  STDMETHOD(StopDaemon)();

  // Fires IDaemonEvents::OnStateChange notification.
  HRESULT FireOnStateChange(DaemonState state);

  DECLARE_NO_REGISTRY()

  BEGIN_COM_MAP(ElevatedControllerWin)
    COM_INTERFACE_ENTRY(IDaemonControl)
    COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IConnectionPointContainer)
  END_COM_MAP()

  BEGIN_CONNECTION_POINT_MAP(ElevatedControllerWin)
    CONNECTION_POINT_ENTRY(IID_IDaemonEvents)
  END_CONNECTION_POINT_MAP()

  DECLARE_PROTECT_FINAL_CONSTRUCT()
};

OBJECT_ENTRY_AUTO(CLSID_ElevatedController, ElevatedControllerWin)

} // namespace remoting

#endif // REMOTING_HOST_ELEVATED_CONTROLLER_WIN_H_