Skip to content

Commit

Permalink
lib: Return correct osinfo field for Windows 11
Browse files Browse the repository at this point in the history
For Windows Client, we can only distinguish between Windows 10 and
Windows 11 using the build ID.  The product name in both cases is
"Windows 10 <something>", apparently intentionally.

References:
https://learn.microsoft.com/en-us/answers/questions/586619/windows-11-build-ver-is-still-10022000194.html
https://github.com/cygwin/cygwin/blob/a263fe0b268580273c1adc4b1bad256147990222/winsup/cygwin/wincap.cc#L429
https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions

After this fix, the output of virt-inspector changes to this, which is
a bit odd, but correct:

    <name>windows</name>
    <arch>x86_64</arch>
    <distro>windows</distro>
    <product_name>Windows 10 Pro</product_name>
    <product_variant>Client</product_variant>
    <major_version>10</major_version>
    <minor_version>0</minor_version>
    <windows_systemroot>/Windows</windows_systemroot>
    <windows_current_control_set>ControlSet001</windows_current_control_set>
    <osinfo>win11</osinfo>

Thanks: Yaakov Selkowitz
Reported-by: Yongkui Guo
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2012658
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
  • Loading branch information
rwmjones committed Dec 2, 2022
1 parent f3dd67a commit 824c745
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions lib/inspect-osinfo.c
Expand Up @@ -86,6 +86,8 @@ guestfs_impl_inspect_get_osinfo (guestfs_h *g, const char *root)
else if (STREQ (type, "windows")) {
CLEANUP_FREE char *product_name = NULL;
CLEANUP_FREE char *product_variant = NULL;
CLEANUP_FREE char *build_id_str = NULL;
int build_id;

product_name = guestfs_inspect_get_product_name (g, root);
if (!product_name)
Expand Down Expand Up @@ -142,8 +144,26 @@ guestfs_impl_inspect_get_osinfo (guestfs_h *g, const char *root)
return safe_strdup (g, "win2k19");
else
return safe_strdup (g, "win2k16");
} else
return safe_strdup (g, "win10");
}
else {
/* For Windows >= 10 Client we can only distinguish between
* versions by looking at the build ID. See:
* https://learn.microsoft.com/en-us/answers/questions/586619/windows-11-build-ver-is-still-10022000194.html
* https://github.com/cygwin/cygwin/blob/a263fe0b268580273c1adc4b1bad256147990222/winsup/cygwin/wincap.cc#L429
*/
build_id_str = guestfs_inspect_get_build_id (g, root);
if (!build_id_str)
return NULL;

build_id = guestfs_int_parse_unsigned_int (g, build_id_str);
if (build_id == -1)
return NULL;

if (build_id >= 22000)
return safe_strdup (g, "win11");
else
return safe_strdup (g, "win10");
}
}
break;
}
Expand Down

0 comments on commit 824c745

Please sign in to comment.