aboutsummaryrefslogtreecommitdiffstats
path: root/tun/wintun/memmod/memmod_windows_64.go
diff options
context:
space:
mode:
authorSimon Rozman <simon@rozman.si>2020-11-06 05:24:50 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-11-07 15:20:49 +0100
commit65e03a918274534015ca189bfadc33cbba9e3ec8 (patch)
treea7b84f08e1602324f22bf857ca9148194562e923 /tun/wintun/memmod/memmod_windows_64.go
parentwintun: migrate to wintun.dll API (diff)
downloadwireguard-go-65e03a918274534015ca189bfadc33cbba9e3ec8.tar.xz
wireguard-go-65e03a918274534015ca189bfadc33cbba9e3ec8.zip
wintun: load wintun.dll from RCDATA resource
Signed-off-by: Simon Rozman <simon@rozman.si> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'tun/wintun/memmod/memmod_windows_64.go')
-rw-r--r--tun/wintun/memmod/memmod_windows_64.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/tun/wintun/memmod/memmod_windows_64.go b/tun/wintun/memmod/memmod_windows_64.go
new file mode 100644
index 0000000..46ac677
--- /dev/null
+++ b/tun/wintun/memmod/memmod_windows_64.go
@@ -0,0 +1,36 @@
+// +build amd64 arm64
+
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2020 WireGuard LLC. All Rights Reserved.
+ */
+
+package memmod
+
+import (
+ "fmt"
+
+ "golang.org/x/sys/windows"
+)
+
+func (opthdr *IMAGE_OPTIONAL_HEADER) imageOffset() uintptr {
+ return uintptr(opthdr.ImageBase & 0xffffffff00000000)
+}
+
+func (module *Module) check4GBBoundaries(alignedImageSize uintptr) (err error) {
+ for (module.codeBase >> 32) < ((module.codeBase + alignedImageSize) >> 32) {
+ node := &addressList{
+ next: module.blockedMemory,
+ address: module.codeBase,
+ }
+ module.blockedMemory = node
+ module.codeBase, err = windows.VirtualAlloc(0,
+ alignedImageSize,
+ windows.MEM_RESERVE|windows.MEM_COMMIT,
+ windows.PAGE_READWRITE)
+ if err != nil {
+ return fmt.Errorf("Error allocating memory block: %v", err)
+ }
+ }
+ return
+}