diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 54992b324fcaa2faa98f085381abaeeff63c6dc3..4b6ff38ad7a0beb8ceed0a8db4acb3ea6f472f43 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -831,31 +831,37 @@ static void fill_processor( struct table *table ) table->num_rows = count; } -static void fill_os( struct table *table ) +static const WCHAR *get_osarchitecture(void) { - struct record_operatingsystem *rec; - WCHAR path[MAX_PATH]; SYSTEM_INFO info; + GetNativeSystemInfo( &info ); + if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) return os_64bitW; + return os_32bitW; +} +static WCHAR *get_systemdirectory(void) +{ void *redir; + WCHAR *ret; - if (!(table->data = heap_alloc( sizeof(*rec) ))) return; - - rec = (struct record_operatingsystem *)table->data; - rec->caption = os_captionW; - rec->csdversion = os_csdversionW; + if (!(ret = heap_alloc( MAX_PATH * sizeof(WCHAR) ))) return NULL; + Wow64DisableWow64FsRedirection( &redir ); + GetSystemDirectoryW( ret, MAX_PATH ); + Wow64RevertWow64FsRedirection( redir ); + return ret; +} - GetNativeSystemInfo( &info ); - if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) - rec->osarchitecture = os_64bitW; - else - rec->osarchitecture = os_32bitW; +static void fill_os( struct table *table ) +{ + struct record_operatingsystem *rec; - rec->oslanguage = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ); + if (!(table->data = heap_alloc( sizeof(*rec) ))) return; - Wow64DisableWow64FsRedirection( &redir ); - GetSystemDirectoryW( path, MAX_PATH ); - Wow64RevertWow64FsRedirection( redir ); - rec->systemdirectory = heap_strdupW( path ); + rec = (struct record_operatingsystem *)table->data; + rec->caption = os_captionW; + rec->csdversion = os_csdversionW; + rec->osarchitecture = get_osarchitecture(); + rec->oslanguage = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ); + rec->systemdirectory = get_systemdirectory(); TRACE("created 1 row\n"); table->num_rows = 1;