github.com/rish1988/moby@v25.0.2+incompatible/pkg/parsers/kernel/kernel_windows.go (about) 1 package kernel // import "github.com/docker/docker/pkg/parsers/kernel" 2 3 import ( 4 "fmt" 5 6 "golang.org/x/sys/windows" 7 "golang.org/x/sys/windows/registry" 8 ) 9 10 // VersionInfo holds information about the kernel. 11 type VersionInfo struct { 12 kvi string // Version of the kernel (e.g. 6.1.7601.17592 -> 6) 13 major int // Major part of the kernel version (e.g. 6.1.7601.17592 -> 1) 14 minor int // Minor part of the kernel version (e.g. 6.1.7601.17592 -> 7601) 15 build int // Build number of the kernel version (e.g. 6.1.7601.17592 -> 17592) 16 } 17 18 func (k *VersionInfo) String() string { 19 return fmt.Sprintf("%d.%d %d (%s)", k.major, k.minor, k.build, k.kvi) 20 } 21 22 // GetKernelVersion gets the current kernel version. 23 func GetKernelVersion() (*VersionInfo, error) { 24 KVI := &VersionInfo{"Unknown", 0, 0, 0} 25 26 k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) 27 if err != nil { 28 return KVI, err 29 } 30 defer k.Close() 31 32 blex, _, err := k.GetStringValue("BuildLabEx") 33 if err != nil { 34 return KVI, err 35 } 36 KVI.kvi = blex 37 38 // Important - dockerd.exe MUST be manifested for this API to return 39 // the correct information. 40 dwVersion, err := windows.GetVersion() 41 if err != nil { 42 return KVI, err 43 } 44 45 KVI.major = int(dwVersion & 0xFF) 46 KVI.minor = int((dwVersion & 0xFF00) >> 8) 47 KVI.build = int((dwVersion & 0xFFFF0000) >> 16) 48 49 return KVI, nil 50 }