github.com/campoy/docker@v1.8.0-rc1/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 func GetOperatingSystem() (string, error) { 12 13 var h syscall.Handle 14 15 // Default return value 16 ret := "Unknown Operating System" 17 18 if err := syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, 19 syscall.StringToUTF16Ptr(`SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\`), 20 0, 21 syscall.KEY_READ, 22 &h); err != nil { 23 return ret, err 24 } 25 defer syscall.RegCloseKey(h) 26 27 var buf [1 << 10]uint16 28 var typ uint32 29 n := uint32(len(buf) * 2) // api expects array of bytes, not uint16 30 31 if err := syscall.RegQueryValueEx(h, 32 syscall.StringToUTF16Ptr("ProductName"), 33 nil, 34 &typ, 35 (*byte)(unsafe.Pointer(&buf[0])), 36 &n); err != nil { 37 return ret, err 38 } 39 ret = syscall.UTF16ToString(buf[:]) 40 41 return ret, nil 42 } 43 44 // No-op on Windows 45 func IsContainerized() (bool, error) { 46 return false, nil 47 }