Skip to content

Commit

Permalink
[host][windows]: change platform version from build version to displa…
Browse files Browse the repository at this point in the history
…y version
  • Loading branch information
shirou committed Apr 22, 2024
1 parent 68ea863 commit 2003e4c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
12 changes: 12 additions & 0 deletions host/host_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ func skipIfNotImplementedErr(t *testing.T, err error) {
}
}

func TestHostID(t *testing.T) {
v, err := HostID()
skipIfNotImplementedErr(t, err)
if err != nil {
t.Errorf("error %v", err)
}
if v == "" {
t.Errorf("Could not get host id %v", v)
}
t.Log(v)
}

func TestInfo(t *testing.T) {
v, err := Info()
skipIfNotImplementedErr(t, err)
Expand Down
20 changes: 18 additions & 2 deletions host/host_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ func BootTimeWithContext(ctx context.Context) (uint64, error) {
}

func PlatformInformationWithContext(ctx context.Context) (platform string, family string, version string, err error) {
platform, family, _, displayVersion, err := platformInformation(ctx)
if err != nil {
return "", "", "", err
}
return platform, family, displayVersion, nil
}

func platformInformation(ctx context.Context) (platform, family, version, displayVersion string, err error) {
// GetVersionEx lies on Windows 8.1 and returns as Windows 8 if we don't declare compatibility in manifest
// RtlGetVersion bypasses this lying layer and returns the true Windows version
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/nf-wdm-rtlgetversion
Expand Down Expand Up @@ -199,6 +207,14 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil
copy((*[4]byte)(unsafe.Pointer(&UBR))[:], regBuf)
}

// Get DisplayVersion(ex: 23H2) as platformVersion
err = windows.RegQueryValueEx(h, windows.StringToUTF16Ptr(`DisplayVersion`), nil, &valType, nil, &bufLen)
if err == nil {
regBuf := make([]uint16, bufLen/2+1)
err = windows.RegQueryValueEx(h, windows.StringToUTF16Ptr(`DisplayVersion`), nil, &valType, (*byte)(unsafe.Pointer(&regBuf[0])), &bufLen)
displayVersion = windows.UTF16ToString(regBuf[:])
}

// PlatformFamily
switch osInfo.wProductType {
case 1:
Expand All @@ -214,7 +230,7 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil
osInfo.dwMajorVersion, osInfo.dwMinorVersion, osInfo.dwBuildNumber, UBR,
osInfo.dwBuildNumber, UBR)

return platform, family, version, nil
return platform, family, version, displayVersion, nil
}

func UsersWithContext(ctx context.Context) ([]UserStat, error) {
Expand All @@ -228,7 +244,7 @@ func VirtualizationWithContext(ctx context.Context) (string, string, error) {
}

func KernelVersionWithContext(ctx context.Context) (string, error) {
_, _, version, err := PlatformInformationWithContext(ctx)
_, _, version, _, err := platformInformation(ctx)
return version, err
}

Expand Down

0 comments on commit 2003e4c

Please sign in to comment.