Piotr Caban : dxdiagn: Initialize ProcessorEnglish property.
Alexandre Julliard
julliard at winehq.org
Fri Aug 31 12:53:46 CDT 2012
Module: wine
Branch: master
Commit: 2bfbac07a8ea01efd2d87dcafd01f876c53fff2a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2bfbac07a8ea01efd2d87dcafd01f876c53fff2a
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Aug 31 15:59:22 2012 +0200
dxdiagn: Initialize ProcessorEnglish property.
---
dlls/dxdiagn/provider.c | 80 +++++++++++++++++++++++++++++++++++++++-
dlls/dxdiagn/tests/container.c | 2 +
2 files changed, 80 insertions(+), 2 deletions(-)
diff --git a/dlls/dxdiagn/provider.c b/dlls/dxdiagn/provider.c
index 1e00a90..b207c9a 100644
--- a/dlls/dxdiagn/provider.c
+++ b/dlls/dxdiagn/provider.c
@@ -38,6 +38,7 @@
#include "initguid.h"
#include "fil_data.h"
#include "psapi.h"
+#include "wbemcli.h"
#include "wine/debug.h"
@@ -554,6 +555,82 @@ static HRESULT fill_os_string_information(IDxDiagContainerImpl_Container *node,
return S_OK;
}
+static HRESULT fill_processor_information(IDxDiagContainerImpl_Container *node)
+{
+ static const WCHAR szProcessorEnglish[] = {'s','z','P','r','o','c','e','s','s','o','r','E','n','g','l','i','s','h',0};
+
+ static const WCHAR cimv2W[] = {'\\','\\','.','\\','r','o','o','t','\\','c','i','m','v','2',0};
+ static const WCHAR proc_classW[] = {'W','i','n','3','2','_','P','r','o','c','e','s','s','o','r',0};
+ static const WCHAR nameW[] = {'N','a','m','e',0};
+ static const WCHAR max_clock_speedW[] = {'M','a','x','C','l','o','c','k','S','p','e','e','d',0};
+ static const WCHAR cpu_noW[] = {'N','u','m','b','e','r','O','f','L','o','g','i','c','a','l','P','r','o','c','e','s','s','o','r','s',0};
+
+ static const WCHAR processor_fmtW[] = {'%','s','(','%','d',' ','C','P','U','s',')',',',' ','~','%','d','M','H','z',0};
+
+ IWbemLocator *wbem_locator;
+ IWbemServices *wbem_service;
+ IWbemClassObject *wbem_class;
+ IEnumWbemClassObject *wbem_enum;
+ VARIANT cpu_name, cpu_no, clock_speed;
+ WCHAR print_buf[200];
+ BSTR bstr;
+ ULONG no;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemLocator, (void**)&wbem_locator);
+ if(FAILED(hr))
+ return hr;
+
+ bstr = SysAllocString(cimv2W);
+ if(!bstr) {
+ IWbemLocator_Release(wbem_locator);
+ return E_OUTOFMEMORY;
+ }
+ hr = IWbemLocator_ConnectServer(wbem_locator, bstr, NULL, NULL, NULL, 0, NULL, NULL, &wbem_service);
+ IWbemLocator_Release(wbem_locator);
+ SysFreeString(bstr);
+ if(FAILED(hr))
+ return hr;
+
+ bstr = SysAllocString(proc_classW);
+ if(!bstr) {
+ IWbemServices_Release(wbem_service);
+ return E_OUTOFMEMORY;
+ }
+ hr = IWbemServices_CreateInstanceEnum(wbem_service, bstr, WBEM_FLAG_SYSTEM_ONLY, NULL, &wbem_enum);
+ IWbemServices_Release(wbem_service);
+ SysFreeString(bstr);
+ if(FAILED(hr))
+ return hr;
+
+ hr = IEnumWbemClassObject_Next(wbem_enum, 1000, 1, &wbem_class, &no);
+ IEnumWbemClassObject_Release(wbem_enum);
+ if(FAILED(hr))
+ return hr;
+
+ hr = IWbemClassObject_Get(wbem_class, cpu_noW, 0, &cpu_no, NULL, NULL);
+ if(FAILED(hr)) {
+ IWbemClassObject_Release(wbem_class);
+ return hr;
+ }
+ hr = IWbemClassObject_Get(wbem_class, max_clock_speedW, 0, &clock_speed, NULL, NULL);
+ if(FAILED(hr)) {
+ IWbemClassObject_Release(wbem_class);
+ return hr;
+ }
+ hr = IWbemClassObject_Get(wbem_class, nameW, 0, &cpu_name, NULL, NULL);
+ IWbemClassObject_Release(wbem_class);
+ if(FAILED(hr))
+ return hr;
+
+ sprintfW(print_buf, processor_fmtW, V_BSTR(&cpu_name), V_I4(&cpu_no), V_I4(&clock_speed));
+ VariantClear(&cpu_name);
+ VariantClear(&cpu_no);
+ VariantClear(&clock_speed);
+
+ return add_bstr_property(node, szProcessorEnglish, print_buf);
+}
+
static HRESULT build_systeminfo_tree(IDxDiagContainerImpl_Container *node)
{
static const WCHAR dwDirectXVersionMajor[] = {'d','w','D','i','r','e','c','t','X','V','e','r','s','i','o','n','M','a','j','o','r',0};
@@ -584,7 +661,6 @@ static HRESULT build_systeminfo_tree(IDxDiagContainerImpl_Container *node)
static const WCHAR szSystemManufacturerEnglish[] = {'s','z','S','y','s','t','e','m','M','a','n','u','f','a','c','t','u','r','e','r','E','n','g','l','i','s','h',0};
static const WCHAR szSystemModelEnglish[] = {'s','z','S','y','s','t','e','m','M','o','d','e','l','E','n','g','l','i','s','h',0};
static const WCHAR szBIOSEnglish[] = {'s','z','B','I','O','S','E','n','g','l','i','s','h',0};
- static const WCHAR szProcessorEnglish[] = {'s','z','P','r','o','c','e','s','s','o','r','E','n','g','l','i','s','h',0};
static const WCHAR szSetupParamEnglish[] = {'s','z','S','e','t','u','p','P','a','r','a','m','E','n','g','l','i','s','h',0};
static const WCHAR szDxDiagVersion[] = {'s','z','D','x','D','i','a','g','V','e','r','s','i','o','n',0};
@@ -725,7 +801,7 @@ static HRESULT build_systeminfo_tree(IDxDiagContainerImpl_Container *node)
if (FAILED(hr))
return hr;
- hr = add_bstr_property(node, szProcessorEnglish, szEmpty);
+ hr = fill_processor_information(node);
if (FAILED(hr))
return hr;
diff --git a/dlls/dxdiagn/tests/container.c b/dlls/dxdiagn/tests/container.c
index d430bf4..9959665 100644
--- a/dlls/dxdiagn/tests/container.c
+++ b/dlls/dxdiagn/tests/container.c
@@ -856,6 +856,7 @@ static void test_DxDiag_SystemInfo(void)
static const WCHAR szOSEnglish[] = {'s','z','O','S','E','n','g','l','i','s','h',0};
static const WCHAR szOSExEnglish[] = {'s','z','O','S','E','x','E','n','g','l','i','s','h',0};
static const WCHAR szOSExLongEnglish[] = {'s','z','O','S','E','x','L','o','n','g','E','n','g','l','i','s','h',0};
+ static const WCHAR szProcessorEnglish[] = {'s','z','P','r','o','c','e','s','s','o','r','E','n','g','l','i','s','h',0};
static const struct property_test property_tests[] =
{
@@ -891,6 +892,7 @@ static void test_DxDiag_SystemInfo(void)
{szOSEnglish, VT_BSTR},
{szOSExEnglish, VT_BSTR},
{szOSExLongEnglish, VT_BSTR},
+ {szProcessorEnglish, VT_BSTR},
};
IDxDiagContainer *container;
More information about the wine-cvs
mailing list