code: func (d *Driver) generateDiskImage() (string, error) {
  	diskImage := d.ResolveStorePath("disk.vhd")
  	fixed := d.ResolveStorePath("fixed.vhd")
  
  	// Resizing vhds requires administrator privileges
  	// incase the user is only a hyper-v admin then create the disk at the target size to avoid resizing.
  	isWindowsAdmin, err := isWindowsAdministrator()
  	if err != nil {
  		return "", err
  	}
  	fixedDiskSize := "10MB"
  	if !isWindowsAdmin {
  		fixedDiskSize = toMb(d.DiskSize)
  	}
  
  	log.Infof("Creating VHD")
  	if err := cmd("Hyper-V\\New-VHD", "-Path", quote(fixed), "-SizeBytes", fixedDiskSize, "-Fixed"); err != nil {
  		return "", err
  	}
  
  	tarBuf, err := mcnutils.MakeDiskImage(d.publicSSHKeyPath())
  	if err != nil {
  		return "", err
  	}
  
  	file, err := os.OpenFile(fixed, os.O_WRONLY, 0644)
  	if err != nil {
  		return "", err
  	}
  	defer file.Close()
  
  	file.Seek(0, os.SEEK_SET)
  	_, err = file.Write(tarBuf.Bytes())
  	if err != nil {
  		return "", err
  	}
  	file.Close()
  
  	if err := cmd("Hyper-V\\Convert-VHD", "-Path", quote(fixed), "-DestinationPath", quote(diskImage), "-VHDType", "Dynamic", "-DeleteSource"); err != nil {
  		return "", err
  	}
  
  	if isWindowsAdmin {
  		if err := cmd("Hyper-V\\Resize-VHD", "-Path", quote(diskImage), "-SizeBytes", toMb(d.DiskSize)); err != nil {
  			return "", err
  		}
  	}
  
  	return diskImage, nil
  }
docs: // generateDiskImage creates a small fixed vhd, put the tar in, convert to dynamic, then resize