author | Shawn Walker-Salas <shawn.walker@oracle.com> |
Thu, 14 Apr 2016 12:48:37 -0700 | |
changeset 5781 | ecbdf40c0a37 |
permissions | -rw-r--r-- |
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 |