From ba148abf568a0b530e0a34bce3d9be14634c5ac8 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 9 Aug 2021 16:48:22 +0200 Subject: driver: split 64bit arguments into two for 32bit machines Signed-off-by: Jason A. Donenfeld --- driver/driver_windows.go | 30 ++++++++++++++++++++---------- 1 file 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") -- cgit v1.2.3-59-g8ed1b