aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-08-09 16:48:22 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-08-09 16:48:22 +0200
commitba148abf568a0b530e0a34bce3d9be14634c5ac8 (patch)
tree1bd85cf8d0c7d309dc9387e56f9334bf176a0f3a
parentembeddable-dll-service: mention that you need dlls in right place (diff)
downloadwireguard-windows-ba148abf568a0b530e0a34bce3d9be14634c5ac8.tar.xz
wireguard-windows-ba148abf568a0b530e0a34bce3d9be14634c5ac8.zip
driver: split 64bit arguments into two for 32bit machines
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--driver/driver_windows.go30
1 files changed, 20 insertions, 10 deletions
diff --git a/driver/driver_windows.go b/driver/driver_windows.go
index f5dda9f0..3c33749a 100644
--- a/driver/driver_windows.go
+++ b/driver/driver_windows.go
@@ -52,17 +52,27 @@ var (
procWireGuardSetAdapterLogging = modwireguard.NewProc("WireGuardSetAdapterLogging")
)
+func logMessage(level loggerLevel, timestamp uint64, msg *uint16) int {
+ // This is a filthy hack that breaks layers of encapsulation and also introduces
+ // an unfortunate dependency of this package.
+ if rl, ok := log.Default().Writer().(*ringlogger.Ringlogger); ok {
+ rl.WriteWithTimestamp([]byte(log.Default().Prefix()+windows.UTF16PtrToString(msg)), (int64(timestamp)-116444736000000000)*100)
+ } else {
+ log.Println(windows.UTF16PtrToString(msg))
+ }
+ return 0
+}
+
func setupLogger(dll *lazyDLL) {
- syscall.Syscall(dll.NewProc("WireGuardSetLogger").Addr(), 1, windows.NewCallback(func(level loggerLevel, timestamp uint64, msg *uint16) int {
- // This is a filthy hack that breaks layers of encapsulation and also introduces
- // an unfortunate dependency of this package.
- if rl, ok := log.Default().Writer().(*ringlogger.Ringlogger); ok {
- rl.WriteWithTimestamp([]byte(log.Default().Prefix()+windows.UTF16PtrToString(msg)), (int64(timestamp)-116444736000000000)*100)
- } else {
- log.Println(windows.UTF16PtrToString(msg))
- }
- return 0
- }), 0, 0)
+ var callback uintptr
+ if runtime.GOARCH == "386" || runtime.GOARCH == "arm" {
+ callback = windows.NewCallback(func(level loggerLevel, timestampLow, timestampHigh uint32, msg *uint16) int {
+ return logMessage(level, uint64(timestampHigh)<<32|uint64(timestampLow), msg)
+ })
+ } else if runtime.GOARCH == "amd64" || runtime.GOARCH == "arm64" {
+ callback = windows.NewCallback(logMessage)
+ }
+ syscall.Syscall(dll.NewProc("WireGuardSetLogger").Addr(), 1, callback, 0, 0)
}
var DefaultPool, _ = MakePool("WireGuard")