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
>>
>>

Reply via email to