瀏覽代碼

Windows: Move kernel_windows to use golang registry functions

Signed-off-by: John Howard <jhoward@microsoft.com>
John Howard 7 年之前
父節點
當前提交
29f93c4bc7
共有 2 個文件被更改,包括 10 次插入27 次删除
  1. 9 26
      pkg/parsers/kernel/kernel_windows.go
  2. 1 1
      pkg/parsers/operatingsystem/operatingsystem_windows.go

+ 9 - 26
pkg/parsers/kernel/kernel_windows.go

@@ -2,9 +2,9 @@ package kernel // import "github.com/docker/docker/pkg/parsers/kernel"
 
 
 import (
 import (
 	"fmt"
 	"fmt"
-	"unsafe"
 
 
 	"golang.org/x/sys/windows"
 	"golang.org/x/sys/windows"
+	"golang.org/x/sys/windows/registry"
 )
 )
 
 
 // VersionInfo holds information about the kernel.
 // VersionInfo holds information about the kernel.
@@ -22,41 +22,24 @@ func (k *VersionInfo) String() string {
 // GetKernelVersion gets the current kernel version.
 // GetKernelVersion gets the current kernel version.
 func GetKernelVersion() (*VersionInfo, error) {
 func GetKernelVersion() (*VersionInfo, error) {
 
 
-	var (
-		h         windows.Handle
-		dwVersion uint32
-		err       error
-	)
-
 	KVI := &VersionInfo{"Unknown", 0, 0, 0}
 	KVI := &VersionInfo{"Unknown", 0, 0, 0}
 
 
-	if err = windows.RegOpenKeyEx(windows.HKEY_LOCAL_MACHINE,
-		windows.StringToUTF16Ptr(`SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\`),
-		0,
-		windows.KEY_READ,
-		&h); err != nil {
+	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
+	if err != nil {
 		return KVI, err
 		return KVI, err
 	}
 	}
-	defer windows.RegCloseKey(h)
-
-	var buf [1 << 10]uint16
-	var typ uint32
-	n := uint32(len(buf) * 2) // api expects array of bytes, not uint16
+	defer k.Close()
 
 
-	if err = windows.RegQueryValueEx(h,
-		windows.StringToUTF16Ptr("BuildLabEx"),
-		nil,
-		&typ,
-		(*byte)(unsafe.Pointer(&buf[0])),
-		&n); err != nil {
+	blex, _, err := k.GetStringValue("BuildLabEx")
+	if err != nil {
 		return KVI, err
 		return KVI, err
 	}
 	}
-
-	KVI.kvi = windows.UTF16ToString(buf[:])
+	KVI.kvi = blex
 
 
 	// Important - docker.exe MUST be manifested for this API to return
 	// Important - docker.exe MUST be manifested for this API to return
 	// the correct information.
 	// the correct information.
-	if dwVersion, err = windows.GetVersion(); err != nil {
+	dwVersion, err := windows.GetVersion()
+	if err != nil {
 		return KVI, err
 		return KVI, err
 	}
 	}
 
 

+ 1 - 1
pkg/parsers/operatingsystem/operatingsystem_windows.go

@@ -12,7 +12,7 @@ func GetOperatingSystem() (string, error) {
 	// Default return value
 	// Default return value
 	ret := "Unknown Operating System"
 	ret := "Unknown Operating System"
 
 
-	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\WIndows NT\CurrentVersion`, registry.QUERY_VALUE)
+	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
 	if err != nil {
 	if err != nil {
 		return ret, err
 		return ret, err
 	}
 	}