Merge pull request #9588 from blueelvis/task/dont-autoselect-hyperv
Do not auto-select Hyper-V driver if session has no privilegepull/9723/head
commit
97c4856e13
|
@ -232,6 +232,7 @@ var (
|
||||||
DrvNotDetected = Kind{ID: "DRV_NOT_DETECTED", ExitCode: ExDriverNotFound}
|
DrvNotDetected = Kind{ID: "DRV_NOT_DETECTED", ExitCode: ExDriverNotFound}
|
||||||
DrvAsRoot = Kind{ID: "DRV_AS_ROOT", ExitCode: ExDriverPermission}
|
DrvAsRoot = Kind{ID: "DRV_AS_ROOT", ExitCode: ExDriverPermission}
|
||||||
DrvNeedsRoot = Kind{ID: "DRV_NEEDS_ROOT", ExitCode: ExDriverPermission}
|
DrvNeedsRoot = Kind{ID: "DRV_NEEDS_ROOT", ExitCode: ExDriverPermission}
|
||||||
|
DrvNeedsAdministrator = Kind{ID: "DRV_NEEDS_ADMINISTRATOR", ExitCode: ExDriverPermission}
|
||||||
|
|
||||||
GuestCacheLoad = Kind{ID: "GUEST_CACHE_LOAD", ExitCode: ExGuestError}
|
GuestCacheLoad = Kind{ID: "GUEST_CACHE_LOAD", ExitCode: ExGuestError}
|
||||||
GuestCert = Kind{ID: "GUEST_CERT", ExitCode: ExGuestError}
|
GuestCert = Kind{ID: "GUEST_CERT", ExitCode: ExGuestError}
|
||||||
|
|
|
@ -89,7 +89,7 @@ func status() registry.State {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, path, "@(Get-Wmiobject Win32_ComputerSystem).HypervisorPresent")
|
cmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive","@(Get-Wmiobject Win32_ComputerSystem).HypervisorPresent")
|
||||||
out, err := cmd.CombinedOutput()
|
out, err := cmd.CombinedOutput()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -105,5 +105,32 @@ func status() registry.State {
|
||||||
return registry.State{Installed: false, Running: false, Error: errorMessage, Fix: fixMessage, Doc: docURL}
|
return registry.State{Installed: false, Running: false, Error: errorMessage, Fix: fixMessage, Doc: docURL}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure user is either a Windows Administrator or a Hyper-V Administrator.
|
||||||
|
adminCheckCmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive",`@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")`)
|
||||||
|
adminCheckOut, adminCheckErr := adminCheckCmd.CombinedOutput()
|
||||||
|
|
||||||
|
if adminCheckErr != nil {
|
||||||
|
errorMessage := fmt.Errorf("%s returned %q", strings.Join(adminCheckCmd.Args, " "), adminCheckOut)
|
||||||
|
fixMessage := "Unable to determine current user's administrator privileges"
|
||||||
|
return registry.State{Installed: true, Running: false, Error: errorMessage, Fix: fixMessage}
|
||||||
|
}
|
||||||
|
|
||||||
|
hypervAdminCheckCmd := exec.CommandContext(ctx, path, "-NoProfile", "-NonInteractive", `@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(([System.Security.Principal.SecurityIdentifier]::new("S-1-5-32-578")))`)
|
||||||
|
hypervAdminCheckOut, hypervAdminCheckErr := hypervAdminCheckCmd.CombinedOutput()
|
||||||
|
|
||||||
|
if hypervAdminCheckErr != nil {
|
||||||
|
errorMessage := fmt.Errorf("%s returned %q", strings.Join(hypervAdminCheckCmd.Args, " "), hypervAdminCheckOut)
|
||||||
|
fixMessage := "Unable to determine current user's Hyper-V administrator privileges."
|
||||||
|
return registry.State{Installed: true, Running: false, Error: errorMessage, Fix: fixMessage}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (strings.TrimSpace(string(adminCheckOut)) != "True") && (strings.TrimSpace(string(hypervAdminCheckOut)) != "True") {
|
||||||
|
err := fmt.Errorf("Hyper-V requires Administrator privileges")
|
||||||
|
fixMessage := "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode."
|
||||||
|
return registry.State{Installed: true, Running: false, Error: err, Fix: fixMessage}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return registry.State{Installed: true, Healthy: true}
|
return registry.State{Installed: true, Healthy: true}
|
||||||
}
|
}
|
Loading…
Reference in New Issue