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.
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
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
14 // To use any function on this header you must call CoInitialize or
15 // CoInitializeEx beforehand.
17 // For more information about WMI programming:
18 // http://msdn2.microsoft.com/en-us/library/aa384642(VS.85).aspx
20 #ifndef CHROME_INSTALLER_UTIL_WMI_H_
21 #define CHROME_INSTALLER_UTIL_WMI_H_
25 #include "base/strings/string16.h"
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
);
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
);
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
,
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
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
);
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
{
80 // Returns a human readable string for the model/make of this computer.
81 static base::string16
GetModel();
84 } // namespace installer
86 #endif // CHROME_INSTALLER_UTIL_WMI_H_