wbemprox: Implement more Win32_OperatingSystem properties.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Hans Leidekker 2019-09-17 13:41:43 +02:00 committed by Alexandre Julliard
parent a94c466c54
commit ee74d9ad7a
2 changed files with 36 additions and 5 deletions

View File

@ -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 enum fill_status fill_os( struct table *table, const struct expr *cond )
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_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 },

View File

@ -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 );