1 // Copyright (c) 2006-2008 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 BASE_WMI_UTIL_H__
21 #define BASE_WMI_UTIL_H__
28 // Creates an instance of the WMI service connected to the local computer and
29 // returns its COM interface. If 'set-blanket' is set to true, the basic COM
30 // security blanket is applied to the returned interface. This is almost
31 // always desirable unless you set the parameter to false and apply a custom
32 // COM security blanket.
33 // Returns true if succeeded and 'wmi_services': the pointer to the service.
34 // When done with the interface you must call Release();
35 static bool CreateLocalConnection(bool set_blanket
,
36 IWbemServices
** wmi_services
);
38 // Creates a WMI method using from a WMI class named 'class_name' that
39 // contains a method named 'method_name'. Only WMI classes that are CIM
40 // classes can be created using this function.
41 // Returns true if succeeded and 'class_instance' returns a pointer to the
42 // WMI method that you can fill with parameter values using SetParameter.
43 // When done with the interface you must call Release();
44 static bool CreateClassMethodObject(IWbemServices
* wmi_services
,
45 const std::wstring
& class_name
,
46 const std::wstring
& method_name
,
47 IWbemClassObject
** class_instance
);
49 // Fills a single parameter given an instanced 'class_method'. Returns true
50 // if operation succeeded. When all the parameters are set the method can
51 // be executed using IWbemServices::ExecMethod().
52 static bool SetParameter(IWbemClassObject
* class_method
,
53 const std::wstring
& parameter_name
,
57 // This class contains functionality of the WMI class 'Win32_Process'
58 // more info: http://msdn2.microsoft.com/en-us/library/aa394372(VS.85).aspx
59 class WMIProcessUtil
{
61 // Creates a new process from 'command_line'. The advantage over CreateProcess
62 // is that it allows you to always break out from a Job object that the caller
63 // is attached to even if the Job object flags prevent that.
64 // Returns true and the process id in process_id if the process is launched
65 // successful. False otherwise.
66 // Note that a fully qualified path must be specified in most cases unless
67 // the program is not in the search path of winmgmt.exe.
68 // Processes created this way are children of wmiprvse.exe and run with the
69 // caller credentials.
70 static bool Launch(const std::wstring
& command_line
, int* process_id
);
73 #endif // BASE_WMI_UTIL_H__