[PATCH 3/5] wbemprox: Implement more Win32_OperatingSystem properties.
Hans Leidekker
hans at codeweavers.com
Tue Sep 17 06:41:43 CDT 2019
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/wbemprox/builtin.c | 30 ++++++++++++++++++++++++++----
dlls/wbemprox/tests/query.c | 9 +++++++++
2 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index bb43f8a229..28acc3fc6f 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -87,7 +87,7 @@ static const WCHAR class_networkadapterW[] =
static const WCHAR class_networkadapterconfigW[] =
{'W','i','n','3','2','_','N','e','t','w','o','r','k','A','d','a','p','t','e','r',
'C','o','n','f','i','g','u','r','a','t','i','o','n',0};
-static const WCHAR class_osW[] =
+static const WCHAR class_operatingsystemW[] =
{'W','i','n','3','2','_','O','p','e','r','a','t','i','n','g','S','y','s','t','e','m',0};
static const WCHAR class_paramsW[] =
{'_','_','P','A','R','A','M','E','T','E','R','S',0};
@@ -177,6 +177,8 @@ static const WCHAR prop_cpustatusW[] =
{'C','p','u','S','t','a','t','u','s',0};
static const WCHAR prop_csdversionW[] =
{'C','S','D','V','e','r','s','i','o','n',0};
+static const WCHAR prop_csnameW[] =
+ {'C','S','N','a','m','e',0};
static const WCHAR prop_currentbitsperpixelW[] =
{'C','u','r','r','e','n','t','B','i','t','s','P','e','r','P','i','x','e','l',0};
static const WCHAR prop_currentclockspeedW[] =
@@ -189,6 +191,8 @@ static const WCHAR prop_currentrefreshrateW[] =
{'C','u','r','r','e','n','t','R','e','f','r','e','s','h','R','a','t','e',0};
static const WCHAR prop_currentscanmodeW[] =
{'C','u','r','r','e','n','t','S','c','a','n','M','o','d','e',0};
+static const WCHAR prop_currenttimezoneW[] =
+ {'C','u','r','r','e','n','t','T','i','m','e','Z','o','n','e',0};
static const WCHAR prop_currentverticalresW[] =
{'C','u','r','r','e','n','t','V','e','r','t','i','c','a','l','R','e','s','o','l','u','t','i','o','n',0};
static const WCHAR prop_datawidthW[] =
@@ -597,18 +601,21 @@ static const struct column col_networkadapterconfig[] =
{ prop_macaddressW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_settingidW, CIM_STRING|COL_FLAG_DYNAMIC }
};
-static const struct column col_os[] =
+static const struct column col_operatingsystem[] =
{
{ prop_buildnumberW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_captionW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_codesetW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_countrycodeW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_csdversionW, CIM_STRING|COL_FLAG_DYNAMIC },
+ { prop_csnameW, CIM_STRING|COL_FLAG_DYNAMIC },
+ { prop_currenttimezoneW, CIM_SINT16 },
{ prop_freephysicalmemoryW, CIM_UINT64 },
{ prop_installdateW, CIM_DATETIME },
{ prop_lastbootuptimeW, CIM_DATETIME|COL_FLAG_DYNAMIC },
{ prop_localdatetimeW, CIM_DATETIME|COL_FLAG_DYNAMIC },
{ prop_localeW, CIM_STRING|COL_FLAG_DYNAMIC },
+ { prop_manufacturerW, CIM_STRING },
{ prop_nameW, CIM_STRING|COL_FLAG_DYNAMIC },
{ prop_operatingsystemskuW, CIM_UINT32, VT_I4 },
{ prop_osarchitectureW, CIM_STRING },
@@ -1049,11 +1056,14 @@ struct record_operatingsystem
const WCHAR *codeset;
const WCHAR *countrycode;
const WCHAR *csdversion;
+ const WCHAR *csname;
+ INT16 currenttimezone;
UINT64 freephysicalmemory;
const WCHAR *installdate;
const WCHAR *lastbootuptime;
const WCHAR *localdatetime;
const WCHAR *locale;
+ const WCHAR *manufacturer;
const WCHAR *name;
UINT32 operatingsystemsku;
const WCHAR *osarchitecture;
@@ -3773,9 +3783,18 @@ static DWORD get_operatingsystemsku(void)
GetProductInfo( 6, 0, 0, 0, &ret );
return ret;
}
+static INT16 get_currenttimezone(void)
+{
+ TIME_ZONE_INFORMATION info;
+ DWORD status = GetTimeZoneInformation( &info );
+ if (status == TIME_ZONE_ID_INVALID) return 0;
+ if (status == TIME_ZONE_ID_DAYLIGHT) return -(info.Bias + info.DaylightBias);
+ return -(info.Bias + info.StandardBias);
+}
-static enum fill_status fill_os( struct table *table, const struct expr *cond )
+static enum fill_status fill_operatingsystem( struct table *table, const struct expr *cond )
{
+ static const WCHAR wineprojectW[] = {'T','h','e',' ','W','i','n','e',' ','P','r','o','j','e','c','t',0};
struct record_operatingsystem *rec;
enum fill_status status = FILL_STATUS_UNFILTERED;
OSVERSIONINFOEXW ver;
@@ -3792,11 +3811,14 @@ static enum fill_status fill_os( struct table *table, const struct expr *cond )
rec->codeset = get_codeset();
rec->countrycode = get_countrycode();
rec->csdversion = ver.szCSDVersion[0] ? heap_strdupW( ver.szCSDVersion ) : NULL;
+ rec->csname = get_computername();
+ rec->currenttimezone = get_currenttimezone();
rec->freephysicalmemory = get_available_physical_memory() / 1024;
rec->installdate = os_installdateW;
rec->lastbootuptime = get_lastbootuptime();
rec->localdatetime = get_localdatetime();
rec->locale = get_locale();
+ rec->manufacturer = wineprojectW;
rec->name = get_osname( rec->caption );
rec->operatingsystemsku = get_operatingsystemsku();
rec->osarchitecture = get_osarchitecture();
@@ -4312,7 +4334,7 @@ static struct table builtin_classes[] =
{ class_logicaldisktopartitionW, C(col_logicaldisktopartition), 0, 0, NULL, fill_logicaldisktopartition },
{ class_networkadapterW, C(col_networkadapter), 0, 0, NULL, fill_networkadapter },
{ class_networkadapterconfigW, C(col_networkadapterconfig), 0, 0, NULL, fill_networkadapterconfig },
- { class_osW, C(col_os), 0, 0, NULL, fill_os },
+ { class_operatingsystemW, C(col_operatingsystem), 0, 0, NULL, fill_operatingsystem },
{ class_paramsW, C(col_param), D(data_param) },
{ class_physicalmediaW, C(col_physicalmedia), D(data_physicalmedia) },
{ class_physicalmemoryW, C(col_physicalmemory), 0, 0, NULL, fill_physicalmemory },
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index 23641fc0d3..b1d15c0669 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -333,6 +333,9 @@ static void _check_property( ULONG line, IWbemClassObject *obj, const WCHAR *pro
case VT_BSTR:
trace( "%s: %s\n", wine_dbgstr_w(prop), wine_dbgstr_w(V_BSTR(&val)) );
break;
+ case VT_I2:
+ trace( "%s: %d\n", wine_dbgstr_w(prop), V_I2(&val) );
+ break;
case VT_I4:
trace( "%s: %d\n", wine_dbgstr_w(prop), V_I4(&val) );
break;
@@ -1187,7 +1190,10 @@ static void test_Win32_OperatingSystem( IWbemServices *services )
static const WCHAR buildnumberW[] = {'B','u','i','l','d','N','u','m','b','e','r',0};
static const WCHAR captionW[] = {'C','a','p','t','i','o','n',0};
static const WCHAR csdversionW[] = {'C','S','D','V','e','r','s','i','o','n',0};
+ static const WCHAR csnameW[] = {'C','S','N','a','m','e',0};
+ static const WCHAR currenttimezoneW[] = {'C','u','r','r','e','n','t','T','i','m','e','Z','o','n','e',0};
static const WCHAR freephysicalmemoryW[] = {'F','r','e','e','P','h','y','s','i','c','a','l','M','e','m','o','r','y',0};
+ static const WCHAR manufacturerW[] = {'M','a','n','u','f','a','c','t','u','r','e','r',0};
static const WCHAR nameW[] = {'N','a','m','e',0};
static const WCHAR operatingsystemskuW[] = {'O','p','e','r','a','t','i','n','g','S','y','s','t','e','m','S','K','U',0};
static const WCHAR osproductsuiteW[] = {'O','S','P','r','o','d','u','c','t','S','u','i','t','e',0};
@@ -1262,6 +1268,9 @@ static void test_Win32_OperatingSystem( IWbemServices *services )
trace( "osproductsuite: %d (%08x)\n", V_I4( &val ), V_I4( &val ) );
VariantClear( &val );
+ check_property( obj, csnameW, VT_BSTR, CIM_STRING );
+ check_property( obj, currenttimezoneW, VT_I2, CIM_SINT16 );
+ check_property( obj, manufacturerW, VT_BSTR, CIM_STRING );
check_property( obj, ostypeW, VT_I4, CIM_UINT16 );
check_property( obj, servicepackmajorW, VT_I4, CIM_UINT16 );
check_property( obj, servicepackminorW, VT_I4, CIM_UINT16 );
--
2.20.1
More information about the wine-devel
mailing list