- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / installer / util / wmi.h
1 // Copyright (c) 2010 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 // WMI (Windows Management and Instrumentation) is a big, complex, COM-based
6 // API that can be used to perform all sorts of things. Sometimes is the best
7 // way to accomplish something under windows but its lack of an approachable
8 // C++ interface prevents its use. This collection of fucntions is a step in
9 // that direction.
10 // There are two classes; WMIUtil and WMIProcessUtil. The first
11 // one contain generic helpers and the second one contains the only
12 // functionality that is needed right now which is to use WMI to launch a
13 // process.
14 // To use any function on this header you must call CoInitialize or
15 // CoInitializeEx beforehand.
16 //
17 // For more information about WMI programming:
18 // http://msdn2.microsoft.com/en-us/library/aa384642(VS.85).aspx
19
20 #ifndef CHROME_INSTALLER_UTIL_WMI_H_
21 #define CHROME_INSTALLER_UTIL_WMI_H_
22
23 #include <string>
24 #include <wbemidl.h>
25 #include "base/strings/string16.h"
26
27 namespace installer {
28
29 class WMI {
30  public:
31   // Creates an instance of the WMI service connected to the local computer and
32   // returns its COM interface. If 'set-blanket' is set to true, the basic COM
33   // security blanket is applied to the returned interface. This is almost
34   // always desirable unless you set the parameter to false and apply a custom
35   // COM security blanket.
36   // Returns true if succeeded and 'wmi_services': the pointer to the service.
37   // When done with the interface you must call Release();
38   static bool CreateLocalConnection(bool set_blanket,
39                                     IWbemServices** wmi_services);
40
41   // Creates a WMI method using from a WMI class named 'class_name' that
42   // contains a method named 'method_name'. Only WMI classes that are CIM
43   // classes can be created using this function.
44   // Returns true if succeeded and 'class_instance' returns a pointer to the
45   // WMI method that you can fill with parameter values using SetParameter.
46   // When done with the interface you must call Release();
47   static bool CreateClassMethodObject(IWbemServices* wmi_services,
48                                       const std::wstring& class_name,
49                                       const std::wstring& method_name,
50                                       IWbemClassObject** class_instance);
51
52   // Fills a single parameter given an instanced 'class_method'. Returns true
53   // if operation succeeded. When all the parameters are set the method can
54   // be executed using IWbemServices::ExecMethod().
55   static bool SetParameter(IWbemClassObject* class_method,
56                            const std::wstring& parameter_name,
57                            VARIANT* parameter);
58 };
59
60 // This class contains functionality of the WMI class 'Win32_Process'
61 // more info: http://msdn2.microsoft.com/en-us/library/aa394372(VS.85).aspx
62 class WMIProcess {
63  public:
64   // Creates a new process from 'command_line'. The advantage over CreateProcess
65   // is that it allows you to always break out from a Job object that the caller
66   // is attached to even if the Job object flags prevent that.
67   // Returns true and the process id in process_id if the process is launched
68   // successful. False otherwise.
69   // Note that a fully qualified path must be specified in most cases unless
70   // the program is not in the search path of winmgmt.exe.
71   // Processes created this way are children of wmiprvse.exe and run with the
72   // caller credentials.
73   static bool Launch(const std::wstring& command_line, int* process_id);
74 };
75
76 // This class contains functionality of the WMI class 'Win32_ComputerSystem'
77 // more info: http://msdn.microsoft.com/en-us/library/aa394102(VS.85).aspx
78 class WMIComputerSystem {
79  public:
80   // Returns a human readable string for the model/make of this computer.
81   static string16 GetModel();
82 };
83
84 }  // namespace installer
85
86 #endif  // CHROME_INSTALLER_UTIL_WMI_H_