瀏覽代碼

windows: add NewLazySystemDLL and use it in zsyscall_windows.go

If we want new secure DLL approach to be adopted, we should make
conversion as simple as possible to explain and implement.
I think that replacing

syscall.NewLazyDLL(...) -> windows.NewLazySystemDLL(...)

is easier than

syscall.NewLazyDLL(...) -> &windows.LazyDLL{Name: ..., System: true}

So I propose we introduce convenience function NewLazySystemDLL.

$GOROOT/src/mksyscall_windows.go changes in the following CL.

Change-Id: If3432aff301c347cb355e4e837834696191b2219
Reviewed-on: https://go-review.googlesource.com/21592
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Alex Brainman 9 年之前
父節點
當前提交
042a8f53ce
共有 3 個文件被更改,包括 20 次插入13 次删除
  1. 7 0
      windows/dll_windows.go
  2. 2 2
      windows/registry/zsyscall_windows.go
  3. 11 11
      windows/zsyscall_windows.go

+ 7 - 0
windows/dll_windows.go

@@ -235,6 +235,13 @@ func NewLazyDLL(name string) *LazyDLL {
 	return &LazyDLL{Name: name}
 }
 
+// NewLazySystemDLL is like NewLazyDLL, but will only
+// search Windows System directory for the DLL if name is
+// a base name (like "advapi32.dll").
+func NewLazySystemDLL(name string) *LazyDLL {
+	return &LazyDLL{Name: name, System: true}
+}
+
 // A LazyProc implements access to a procedure inside a LazyDLL.
 // It delays the lookup until the Addr method is called.
 type LazyProc struct {

+ 2 - 2
windows/registry/zsyscall_windows.go

@@ -11,8 +11,8 @@ import (
 var _ unsafe.Pointer
 
 var (
-	modadvapi32 = &windows.LazyDLL{Name: "advapi32.dll", System: true}
-	modkernel32 = &windows.LazyDLL{Name: "kernel32.dll", System: true}
+	modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
+	modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
 
 	procRegCreateKeyExW           = modadvapi32.NewProc("RegCreateKeyExW")
 	procRegDeleteKeyW             = modadvapi32.NewProc("RegDeleteKeyW")

+ 11 - 11
windows/zsyscall_windows.go

@@ -10,17 +10,17 @@ import (
 var _ unsafe.Pointer
 
 var (
-	modadvapi32 = &LazyDLL{Name: "advapi32.dll", System: true}
-	modkernel32 = &LazyDLL{Name: "kernel32.dll", System: true}
-	modshell32  = &LazyDLL{Name: "shell32.dll", System: true}
-	modmswsock  = &LazyDLL{Name: "mswsock.dll", System: true}
-	modcrypt32  = &LazyDLL{Name: "crypt32.dll", System: true}
-	modws2_32   = &LazyDLL{Name: "ws2_32.dll", System: true}
-	moddnsapi   = &LazyDLL{Name: "dnsapi.dll", System: true}
-	modiphlpapi = &LazyDLL{Name: "iphlpapi.dll", System: true}
-	modsecur32  = &LazyDLL{Name: "secur32.dll", System: true}
-	modnetapi32 = &LazyDLL{Name: "netapi32.dll", System: true}
-	moduserenv  = &LazyDLL{Name: "userenv.dll", System: true}
+	modadvapi32 = NewLazySystemDLL("advapi32.dll")
+	modkernel32 = NewLazySystemDLL("kernel32.dll")
+	modshell32  = NewLazySystemDLL("shell32.dll")
+	modmswsock  = NewLazySystemDLL("mswsock.dll")
+	modcrypt32  = NewLazySystemDLL("crypt32.dll")
+	modws2_32   = NewLazySystemDLL("ws2_32.dll")
+	moddnsapi   = NewLazySystemDLL("dnsapi.dll")
+	modiphlpapi = NewLazySystemDLL("iphlpapi.dll")
+	modsecur32  = NewLazySystemDLL("secur32.dll")
+	modnetapi32 = NewLazySystemDLL("netapi32.dll")
+	moduserenv  = NewLazySystemDLL("userenv.dll")
 
 	procRegisterEventSourceW               = modadvapi32.NewProc("RegisterEventSourceW")
 	procDeregisterEventSource              = modadvapi32.NewProc("DeregisterEventSource")