type TDiskGeometry = packed record
Cylinders: Int64;
MediaType: DWORD;
TracksPerCylinder: DWORD;
SectorsPerTrack: DWORD;
BytesPerSector: DWORD;
end;
var
h: THandle; b: DWORD;
dg: TDiskGeometry;
h := CreateFile('\\.\PhysicalDrive0', GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY,
nil, 0, @dg, SizeOf(TDiskGeometry), b, nil);
ShowMessage(IntToStr(dg.Cylinders * dg.TracksPerCylinder * dg.SectorsPerTrack));
https://docs.microsoft.com/en-us/windows/desktop/api/ioapiset/nf-ioapiset-deviceiocontrol