Конференция "WinAPI" » не верные значения DiskGeometry?
 
  • brother © (10.02.13 21:27) [0]
    смотрю код получения инфы с винта:
    http://citforum.ru/programming/delphi/disk_editor/

    выполняю:
     hFile := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(No)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
     if hFile = INVALID_HANDLE_VALUE then begin
       ShowMessage(SysErrorMessage(GetLastError));
       Exit;
     end;

     result:= DeviceIoControl(hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0, @Geometry, SizeOf(TDiskGeometry), bytesreturned, nil)
       and (bytesreturned = SizeOf(TDiskGeometry));


    заполняю структуру Geometry =
     TDiskGeometry = packed record // http://msdn.microsoft.com/en-us/library/windows/desktop/aa363972%28v=vs.85%29.aspx
       Cylinders: TLargeInteger;   // eiee?anoai oeeeia?ia
       MediaType: DWORD;           // oei iineoaey
       TracksPerCylinder: DWORD;   // ai?i?ae ia oeeeia?a
       SectorsPerTrack: DWORD;     // naeoi?ia ia ai?i?ea
       BytesPerSector: DWORD;      // aaeo a naeoi?a
     end;



    проверяю полученные данные:
       memo1.Lines.Add('TotalBytes: '+ IntToStr(
         drive.Geometry.Cylinders * drive.Geometry.TracksPerCylinder *
         drive.Geometry.SectorsPerTrack * drive.Geometry.BytesPerSector
       ) );


    и получаю БОЛЬЩЕ свободного места (по сравнению с виндой)!
    это как так может быть?
  • brother © (10.02.13 21:28) [1]
    Windows.GetDiskFreeSpaceEx('h:', FreeBytesAvailableToCaller, TotalNumberOfBytes, @TotalNumberOfFreeBytes);


    работает корректно
  • brother © (10.02.13 21:32) [2]
    керк, ау)
  • Игорь Шевченко © (11.02.13 00:06) [3]
    а каким образом геометрия относится к свободному месту ?
  • brother © (11.02.13 07:53) [4]
    ой, не свободного места, а общий объем диска!
  • брат Птибурдукова (11.02.13 08:46) [5]
    БОЛЬЩЕ насколько? Значительно или в пределах погрешности измерений? Что значит "по сравнению с виндой", где в винде смотришь? Выглядит так, быдто в винде ты смотришь размер тома, а программа выдаёт размер диска (и [1] тому порукой).
  • brother © (11.02.13 08:53) [6]
    > в пределах погрешности измерений

    о каких погрешностях речь?
  • brother © (11.02.13 08:56) [7]
    Drive: 0
    MediaType: FixedMedia
    Cylinders: 30 401
    TracksPerCylinder: 255
    SectorsPerTrack: 63
    BytesPerSector: 512
    TotalBytes: 250 056 737 280
    TotalBytes (GetDiskFreeSpaceEx): 53 875 548 160

    Drive: 2
    MediaType: RemovableMedia
    Cylinders: 976
    TracksPerCylinder: 255
    SectorsPerTrack: 63
    BytesPerSector: 512
    TotalBytes: 8 027 873 280
    TotalBytes (GetDiskFreeSpaceEx): 8 027 762 688
  • brother © (11.02.13 08:57) [8]
    > быдто в винде ты смотришь размер тома

    смотрю емкость...
  • brother © (11.02.13 09:03) [9]
    memo1.Lines.Add('TotalBytes: '+ Format('%.0n',
         [drive.Geometry.Cylinders * drive.Geometry.TracksPerCylinder *
         drive.Geometry.SectorsPerTrack * drive.Geometry.BytesPerSector *1.0])
       );

  • брат Птибурдукова (11.02.13 09:13) [10]

    > brother ©   (11.02.13 08:57) [8]
    ёмкость чего и где смотришь? я не из буквоедства спрашиваю.

    Ты же разницу между h: и \\.\PhysicalDriveN осознаёшь?
  • brother © (11.02.13 09:17) [11]
    > ёмкость чего и где смотришь?

    в винде свойсва диска-общие: емкость

    > Ты же разницу между h: и \\.\PhysicalDriveN осознаёшь?

    конечно, вот именно, что работаю с \\.\PhysicalDriveN следовательно должен увидеть ВСЕ
  • брат Птибурдукова (11.02.13 09:23) [12]

    > в винде свойсва диска-общие: емкость
    Так это ёмкость не диска, а тома.


    > конечно, вот именно, что работаю с \\.\PhysicalDriveN следовательно
    > должен увидеть ВСЕ
    Ну так он и увидел всё (и получаю БОЛЬЩЕ свободного места (по сравнению с виндой)!)

    Тома выравниваются по границе цилиндров, после МБР идёт 31 (кажется) пустой сектор. Кроме того, GetDiskFreeSpaceEx(), по идее, должен возвращать размеры без учёта структур файловой системы — так чего же удивляться, что "размер диска в винде" меньше, чем цилиндры*головки*секторы*512?
  • brother © (11.02.13 09:53) [13]
    а теперь осознал, что сравниваю разные объемы, спс...
  • brother © (11.02.13 09:55) [14]
    одни - логические, другие - физические...
  • брат Птибурдукова (11.02.13 10:14) [15]
    именно. удач. :-)
 
Конференция "WinAPI" » не верные значения DiskGeometry?
Есть новые Нет новых   [134431   +6][b:0][p:0.002]