ping On Wed, Sep 29, 2021 at 2:40 PM Konstantin Kostiuk <konstan...@daynix.com> wrote:
> ping > > On Tue, Sep 14, 2021 at 3:14 PM Kostiantyn Kostiuk <konstan...@daynix.com> > wrote: > >> Windows Server 2016, 2019, 2022 are based on Windows 10 and >> have the same major and minor versions. So, the only way to >> detect the proper version is to use the build number. >> >> Before this commit, the guest agent use the last build number >> for each OS, but it causes problems when new OS releases. >> There are few preview versions before release, and we >> can't update this list. >> >> After this commit, the guest agent will use the first build >> number. For each new preview version or release version, >> Microsoft increases the build number, so we can add the number >> of the first preview build and this will work until the new >> OS release. >> >> Signed-off-by: Kostiantyn Kostiuk <konstan...@daynix.com> >> --- >> qga/commands-win32.c | 18 +++++++++++------- >> 1 file changed, 11 insertions(+), 7 deletions(-) >> >> diff --git a/qga/commands-win32.c b/qga/commands-win32.c >> index 4e84afd83b..a8e9d40b31 100644 >> --- a/qga/commands-win32.c >> +++ b/qga/commands-win32.c >> @@ -2162,7 +2162,7 @@ static ga_matrix_lookup_t const >> WIN_VERSION_MATRIX[2][8] = { >> }; >> >> typedef struct _ga_win_10_0_server_t { >> - int final_build; >> + int first_build; >> char const *version; >> char const *version_id; >> } ga_win_10_0_server_t; >> @@ -2202,18 +2202,22 @@ static char *ga_get_win_name(OSVERSIONINFOEXW >> const *os_version, bool id) >> int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION); >> ga_matrix_lookup_t const *table = WIN_VERSION_MATRIX[tbl_idx]; >> ga_win_10_0_server_t const *win_10_0_table = >> WIN_10_0_SERVER_VERSION_MATRIX; >> + ga_win_10_0_server_t const *win_10_0_version = NULL; >> while (table->version != NULL) { >> if (major == 10 && minor == 0 && tbl_idx) { >> while (win_10_0_table->version != NULL) { >> - if (build <= win_10_0_table->final_build) { >> - if (id) { >> - return g_strdup(win_10_0_table->version_id); >> - } else { >> - return g_strdup(win_10_0_table->version); >> - } >> + if (build >= win_10_0_table->first_build) { >> + win_10_0_version = win_10_0_table; >> } >> win_10_0_table++; >> } >> + if (win_10_0_table) { >> + if (id) { >> + return g_strdup(win_10_0_version->version_id); >> + } else { >> + return g_strdup(win_10_0_version->version); >> + } >> + } >> } else if (major == table->major && minor == table->minor) { >> if (id) { >> return g_strdup(table->version_id); >> -- >> 2.33.0 >> >>