// GetDebugInfo returns general debug info about the current process. func GetDebugInfo() (*DebugInfo, error) { h, err := windows.GetCurrentProcess() if err != nil { return nil, err } var token syscall.Token err = syscall.OpenProcessToken(syscall.Handle(h), syscall.TOKEN_QUERY, &token) if err != nil { return nil, err } privs, err := GetTokenPrivileges(token) if err != nil { return nil, err } user, err := GetTokenUser(token) if err != nil { return nil, err } return &DebugInfo{ User: user, ProcessPrivs: privs, OSVersion: GetWindowsVersion(), Arch: runtime.GOARCH, NumCPU: runtime.NumCPU(), }, nil }
// EnableProcessPrivileges enables privileges globally for the process. func EnableProcessPrivileges(names []string) error { privileges, err := mapPrivileges(names) if err != nil { return err } p, _ := windows.GetCurrentProcess() var token windows.Token err = windows.OpenProcessToken(p, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token) if err != nil { return err } defer token.Close() return adjustPrivileges(token, privileges) }