Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Получение информации о HDD программно


Автор: Geniebal 18.5.2010, 08:46
Здравствуйте! Вопрос такой: как программно получить название хдд от производителя, его серийный номер, количество и имена разделов на хдд (т.е. метка тома или другими словами имена логических дисков в системе).
Обращаю Ваше внимание, что информация нужна именно о HDD, т.е. о самом железном накопителе, что стоит у Вас в системном блоке, а не о логических дисках, что показывает Вам система, типа "логический диск (D)" и тд.

З.Ы. Если есть у кого исходники - скинте плз, попробую разобраться.

Автор: bartram 18.5.2010, 09:05
http://base.vingrad.ru/view/419-Kak-poluchit-infu-o-zhestkom-diske

Автор: Geniebal 18.5.2010, 09:18
Уважаемый bartram! Я не зря написал "Обращаю Ваше внимание, что информация нужна именно о HDD, т.е. о самом железном накопителе, что стоит у Вас в системном блоке, а не о логических дисках, что показывает Вам система, типа "логический диск (D)" и тд.", т.кю в приведенном Вами примере описывается именно о ЛОГИЧЕСКИХ дисках. Список физических дисков я получаю следующим образом:
Код

function TForm1.FindPhisicalDisk: boolean; // вывод всех физ дисков в ComboBox
Var
i: integer;
hDrive: THandle;

DiskGeometry: TDiskGeometry;
junk: DWord;
TotalSize, TotalSectors: int64;   //Общий размер
begin
 for i := 0 to 255 do
    begin
      hDrive := CreateFile(PChar('\\.\PHYSICALDRIVE' + IntToStr(i)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0) ;
      if hDrive <> INVALID_HANDLE_VALUE then
        begin
            Result := DeviceIoControl(hDrive,IOCTL_DISK_GET_DRIVE_GEOMETRY,nil,0,
    @DiskGeometry,SizeOf(TDiskGeometry),junk,nil) and (junk = SizeOf(TDiskGeometry));
           if Result then
            begin
            TotalSize := DiskGeometry.TracksPerCylinder * DiskGeometry.SectorsPerTrack * DiskGeometry.Cylinders * DiskGeometry.BytesPerSector ;
            DriveComboBox.Items.Add(IntToStr(i)+ ' [' + IntToStr(TotalSize div 1073741824)+',' +IntToStr(TotalSize mod 1073741824) +' Гб]') ;
            TotalSectors:=DiskGeometry.Cylinders*DiskGeometry.TracksPerCylinder*DiskGeometry.SectorsPerTrack;
             end;
        end
        else
            break ;
     CloseHandle(hDrive) ;
    end ;
end;


Эта функция выводит как раз все HDD. Но как мне достать информацию о названии диска я так и не разобрался. 

З.Ы. Чтоб было понятнее что я хочу : панель управления -> администрирование -> управление компьютером -> запоминающие устройства -> управление дисками. 

Автор: bartram 18.5.2010, 09:23
Geniebal, вам нужна информация из S.M.A.R.T?

Автор: Geniebal 18.5.2010, 10:34
насколько я понял, smart работает с ide дисками. а если например raid-массив то уже не пашет. возможно я ошибаюсь. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)