From ab9796b0e9be764ebcda50c159627d28aa32c14c Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 26 Jan 2022 13:39:03 +0100 Subject: [PATCH] pkg/system: rewrite IsWindowsClient() using golang.org/x/sys/windows Looks like we should be able to use the implementation from x/sys/windows. Signed-off-by: Sebastiaan van Stijn --- pkg/system/syscall_windows.go | 36 +++++------------------------------ 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/pkg/system/syscall_windows.go b/pkg/system/syscall_windows.go index 8e25ad3313..ef782d7ac8 100644 --- a/pkg/system/syscall_windows.go +++ b/pkg/system/syscall_windows.go @@ -1,10 +1,6 @@ package system // import "github.com/docker/docker/pkg/system" -import ( - "unsafe" - - "github.com/sirupsen/logrus" -) +import "golang.org/x/sys/windows" const ( // Deprecated: use github.com/docker/pkg/idtools.SeTakeOwnershipPrivilege @@ -15,35 +11,13 @@ const ( ContainerUserSidString = "S-1-5-93-2-2" ) -var procGetVersionExW = modkernel32.NewProc("GetVersionExW") - -// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexa -// TODO: use golang.org/x/sys/windows.OsVersionInfoEx (needs OSVersionInfoSize to be exported) -type osVersionInfoEx struct { - OSVersionInfoSize uint32 - MajorVersion uint32 - MinorVersion uint32 - BuildNumber uint32 - PlatformID uint32 - CSDVersion [128]uint16 - ServicePackMajor uint16 - ServicePackMinor uint16 - SuiteMask uint16 - ProductType byte - Reserve byte -} +// VER_NT_WORKSTATION, see https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexa +const verNTWorkstation = 0x00000001 // VER_NT_WORKSTATION // IsWindowsClient returns true if the SKU is client. It returns false on // Windows server, or if an error occurred when making the GetVersionExW // syscall. func IsWindowsClient() bool { - osviex := &osVersionInfoEx{OSVersionInfoSize: 284} - r1, _, err := procGetVersionExW.Call(uintptr(unsafe.Pointer(osviex))) - if r1 == 0 { - logrus.WithError(err).Warn("GetVersionExW failed - assuming server SKU") - return false - } - // VER_NT_WORKSTATION, see https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexa - const verNTWorkstation = 0x00000001 // VER_NT_WORKSTATION - return osviex.ProductType == verNTWorkstation + ver := windows.RtlGetVersion() + return ver != nil && ver.ProductType == verNTWorkstation }