github.com/ph/moby@v1.13.1/pkg/parsers/operatingsystem/operatingsystem_windows.go (about) 1 package operatingsystem 2 3 import ( 4 "syscall" 5 "unsafe" 6 ) 7 8 // See https://code.google.com/p/go/source/browse/src/pkg/mime/type_windows.go?r=d14520ac25bf6940785aabb71f5be453a286f58c 9 // for a similar sample 10 11 // GetOperatingSystem gets the name of the current operating system. 12 func GetOperatingSystem() (string, error) { 13 14 var h syscall.Handle 15 16 // Default return value 17 ret := "Unknown Operating System" 18 19 if err := syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, 20 syscall.StringToUTF16Ptr(`SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\`), 21 0, 22 syscall.KEY_READ, 23 &h); err != nil { 24 return ret, err 25 } 26 defer syscall.RegCloseKey(h) 27 28 var buf [1 << 10]uint16 29 var typ uint32 30 n := uint32(len(buf) * 2) // api expects array of bytes, not uint16 31 32 if err := syscall.RegQueryValueEx(h, 33 syscall.StringToUTF16Ptr("ProductName"), 34 nil, 35 &typ, 36 (*byte)(unsafe.Pointer(&buf[0])), 37 &n); err != nil { 38 return ret, err 39 } 40 ret = syscall.UTF16ToString(buf[:]) 41 42 return ret, nil 43 } 44 45 // IsContainerized returns true if we are running inside a container. 46 // No-op on Windows, always returns false. 47 func IsContainerized() (bool, error) { 48 return false, nil 49 }