From 042a8f53ce82bbe081222da955159491e32146a0 Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Wed, 6 Apr 2016 15:52:57 +1000 Subject: [PATCH] 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 --- windows/dll_windows.go | 7 +++++++ windows/registry/zsyscall_windows.go | 4 ++-- windows/zsyscall_windows.go | 22 +++++++++++----------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/windows/dll_windows.go b/windows/dll_windows.go index 157d07e4..5f110679 100644 --- a/windows/dll_windows.go +++ b/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 { diff --git a/windows/registry/zsyscall_windows.go b/windows/registry/zsyscall_windows.go index f281a807..0fa24c6d 100644 --- a/windows/registry/zsyscall_windows.go +++ b/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") diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index d0388310..3ff8f525 100644 --- a/windows/zsyscall_windows.go +++ b/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")