func()

in cli_tools/import_precheck/precheck/check_disks_windows.go [40:90]


func (c *DisksCheck) Run() (*Report, error) {
	r := &Report{name: c.GetName()}

	sysRoot := os.Getenv("SYSTEMROOT")
	rootDrive := sysRoot[:2]
	r.Info(fmt.Sprintf("Windows SYSTEMROOT: %s", sysRoot))

	// Open a volume handle to the System Root.
	var err error
	var f windows.Handle
	mode := uint32(windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE | windows.FILE_SHARE_DELETE)
	flags := uint32(windows.FILE_ATTRIBUTE_READONLY)
	s := "\\\\.\\" + rootDrive
	f, err = windows.CreateFile(windows.StringToUTF16Ptr(s), windows.GENERIC_READ, mode, nil, windows.OPEN_EXISTING, flags, 0)
	if err != nil {
		return nil, err
	}

	// Get the Physical Disk for the System Root.
	controlCode := uint32(5636096) // IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
	size := uint32(16 * 1024)
	vols := make(volumeDiskExtents, size)
	var bytesReturned uint32
	err = windows.DeviceIoControl(f, controlCode, nil, 0, &vols[0], size, &bytesReturned, nil)
	if err != nil {
		return nil, err
	}
	if vols.Len() != 1 {
		return nil, fmt.Errorf("could not identify physical drive for %s", rootDrive)
	}
	diskId := strconv.FormatUint(uint64(vols.Extent(0).DiskNumber), 10)

	// Check MBR on Physical Disk.
	s = "\\\\.\\PhysicalDrive" + diskId
	f, err = windows.CreateFile(windows.StringToUTF16Ptr(s), windows.GENERIC_READ, mode, nil, windows.OPEN_EXISTING, flags, 0)
	if err != nil {
		return nil, err
	}
	mbr := make([]byte, 512)
	err = windows.ReadFile(f, mbr, &bytesReturned, nil)
	if err != nil {
		return nil, err
	}
	if mbr[510] != 0x55 || mbr[511] != 0xaa {
		r.Fatal(fmt.Sprintf("MBR not detected on physical drive for %s (%s)", rootDrive, s))
	} else {
		r.Info(fmt.Sprintf("MBR detected on physical drive for %s (%s)", rootDrive, s))
	}

	return r, nil
}