diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-07-18 10:48:52 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-07-18 10:50:22 +0200 |
commit | 8cbb1783e01795f7566cc0f8801b4ec0b9229127 (patch) | |
tree | d6e84255070cf4c7eed130598c87fe01c762db51 /ringlogger/dump.go | |
parent | ringlogger: handle wraparound on initial dump (diff) | |
download | wireguard-windows-8cbb1783e01795f7566cc0f8801b4ec0b9229127.tar.xz wireguard-windows-8cbb1783e01795f7566cc0f8801b4ec0b9229127.zip |
ringlogger: windows only
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'ringlogger/dump.go')
-rw-r--r-- | ringlogger/dump.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ringlogger/dump.go b/ringlogger/dump.go new file mode 100644 index 00000000..552410e5 --- /dev/null +++ b/ringlogger/dump.go @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + */ + +package ringlogger + +import ( + "io" + "os" + "path/filepath" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/registry" + "golang.zx2c4.com/wireguard/windows/conf" +) + +func DumpTo(out io.Writer, localSystem bool) error { + var path string + if !localSystem { + root, err := conf.RootDirectory() + if err != nil { + return err + } + path = filepath.Join(root, "log.bin") + } else { + k, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\S-1-5-18", registry.QUERY_VALUE) + if err != nil { + return err + } + defer k.Close() + + systemprofile, _, err := k.GetStringValue("ProfileImagePath") + if err != nil { + return err + } + systemprofile, err = registry.ExpandString(systemprofile) + if err != nil { + return err + } + path = filepath.Join(systemprofile, "AppData", "Local", "WireGuard", "log.bin") + } + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + mapping, err := windows.CreateFileMapping(windows.Handle(file.Fd()), nil, windows.PAGE_READONLY, 0, 0, nil) + if err != nil { + return err + } + rl, err := newRingloggerFromMappingHandle(mapping, "DMP", windows.FILE_MAP_READ) + if err != nil { + windows.CloseHandle(mapping) + return err + } + defer rl.Close() + _, err = rl.WriteTo(out) + if err != nil { + return err + } + return nil +} |