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
}