operatingsystem_windows.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package operatingsystem // import "github.com/docker/docker/pkg/parsers/operatingsystem"
  2. import (
  3. "fmt"
  4. "github.com/Microsoft/hcsshim/osversion"
  5. "golang.org/x/sys/windows/registry"
  6. )
  7. // GetOperatingSystem gets the name of the current operating system.
  8. func GetOperatingSystem() (string, error) {
  9. os, err := withCurrentVersionRegistryKey(func(key registry.Key) (os string, err error) {
  10. if os, _, err = key.GetStringValue("ProductName"); err != nil {
  11. return "", err
  12. }
  13. releaseId, _, err := key.GetStringValue("ReleaseId")
  14. if err != nil {
  15. return
  16. }
  17. os = fmt.Sprintf("%s Version %s", os, releaseId)
  18. buildNumber, _, err := key.GetStringValue("CurrentBuildNumber")
  19. if err != nil {
  20. return
  21. }
  22. ubr, _, err := key.GetIntegerValue("UBR")
  23. if err != nil {
  24. return
  25. }
  26. os = fmt.Sprintf("%s (OS Build %s.%d)", os, buildNumber, ubr)
  27. return
  28. })
  29. if os == "" {
  30. // Default return value
  31. os = "Unknown Operating System"
  32. }
  33. return os, err
  34. }
  35. func withCurrentVersionRegistryKey(f func(registry.Key) (string, error)) (string, error) {
  36. key, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
  37. if err != nil {
  38. return "", err
  39. }
  40. defer key.Close()
  41. return f(key)
  42. }
  43. // GetOperatingSystemVersion gets the version of the current operating system, as a string.
  44. func GetOperatingSystemVersion() (string, error) {
  45. return osversion.Get().ToString(), nil
  46. }
  47. // IsContainerized returns true if we are running inside a container.
  48. // No-op on Windows, always returns false.
  49. func IsContainerized() (bool, error) {
  50. return false, nil
  51. }