components/golang/patches/0076-runtime-syscall-only-search-for-Windows-DLLs-in-the-.patch
author Shawn Walker-Salas <shawn.walker@oracle.com>
Thu, 14 Apr 2016 12:48:37 -0700
changeset 5781 ecbdf40c0a37
permissions -rw-r--r--
23108116 problem in UTILITY/GOLANG 23108194 problem in UTILITY/GOLANG
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5781
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     1
From a241a38d20d96f65116aeabd7b9a28138a0b6860 Mon Sep 17 00:00:00 2001
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     2
From: Brad Fitzpatrick <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     3
Date: Fri, 25 Mar 2016 06:40:58 +0000
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     4
Subject: [PATCH 76/79] runtime, syscall: only search for Windows DLLs in the
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     5
 System32 directory
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     6
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     7
Make sure that for any DLL that Go uses itself, we only look for the
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     8
DLL in the Windows System32 directory, guarding against DLL preloading
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     9
attacks.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    10
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    11
(Unless the Windows version is ancient and LoadLibraryEx is
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    12
unavailable, in which case the user probably has bigger security
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    13
problems anyway.)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    14
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    15
This does not change the behavior of syscall.LoadLibrary or NewLazyDLL
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    16
if the DLL name is something unused by Go itself.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    17
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    18
This change also intentionally does not add any new API surface. Instead,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    19
x/sys is updated with a LoadLibraryEx function and LazyDLL.Flags in:
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    20
    https://golang.org/cl/21388
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    21
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    22
Updates #14959
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    23
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    24
Change-Id: I8d29200559cc19edf8dcf41dbdd39a389cd6aeb9
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    25
Reviewed-on: https://go-review.googlesource.com/21140
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    26
Reviewed-by: Russ Cox <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    27
Run-TryBot: Brad Fitzpatrick <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    28
TryBot-Result: Gobot Gobot <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    29
Reviewed-on: https://go-review.googlesource.com/21639
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    30
Run-TryBot: Andrew Gerrand <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    31
Reviewed-by: Brad Fitzpatrick <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    32
---
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    33
 src/cmd/dist/build.go                              |  1 +
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    34
 src/go/build/deps_test.go                          |  6 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    35
 src/internal/syscall/windows/registry/syscall.go   |  2 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    36
 .../syscall/windows/registry/zsyscall_windows.go   |  5 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    37
 src/internal/syscall/windows/syscall_windows.go    |  2 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    38
 src/internal/syscall/windows/sysdll/sysdll.go      | 28 +++++++
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    39
 src/internal/syscall/windows/zsyscall_windows.go   |  5 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    40
 src/runtime/export_windows_test.go                 |  4 +
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    41
 src/runtime/os1_windows.go                         | 30 ++++++-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    42
 src/runtime/syscall_windows.go                     | 35 ++++++++
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    43
 src/runtime/syscall_windows_test.go                | 93 ++++++++++++++++++++++
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    44
 src/syscall/dll_windows.go                         | 14 +++-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    45
 src/syscall/mksyscall_windows.go                   | 48 +++++++++--
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    46
 src/syscall/syscall_windows.go                     |  2 +-
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    47
 src/syscall/zsyscall_windows.go                    | 27 ++++---
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    48
 15 files changed, 271 insertions(+), 31 deletions(-)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    49
 create mode 100644 src/internal/syscall/windows/sysdll/sysdll.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    50
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    51
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    52
index 1658e16..60162ff 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    53
--- a/src/cmd/dist/build.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    54
+++ b/src/cmd/dist/build.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    55
@@ -861,6 +861,7 @@ var buildorder = []string{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    56
 	"sort",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    57
 	"container/heap",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    58
 	"encoding/base64",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    59
+	"internal/syscall/windows/sysdll",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    60
 	"syscall",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    61
 	"internal/syscall/windows/registry",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    62
 	"time",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    63
diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    64
index 7cea949..464bc6a 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    65
--- a/src/go/build/deps_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    66
+++ b/src/go/build/deps_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    67
@@ -128,10 +128,10 @@ var pkgDeps = map[string][]string{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    68
 	// End of linear dependency definitions.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    69
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    70
 	// Operating system access.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    71
-	"syscall":                           {"L0", "unicode/utf16"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    72
+	"syscall":                           {"L0", "internal/race", "internal/syscall/windows/sysdll", "unicode/utf16"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    73
 	"internal/syscall/unix":             {"L0", "syscall"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    74
-	"internal/syscall/windows":          {"L0", "syscall"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    75
-	"internal/syscall/windows/registry": {"L0", "syscall", "unicode/utf16"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    76
+	"internal/syscall/windows":          {"L0", "syscall", "internal/syscall/windows/sysdll"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    77
+	"internal/syscall/windows/registry": {"L0", "syscall", "internal/syscall/windows/sysdll", "unicode/utf16"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    78
 	"time":          {"L0", "syscall", "internal/syscall/windows/registry"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    79
 	"os":            {"L1", "os", "syscall", "time", "internal/syscall/windows"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    80
 	"path/filepath": {"L2", "os", "syscall"},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    81
diff --git a/src/internal/syscall/windows/registry/syscall.go b/src/internal/syscall/windows/registry/syscall.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    82
index 38e573f..67394d8 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    83
--- a/src/internal/syscall/windows/registry/syscall.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    84
+++ b/src/internal/syscall/windows/registry/syscall.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    85
@@ -8,7 +8,7 @@ package registry
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    86
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    87
 import "syscall"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    88
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    89
-//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    90
+//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go -systemdll syscall.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    91
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    92
 const (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    93
 	_REG_OPTION_NON_VOLATILE = 0
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    94
diff --git a/src/internal/syscall/windows/registry/zsyscall_windows.go b/src/internal/syscall/windows/registry/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    95
index 2b3de63..45a0ff7 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    96
--- a/src/internal/syscall/windows/registry/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    97
+++ b/src/internal/syscall/windows/registry/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    98
@@ -4,12 +4,13 @@ package registry
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    99
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   100
 import "unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   101
 import "syscall"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   102
+import "internal/syscall/windows/sysdll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   103
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   104
 var _ unsafe.Pointer
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   105
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   106
 var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   107
-	modadvapi32 = syscall.NewLazyDLL("advapi32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   108
-	modkernel32 = syscall.NewLazyDLL("kernel32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   109
+	modadvapi32 = syscall.NewLazyDLL(sysdll.Add("advapi32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   110
+	modkernel32 = syscall.NewLazyDLL(sysdll.Add("kernel32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   111
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   112
 	procRegCreateKeyExW           = modadvapi32.NewProc("RegCreateKeyExW")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   113
 	procRegDeleteKeyW             = modadvapi32.NewProc("RegDeleteKeyW")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   114
diff --git a/src/internal/syscall/windows/syscall_windows.go b/src/internal/syscall/windows/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   115
index dc8a916..c1cd4b2 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   116
--- a/src/internal/syscall/windows/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   117
+++ b/src/internal/syscall/windows/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   118
@@ -6,7 +6,7 @@ package windows
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   119
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   120
 import "syscall"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   121
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   122
-//go:generate go run ../../../syscall/mksyscall_windows.go -output zsyscall_windows.go syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   123
+//go:generate go run ../../../syscall/mksyscall_windows.go -output zsyscall_windows.go -systemdll syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   124
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   125
 const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   126
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   127
diff --git a/src/internal/syscall/windows/sysdll/sysdll.go b/src/internal/syscall/windows/sysdll/sysdll.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   128
new file mode 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   129
index 0000000..4e0018f
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   130
--- /dev/null
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   131
+++ b/src/internal/syscall/windows/sysdll/sysdll.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   132
@@ -0,0 +1,28 @@
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   133
+// Copyright 2016 The Go Authors. All rights reserved.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   134
+// Use of this source code is governed by a BSD-style
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   135
+// license that can be found in the LICENSE file.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   136
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   137
+// Package sysdll is an internal leaf package that records and reports
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   138
+// which Windows DLL names are used by Go itself. These DLLs are then
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   139
+// only loaded from the System32 directory. See Issue 14959.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   140
+package sysdll
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   141
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   142
+// IsSystemDLL reports whether the named dll key (a base name, like
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   143
+// "foo.dll") is a system DLL which should only be loaded from the
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   144
+// Windows SYSTEM32 directory.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   145
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   146
+// Filenames are case sensitive, but that doesn't matter because
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   147
+// the case registered with Add is also the same case used with
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   148
+// LoadDLL later.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   149
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   150
+// It has no associated mutex and should only be mutated serially
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   151
+// (currently: during init), and not concurrent with DLL loading.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   152
+var IsSystemDLL = map[string]bool{}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   153
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   154
+// Add notes that dll is a system32 DLL which should only be loaded
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   155
+// from the Windows SYSTEM32 directory. It returns its argument back,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   156
+// for ease of use in generated code.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   157
+func Add(dll string) string {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   158
+	IsSystemDLL[dll] = true
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   159
+	return dll
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   160
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   161
diff --git a/src/internal/syscall/windows/zsyscall_windows.go b/src/internal/syscall/windows/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   162
index c6f607a..f39ca0c 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   163
--- a/src/internal/syscall/windows/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   164
+++ b/src/internal/syscall/windows/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   165
@@ -4,12 +4,13 @@ package windows
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   166
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   167
 import "unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   168
 import "syscall"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   169
+import "internal/syscall/windows/sysdll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   170
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   171
 var _ unsafe.Pointer
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   172
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   173
 var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   174
-	modiphlpapi = syscall.NewLazyDLL("iphlpapi.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   175
-	modkernel32 = syscall.NewLazyDLL("kernel32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   176
+	modiphlpapi = syscall.NewLazyDLL(sysdll.Add("iphlpapi.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   177
+	modkernel32 = syscall.NewLazyDLL(sysdll.Add("kernel32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   178
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   179
 	procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   180
 	procGetComputerNameExW   = modkernel32.NewProc("GetComputerNameExW")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   181
diff --git a/src/runtime/export_windows_test.go b/src/runtime/export_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   182
index 61fcef9..3d51fd2 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   183
--- a/src/runtime/export_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   184
+++ b/src/runtime/export_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   185
@@ -7,3 +7,7 @@
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   186
 package runtime
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   187
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   188
 var TestingWER = &testingWER
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   189
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   190
+func LoadLibraryExStatus() (useEx, haveEx, haveFlags bool) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   191
+	return useLoadLibraryEx, _LoadLibraryExW != nil, _AddDllDirectory != nil
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   192
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   193
diff --git a/src/runtime/os1_windows.go b/src/runtime/os1_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   194
index d012034..ab378b0 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   195
--- a/src/runtime/os1_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   196
+++ b/src/runtime/os1_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   197
@@ -88,8 +88,11 @@ var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   198
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   199
 	// Following syscalls are only available on some Windows PCs.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   200
 	// We will load syscalls, if available, before using them.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   201
+	_AddDllDirectory,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   202
 	_AddVectoredContinueHandler,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   203
-	_GetQueuedCompletionStatusEx stdFunction
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   204
+	_GetQueuedCompletionStatusEx,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   205
+	_LoadLibraryExW,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   206
+	_ stdFunction
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   207
 )
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   208
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   209
 // Call a Windows function with stdcall conventions,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   210
@@ -110,8 +113,10 @@ func loadOptionalSyscalls() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   211
 		return stdFunction(unsafe.Pointer(f))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   212
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   213
 	if l != 0 {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   214
+		_AddDllDirectory = findfunc("AddDllDirectory")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   215
 		_AddVectoredContinueHandler = findfunc("AddVectoredContinueHandler")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   216
 		_GetQueuedCompletionStatusEx = findfunc("GetQueuedCompletionStatusEx")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   217
+		_LoadLibraryExW = findfunc("LoadLibraryExW")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   218
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   219
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   220
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   221
@@ -121,6 +126,11 @@ func getLoadLibrary() uintptr {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   222
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   223
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   224
 //go:nosplit
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   225
+func getLoadLibraryEx() uintptr {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   226
+	return uintptr(unsafe.Pointer(_LoadLibraryExW))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   227
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   228
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   229
+//go:nosplit
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   230
 func getGetProcAddress() uintptr {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   231
 	return uintptr(unsafe.Pointer(_GetProcAddress))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   232
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   233
@@ -139,6 +149,22 @@ const (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   234
 // in sys_windows_386.s and sys_windows_amd64.s
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   235
 func externalthreadhandler()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   236
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   237
+// When loading DLLs, we prefer to use LoadLibraryEx with
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   238
+// LOAD_LIBRARY_SEARCH_* flags, if available. LoadLibraryEx is not
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   239
+// available on old Windows, though, and the LOAD_LIBRARY_SEARCH_*
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   240
+// flags are not available on some versions of Windows without a
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   241
+// security patch.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   242
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   243
+// https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says:
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   244
+// "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   245
+// Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   246
+// systems that have KB2533623 installed. To determine whether the
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   247
+// flags are available, use GetProcAddress to get the address of the
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   248
+// AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   249
+// function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_*
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   250
+// flags can be used with LoadLibraryEx."
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   251
+var useLoadLibraryEx bool
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   252
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   253
 func osinit() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   254
 	asmstdcallAddr = unsafe.Pointer(funcPC(asmstdcall))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   255
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   256
@@ -146,6 +172,8 @@ func osinit() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   257
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   258
 	loadOptionalSyscalls()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   259
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   260
+	useLoadLibraryEx = (_LoadLibraryExW != nil && _AddDllDirectory != nil)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   261
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   262
 	disableWER()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   263
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   264
 	externalthreadhandlerp = funcPC(externalthreadhandler)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   265
diff --git a/src/runtime/syscall_windows.go b/src/runtime/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   266
index 8e069cd..4d8ee51 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   267
--- a/src/runtime/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   268
+++ b/src/runtime/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   269
@@ -88,6 +88,41 @@ func compileCallback(fn eface, cleanstack bool) (code uintptr) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   270
 	return callbackasmAddr(n)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   271
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   272
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   273
+const _LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   274
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   275
+//go:linkname syscall_loadsystemlibrary syscall.loadsystemlibrary
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   276
+//go:nosplit
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   277
+func syscall_loadsystemlibrary(filename *uint16) (handle, err uintptr) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   278
+	c := &getg().m.syscall
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   279
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   280
+	if useLoadLibraryEx {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   281
+		c.fn = getLoadLibraryEx()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   282
+		c.n = 3
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   283
+		args := struct {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   284
+			lpFileName *uint16
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   285
+			hFile      uintptr // always 0
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   286
+			flags      uint32
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   287
+		}{filename, 0, _LOAD_LIBRARY_SEARCH_SYSTEM32}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   288
+		c.args = uintptr(noescape(unsafe.Pointer(&args)))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   289
+	} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   290
+		// User is on Windows XP or something ancient.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   291
+		// The caller wanted to only load the filename DLL
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   292
+		// from the System32 directory but that facility
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   293
+		// doesn't exist, so just load it the normal way. This
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   294
+		// is a potential security risk, but so is Windows XP.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   295
+		c.fn = getLoadLibrary()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   296
+		c.n = 1
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   297
+		c.args = uintptr(noescape(unsafe.Pointer(&filename)))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   298
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   299
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   300
+	cgocall(asmstdcallAddr, unsafe.Pointer(c))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   301
+	handle = c.r1
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   302
+	if handle == 0 {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   303
+		err = c.err
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   304
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   305
+	return
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   306
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   307
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   308
 //go:linkname syscall_loadlibrary syscall.loadlibrary
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   309
 //go:nosplit
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   310
 func syscall_loadlibrary(filename *uint16) (handle, err uintptr) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   311
diff --git a/src/runtime/syscall_windows_test.go b/src/runtime/syscall_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   312
index 677eb5f..ee449f9 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   313
--- a/src/runtime/syscall_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   314
+++ b/src/runtime/syscall_windows_test.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   315
@@ -6,6 +6,8 @@ package runtime_test
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   316
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   317
 import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   318
 	"fmt"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   319
+	"internal/syscall/windows/sysdll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   320
+	"internal/testenv"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   321
 	"io/ioutil"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   322
 	"os"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   323
 	"os/exec"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   324
@@ -640,3 +642,94 @@ uintptr_t cfunc(callback f, uintptr_t n) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   325
 		t.Errorf("got %d want %d", got, want)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   326
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   327
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   328
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   329
+// See Issue 14959
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   330
+func TestDLLPreloadMitigation(t *testing.T) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   331
+	if _, err := exec.LookPath("gcc"); err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   332
+		t.Skip("skipping test: gcc is missing")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   333
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   334
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   335
+	dir0, err := os.Getwd()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   336
+	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   337
+		t.Fatal(err)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   338
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   339
+	defer os.Chdir(dir0)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   340
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   341
+	const src = `
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   342
+#include <stdint.h>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   343
+#include <windows.h>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   344
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   345
+uintptr_t cfunc() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   346
+   SetLastError(123);
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   347
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   348
+`
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   349
+	tmpdir, err := ioutil.TempDir("", "TestDLLPreloadMitigation")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   350
+	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   351
+		t.Fatal("TempDir failed: ", err)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   352
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   353
+	defer os.RemoveAll(tmpdir)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   354
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   355
+	srcname := "nojack.c"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   356
+	err = ioutil.WriteFile(filepath.Join(tmpdir, srcname), []byte(src), 0)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   357
+	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   358
+		t.Fatal(err)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   359
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   360
+	name := "nojack.dll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   361
+	cmd := exec.Command("gcc", "-shared", "-s", "-Werror", "-o", name, srcname)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   362
+	cmd.Dir = tmpdir
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   363
+	out, err := cmd.CombinedOutput()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   364
+	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   365
+		t.Fatalf("failed to build dll: %v - %v", err, string(out))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   366
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   367
+	dllpath := filepath.Join(tmpdir, name)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   368
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   369
+	dll := syscall.MustLoadDLL(dllpath)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   370
+	dll.MustFindProc("cfunc")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   371
+	dll.Release()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   372
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   373
+	// Get into the directory with the DLL we'll load by base name
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   374
+	// ("nojack.dll") Think of this as the user double-clicking an
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   375
+	// installer from their Downloads directory where a browser
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   376
+	// silently downloaded some malicious DLLs.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   377
+	os.Chdir(tmpdir)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   378
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   379
+	// First before we can load a DLL from the current directory,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   380
+	// loading it only as "nojack.dll", without an absolute path.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   381
+	delete(sysdll.IsSystemDLL, name) // in case test was run repeatedly
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   382
+	dll, err = syscall.LoadDLL(name)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   383
+	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   384
+		t.Fatalf("failed to load %s by base name before sysdll registration: %v", name, err)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   385
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   386
+	dll.Release()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   387
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   388
+	// And now verify that if we register it as a system32-only
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   389
+	// DLL, the implicit loading from the current directory no
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   390
+	// longer works.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   391
+	sysdll.IsSystemDLL[name] = true
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   392
+	dll, err = syscall.LoadDLL(name)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   393
+	if err == nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   394
+		dll.Release()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   395
+		if wantLoadLibraryEx() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   396
+			t.Fatalf("Bad: insecure load of DLL by base name %q before sysdll registration: %v", name, err)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   397
+		}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   398
+		t.Skip("insecure load of DLL, but expected")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   399
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   400
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   401
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   402
+// wantLoadLibraryEx reports whether we expect LoadLibraryEx to work for tests.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   403
+func wantLoadLibraryEx() bool {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   404
+	return testenv.Builder() == "windows-amd64-gce" || testenv.Builder() == "windows-386-gce"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   405
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   406
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   407
+func TestLoadLibraryEx(t *testing.T) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   408
+	use, have, flags := runtime.LoadLibraryExStatus()
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   409
+	if use {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   410
+		return // success.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   411
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   412
+	if wantLoadLibraryEx() {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   413
+		t.Fatalf("Expected LoadLibraryEx+flags to be available. (LoadLibraryEx=%v; flags=%v)",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   414
+			have, flags)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   415
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   416
+	t.Skipf("LoadLibraryEx not usable, but not expected. (LoadLibraryEx=%v; flags=%v)",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   417
+		have, flags)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   418
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   419
diff --git a/src/syscall/dll_windows.go b/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   420
index c157e6d..ec8d85b 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   421
--- a/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   422
+++ b/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   423
@@ -5,6 +5,7 @@
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   424
 package syscall
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   425
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   426
 import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   427
+	"internal/syscall/windows/sysdll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   428
 	"sync"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   429
 	"sync/atomic"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   430
 	"unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   431
@@ -26,6 +27,7 @@ func Syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 u
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   432
 func Syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 uintptr) (r1, r2 uintptr, err Errno)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   433
 func Syscall15(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2 uintptr, err Errno)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   434
 func loadlibrary(filename *uint16) (handle uintptr, err Errno)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   435
+func loadsystemlibrary(filename *uint16) (handle uintptr, err Errno)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   436
 func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err Errno)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   437
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   438
 // A DLL implements access to a single DLL.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   439
@@ -34,13 +36,19 @@ type DLL struct {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   440
 	Handle Handle
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   441
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   442
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   443
-// LoadDLL loads DLL file into memory.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   444
-func LoadDLL(name string) (dll *DLL, err error) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   445
+// LoadDLL loads the named DLL file into memory.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   446
+func LoadDLL(name string) (*DLL, error) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   447
 	namep, err := UTF16PtrFromString(name)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   448
 	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   449
 		return nil, err
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   450
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   451
-	h, e := loadlibrary(namep)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   452
+	var h uintptr
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   453
+	var e Errno
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   454
+	if sysdll.IsSystemDLL[name] {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   455
+		h, e = loadsystemlibrary(namep)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   456
+	} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   457
+		h, e = loadlibrary(namep)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   458
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   459
 	if e != 0 {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   460
 		return nil, &DLLError{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   461
 			Err:     e,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   462
diff --git a/src/syscall/mksyscall_windows.go b/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   463
index 622272a..546cb0d 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   464
--- a/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   465
+++ b/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   466
@@ -57,6 +57,7 @@ import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   467
 	"io/ioutil"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   468
 	"log"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   469
 	"os"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   470
+	"sort"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   471
 	"strconv"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   472
 	"strings"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   473
 	"text/template"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   474
@@ -65,6 +66,8 @@ import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   475
 var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   476
 	filename       = flag.String("output", "", "output file name (standard output if omitted)")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   477
 	printTraceFlag = flag.Bool("trace", false, "generate print statement after every syscall")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   478
+	systemDLL      = flag.Bool("systemdll", false, "whether all DLLs should be loaded from the Windows system directory")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   479
+	sysRepo        = flag.Bool("xsys", false, "whether this code is for the x/sys subrepo")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   480
 )
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   481
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   482
 func trim(s string) string {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   483
@@ -593,8 +596,14 @@ func (f *Fn) HelperName() string {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   484
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   485
 // Source files and functions.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   486
 type Source struct {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   487
-	Funcs []*Fn
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   488
-	Files []string
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   489
+	Funcs   []*Fn
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   490
+	Files   []string
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   491
+	Imports []string
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   492
+}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   493
+
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   494
+func (src *Source) Import(pkg string) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   495
+	src.Imports = append(src.Imports, pkg)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   496
+	sort.Strings(src.Imports)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   497
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   498
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   499
 // ParseFiles parses files listed in fs and extracts all syscall
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   500
@@ -604,6 +613,12 @@ func ParseFiles(fs []string) (*Source, error) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   501
 	src := &Source{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   502
 		Funcs: make([]*Fn, 0),
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   503
 		Files: make([]string, 0),
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   504
+		Imports: []string{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   505
+			"unsafe",
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   506
+		},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   507
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   508
+	if *systemDLL {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   509
+		src.Import("internal/syscall/windows/sysdll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   510
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   511
 	for _, file := range fs {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   512
 		if err := src.ParseFile(file); err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   513
@@ -676,9 +691,30 @@ func (src *Source) ParseFile(path string) error {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   514
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   515
 // Generate output source file from a source set src.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   516
 func (src *Source) Generate(w io.Writer) error {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   517
+	if *sysRepo && packageName != "windows" {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   518
+		src.Import("golang.org/x/sys/windows")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   519
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   520
+	if packageName != "syscall" {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   521
+		src.Import("syscall")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   522
+	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   523
 	funcMap := template.FuncMap{
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   524
 		"packagename": packagename,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   525
 		"syscalldot":  syscalldot,
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   526
+		"newlazydll": func(dll string) string {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   527
+			arg := "\"" + dll + ".dll\""
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   528
+			if *systemDLL {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   529
+				arg = "sysdll.Add(" + arg + ")"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   530
+			}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   531
+			if *sysRepo {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   532
+				if packageName == "windows" {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   533
+					return "&LazyDLL{Name: " + arg + ", Flags: LoadLibrarySearchSystem32}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   534
+				} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   535
+					return "&windows.LazyDLL{Name: " + arg + ", Flags: windows.LoadLibrarySearchSystem32}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   536
+				}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   537
+			} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   538
+				return syscalldot() + "NewLazyDLL(" + arg + ")"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   539
+			}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   540
+		},
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   541
 	}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   542
 	t := template.Must(template.New("main").Funcs(funcMap).Parse(srcTemplate))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   543
 	err := t.Execute(w, src)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   544
@@ -733,8 +769,10 @@ const srcTemplate = `
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   545
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   546
 package {{packagename}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   547
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   548
-import "unsafe"{{if syscalldot}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   549
-import "syscall"{{end}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   550
+import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   551
+{{range .Imports}}"{{.}}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   552
+{{end}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   553
+)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   554
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   555
 var _ unsafe.Pointer
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   556
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   557
@@ -746,7 +784,7 @@ var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   558
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   559
 {{/* help functions */}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   560
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   561
-{{define "dlls"}}{{range .DLLs}}	mod{{.}} = {{syscalldot}}NewLazyDLL("{{.}}.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   562
+{{define "dlls"}}{{range .DLLs}}	mod{{.}} = {{newlazydll .}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   563
 {{end}}{{end}}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   564
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   565
 {{define "funcnames"}}{{range .Funcs}}	proc{{.DLLFuncName}} = mod{{.DLLName}}.NewProc("{{.DLLFuncName}}")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   566
diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   567
index 1006a9b..049dc82 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   568
--- a/src/syscall/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   569
+++ b/src/syscall/syscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   570
@@ -13,7 +13,7 @@ import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   571
 	"unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   572
 )
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   573
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   574
-//go:generate go run mksyscall_windows.go -output zsyscall_windows.go syscall_windows.go security_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   575
+//go:generate go run mksyscall_windows.go -systemdll -output zsyscall_windows.go syscall_windows.go security_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   576
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   577
 type Handle uintptr
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   578
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   579
diff --git a/src/syscall/zsyscall_windows.go b/src/syscall/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   580
index 7879ba1..bb3e892 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   581
--- a/src/syscall/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   582
+++ b/src/syscall/zsyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   583
@@ -2,22 +2,25 @@
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   584
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   585
 package syscall
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   586
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   587
-import "unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   588
+import (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   589
+	"internal/syscall/windows/sysdll"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   590
+	"unsafe"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   591
+)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   592
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   593
 var _ unsafe.Pointer
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   594
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   595
 var (
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   596
-	modkernel32 = NewLazyDLL("kernel32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   597
-	modadvapi32 = NewLazyDLL("advapi32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   598
-	modshell32  = NewLazyDLL("shell32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   599
-	modmswsock  = NewLazyDLL("mswsock.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   600
-	modcrypt32  = NewLazyDLL("crypt32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   601
-	modws2_32   = NewLazyDLL("ws2_32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   602
-	moddnsapi   = NewLazyDLL("dnsapi.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   603
-	modiphlpapi = NewLazyDLL("iphlpapi.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   604
-	modsecur32  = NewLazyDLL("secur32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   605
-	modnetapi32 = NewLazyDLL("netapi32.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   606
-	moduserenv  = NewLazyDLL("userenv.dll")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   607
+	modkernel32 = NewLazyDLL(sysdll.Add("kernel32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   608
+	modadvapi32 = NewLazyDLL(sysdll.Add("advapi32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   609
+	modshell32  = NewLazyDLL(sysdll.Add("shell32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   610
+	modmswsock  = NewLazyDLL(sysdll.Add("mswsock.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   611
+	modcrypt32  = NewLazyDLL(sysdll.Add("crypt32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   612
+	modws2_32   = NewLazyDLL(sysdll.Add("ws2_32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   613
+	moddnsapi   = NewLazyDLL(sysdll.Add("dnsapi.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   614
+	modiphlpapi = NewLazyDLL(sysdll.Add("iphlpapi.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   615
+	modsecur32  = NewLazyDLL(sysdll.Add("secur32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   616
+	modnetapi32 = NewLazyDLL(sysdll.Add("netapi32.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   617
+	moduserenv  = NewLazyDLL(sysdll.Add("userenv.dll"))
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   618
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   619
 	procGetLastError                       = modkernel32.NewProc("GetLastError")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   620
 	procLoadLibraryW                       = modkernel32.NewProc("LoadLibraryW")
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   621
-- 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   622
2.7.4
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
   623