authkeyWin.go 954 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //go:build windows
  2. // +build windows
  3. package ganserv
  4. import (
  5. "fmt"
  6. "os"
  7. "syscall"
  8. "golang.org/x/sys/windows"
  9. )
  10. //Use admin permission to read auth token on Windows
  11. func readAuthTokenAsAdmin() (string, error) {
  12. verb := "runas"
  13. exe, _ := os.Executable()
  14. cwd, _ := os.Getwd()
  15. authTokenPath := "C:\\ProgramData\\ZeroTier\\One\\authtoken.secret"
  16. args := fmt.Sprintf("cmd /C type %s", authTokenPath)
  17. verbPtr, _ := syscall.UTF16PtrFromString(verb)
  18. exePtr, _ := syscall.UTF16PtrFromString(exe)
  19. cwdPtr, _ := syscall.UTF16PtrFromString(cwd)
  20. argPtr, _ := syscall.UTF16PtrFromString(args)
  21. var showCmd int32 = 1 //SW_NORMAL
  22. err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd)
  23. if err != nil {
  24. return "", err
  25. }
  26. return "", nil
  27. }
  28. //Check if admin on Windows
  29. func isAdmin() bool {
  30. _, err := os.Open("\\\\.\\PHYSICALDRIVE0")
  31. if err != nil {
  32. return false
  33. }
  34. return true
  35. }