Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4180)

Unified Diff: base/wmi_util.cc

Issue 18610: Remove ATL from wmi_util... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/scoped_comptr_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/wmi_util.cc
===================================================================
--- base/wmi_util.cc (revision 8298)
+++ base/wmi_util.cc (working copy)
@@ -3,23 +3,45 @@
// found in the LICENSE file.
#include <windows.h>
-#include <atlbase.h>
+#include "base/basictypes.h"
+#include "base/scoped_bstr_win.h"
+#include "base/scoped_comptr_win.h"
#pragma comment(lib, "wbemuuid.lib")
#include "base/wmi_util.h"
+namespace {
+// Simple class to manage the lifetime of a variant.
+// TODO(tommi): Replace this for a more useful class.
+class VariantHelper : public VARIANT {
+ public:
+ VariantHelper() {
+ vt = VT_EMPTY;
+ }
+ explicit VariantHelper(VARTYPE type) {
+ vt = type;
+ }
+ ~VariantHelper() {
+ ::VariantClear(this);
+ }
+ private:
+ DISALLOW_COPY_AND_ASSIGN(VariantHelper);
+};
+
+} // namespace
+
bool WMIUtil::CreateLocalConnection(bool set_blanket,
IWbemServices** wmi_services) {
- CComPtr<IWbemLocator> wmi_locator;
- HRESULT hr = wmi_locator.CoCreateInstance(CLSID_WbemLocator, NULL,
- CLSCTX_INPROC_SERVER);
+ ScopedComPtr<IWbemLocator> wmi_locator;
+ HRESULT hr = wmi_locator.CreateInstance(CLSID_WbemLocator, NULL,
+ CLSCTX_INPROC_SERVER);
if (FAILED(hr))
return false;
- CComPtr<IWbemServices> wmi_services_r;
- hr = wmi_locator->ConnectServer(CComBSTR(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL,
- 0, 0, &wmi_services_r);
+ ScopedComPtr<IWbemServices> wmi_services_r;
+ hr = wmi_locator->ConnectServer(StackBstr(L"ROOT\\CIMV2"), NULL, NULL, 0,
+ NULL, 0, 0, wmi_services_r.Receive());
if (FAILED(hr))
return false;
@@ -46,16 +68,17 @@
IWbemClassObject** class_instance) {
// We attempt to instantiate a COM object that represents a WMI object plus
// a method rolled into one entity.
- CComBSTR b_class_name(class_name.c_str());
- CComBSTR b_method_name(method_name.c_str());
- CComPtr<IWbemClassObject> class_object = NULL;
+ ScopedBstr b_class_name(class_name.c_str());
+ ScopedBstr b_method_name(method_name.c_str());
+ ScopedComPtr<IWbemClassObject> class_object;
HRESULT hr;
- hr = wmi_services->GetObject(b_class_name, 0, NULL, &class_object, NULL);
+ hr = wmi_services->GetObject(b_class_name, 0, NULL,
+ class_object.Receive(), NULL);
if (FAILED(hr))
return false;
- CComPtr<IWbemClassObject> params_def = NULL;
- hr = class_object->GetMethod(b_method_name, 0, &params_def, NULL);
+ ScopedComPtr<IWbemClassObject> params_def;
+ hr = class_object->GetMethod(b_method_name, 0, params_def.Receive(), NULL);
if (FAILED(hr))
return false;
@@ -81,34 +104,37 @@
// http://msdn2.microsoft.com/en-us/library/aa389388(VS.85).aspx
bool WMIProcessUtil::Launch(const std::wstring& command_line, int* process_id) {
- CComPtr<IWbemServices> wmi_local;
- if (!WMIUtil::CreateLocalConnection(true, &wmi_local))
+ ScopedComPtr<IWbemServices> wmi_local;
+ if (!WMIUtil::CreateLocalConnection(true, wmi_local.Receive()))
return false;
const wchar_t class_name[] = L"Win32_Process";
const wchar_t method_name[] = L"Create";
- CComPtr<IWbemClassObject> process_create;
+ ScopedComPtr<IWbemClassObject> process_create;
if (!WMIUtil::CreateClassMethodObject(wmi_local, class_name, method_name,
- &process_create))
+ process_create.Receive()))
return false;
- CComVariant b_command_line(command_line.c_str());
+ VariantHelper b_command_line(VT_BSTR);
+ b_command_line.bstrVal = ::SysAllocString(command_line.c_str());
+
if (!SetParameter(process_create, L"CommandLine", &b_command_line))
return false;
- CComPtr<IWbemClassObject> out_params;
- HRESULT hr = wmi_local->ExecMethod(CComBSTR(class_name),
- CComBSTR(method_name), 0, NULL,
- process_create, &out_params, NULL);
+ ScopedComPtr<IWbemClassObject> out_params;
+ HRESULT hr = wmi_local->ExecMethod(StackBstr(class_name),
+ StackBstr(method_name), 0, NULL,
+ process_create, out_params.Receive(),
+ NULL);
if (FAILED(hr))
return false;
- CComVariant ret_value;
+ VariantHelper ret_value;
hr = out_params->Get(L"ReturnValue", 0, &ret_value, NULL, 0);
if (FAILED(hr) || (0 != ret_value.uintVal))
return false;
- CComVariant pid;
+ VariantHelper pid;
hr = out_params->Get(L"ProcessId", 0, &pid, NULL, 0);
if (FAILED(hr) || (0 == pid.intVal))
return false;
« no previous file with comments | « base/scoped_comptr_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698