On 9/2/21 2:36 PM, Konstantin Kostiuk wrote: > Hi Team, > > We have several bugs related to 'guest-get-osinfo' command in Windows > Guest Agent: > https://bugzilla.redhat.com/show_bug.cgi?id=1998919 > <https://bugzilla.redhat.com/show_bug.cgi?id=1998919> > https://bugzilla.redhat.com/show_bug.cgi?id=1972070 > <https://bugzilla.redhat.com/show_bug.cgi?id=1972070> > > This command returns the following data: > { > "name": "Microsoft Windows", > "kernel-release": "20344", > "version": "N/A", > "variant": "server", > "pretty-name": "Windows Server 2022 Datacenter", > "version-id": "N/A", > "variant-id": "server", > "kernel-version": "10.0", > "machine": "x86_64", > "id": "mswindows" > } > > The problem is with "version" and "pretty-name". Windows Server > 2016/2019/2022 and Windows 11 have the same MajorVersion > ("kernel-version") = 10, so to get pretty-name the guest agent uses a > conversion matrix between Windows build and name > (https://github.com/qemu/qemu/blob/59a89510b62ec23dbeab8b02fa4e3526e353d8b6/qga/commands-win32.c#L2170 > <https://github.com/qemu/qemu/blob/59a89510b62ec23dbeab8b02fa4e3526e353d8b6/qga/commands-win32.c#L2170>). > > This solution has several problems: need to update the conversion matrix > for each Windows build, one Windows name can have different build > numbers. For example, Windows Server 2022 (preview) build number is > 20344, Windows Server 2022 build number is 20348. > > There are two possible solutions: > 1. Use build number range instead of one number. Known implementation > issue: Microsoft provides a table > (https://docs.microsoft.com/en-Us/windows-server/get-started/windows-server-release-info > <https://docs.microsoft.com/en-Us/windows-server/get-started/windows-server-release-info>) > only with stable build numbers. So, we exactly don't know the build > number range.
Sounds good, start with low=high limit then if someone reports out-of-range we adapt the limit. BTW instead of burying this in C, I'd store this information in a JSON file to ease updates. > 2. We can read this string from the registry > (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion). Known > implementation issues: ProductName value is localized (in a Russian > version of Windows, the word "Microsoft' is translated), so we should > ignore it. ReleaseId value does not equal to Windows Server version (for > Windows Server 2019, ReleaseId is 1809) Could this work? if ReleaseId: return ProductName[ReleaseId]; else: return ProductName[release_id_by_buildnumber(BuildNumber)]; > In conclusion, I have the next questions: > What solution we should implement to get the Windows release name? > Does someone know how end-users use this information? Should it be > English only or it can be localized? Should we have exactly the same > output as now? > What should we do with the 'Standard' server edition? Currently, the > guest agent always returns 'Datacenter'. > > Best wishes, > Kostiantyn Kostiuk