On Thu, Dec 01, 2022 at 10:34:09AM +0000, Richard W.M. Jones wrote:
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-... https://github.com/cygwin/cygwin/blob/a263fe0b268580273c1adc4b1bad2561479902... 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 --- lib/inspect-osinfo.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/lib/inspect-osinfo.c b/lib/inspect-osinfo.c index 90e57e6dfa..9a22a9d037 100644 --- a/lib/inspect-osinfo.c +++ b/lib/inspect-osinfo.c @@ -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) @@ -142,8 +144,27 @@ 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-... + * https://github.com/cygwin/cygwin/blob/a263fe0b268580273c1adc4b1bad2561479902... + */ + build_id_str = guestfs_inspect_get_build_id (g, root); + if (!build_id_str) + return NULL; + + if (sscanf (build_id_str, "%d", &build_id) != 1) { + error (g, "cannot parse Windows build ID from this guest"); + return NULL; + } + + if (build_id >= 2200)
This should of course be 22000! Updated my copy. Rich.
+ return safe_strdup (g, "win11"); + else + return safe_strdup (g, "win10"); + } } break; } -- 2.37.3
_______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org