// +build windows package admin import ( "fmt" "os" "golang.org/x/sys/windows" ) // IsAdmin проверяет, запущено ли приложение с правами администратора func IsAdmin() bool { var sid *windows.SID // Получаем SID группы администраторов err := windows.AllocateAndInitializeSid( &windows.SECURITY_NT_AUTHORITY, 2, windows.SECURITY_BUILTIN_DOMAIN_RID, windows.DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &sid) if err != nil { return false } defer windows.FreeSid(sid) // Получаем текущий токен процесса token := windows.Token(0) // Проверяем членство в группе member, err := token.IsMember(sid) if err != nil { return false } return member } // RequireAdmin проверяет права администратора и завершает программу, если их нет func RequireAdmin() { if !IsAdmin() { fmt.Println("╔════════════════════════════════════════════════════════════╗") fmt.Println("║ ⚠ ТРЕБУЮТСЯ ПРАВА АДМИНИСТРАТОРА ║") fmt.Println("╚════════════════════════════════════════════════════════════╝") fmt.Println() fmt.Println("Это приложение требует прав администратора для работы с VPN.") fmt.Println() fmt.Println("Пожалуйста, запустите приложение от имени администратора:") fmt.Println(" 1. Щелкните правой кнопкой мыши на vpn-client-cli.exe") fmt.Println(" 2. Выберите 'Запуск от имени администратора'") fmt.Println() fmt.Println("Нажмите Enter для выхода...") fmt.Scanln() os.Exit(1) } }