diff options
-rw-r--r-- | driver/driver_windows.go | 30 |
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") |