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


Автор: byravchik 6.3.2009, 11:23
Доброго времени суток...
Помогите, пожалуйста, с такой проблемкой...
Как можно реализовать следующую задачу в дельфи:
Необходимо определить наличие в системе физических жестких дисков, их количество, тип интерфейса подключения(IDE или SATA), вывести  информацию о модели и объеме... и для каждого из этих дисков вывести данные о их температуре. smile 

Автор: Virtuals 6.3.2009, 13:38
byravchik, температура есть в SMART секторе, соответственно читай его, и смотри подсказку форума внизу страници
http://forum.vingrad.ru/forum/topic-250176/anchor-entry1804177/0.html#look

Автор: byravchik 6.3.2009, 14:11
Я бы не стал писать, если бы нашел информацию...
С температурой я более или менее разобрался...
В тех ссылках которые ты  привел размер жесткого определяться по томам, а мне необходимо определить размер всего жесткого... Так же там ничего не говориться о определении типа интерфейса подключения жесткого...:(

Автор: Virtuals 6.3.2009, 19:16
byravchik, 
а я бы не давал таких советов, непроверив!
http://forum.vingrad.ru/topic-40650.html

раз научился получать температуру, то наверное заметил что получение smart 2х сектоов по 512б и получение ID 1 сектор, есть одно и то же, только функция разная для винта. 
(и там и там используется прямой доступ к контроллеру винта, и подача ему комманд 
  IDE_ID_FUNCTION         = $EC;    // Returns ID sector for ATA.
  IDE_EXECUTE_SMART_FUNCTION = $B0;    // Performs SMART cmd.
) 
вот те структура

Код

  TIDEInfo = Record
    Config,             {General configuration bit-significant information}
    Cyls,               {Number of logical cylinders}
    Unused,             {Reserved}
    Heads,              {Number of logical heads}
    BPT,                {Number of unformatted bytes per track}
    BPS,                {Number of unformatted bytes per sector}
    SPT      : Word;    {Number of logical sectors per logical track}
    Vendor   : Array [0..2] of Word;       {Vendor specific}
    Serial   : Array [1..20] of Char;      {Serial number. 20 ASCii characters, 0000H=not specified}
    BufType,  {Buffer type}
    BufSize,  {Buffer size in 512 byte increments. 0000H=not specified}
    ECC      : Word; {# of ECC bytes avail on read/write long cmds. 0000H=not spec.}
    Revision : Array [1..8] of Char;  {Firmware revision. 8 ASCii characters. 0000H=not specified}
    Model    : Array [1..40] of Char; {Model number. 40 ASCii characters. 0000H=not specified}
    Features : Word;                  {Features information}
    DwordIO  : Word;                  {0001H=Can perform doubleword I/O}
    Capabil  : Word;                  {Capabilities}
    Reserved : Word;                  {Reserved}
    PIO      : Word;                  {PIO data transfer information}
    DMA      : Word;                  {DMA data transfer information}
    ExtValid : Word;                  {Extended data validation information}
    CurrCyls,                         {Number of current logical cylinders}
    CurrHeads,                        {Number of current logical heads}
    CurrSect : Word;                  {Number of current logical sectors per track}
    Capacity : LongInt;               {Current capacity in sectors}
    BlockMode : Word;     {Multiple sectors transfer information}
    LBACapacity : LongInt; {Total number of user addressable sectors. LBA mode only}
    SingleDMA : Word;      {Single word DMA transfer information}
    MultiDMA  : Word;      {Multiword DMA transfer information}
    AdvancedPIO : Word;    {Advanced PIO Transfer information}
    MinDMACycle : Word;    {Minimum Multiword DMA Transfer Cycle Time Per Word in nsecs}
    RecDMACycle : Word;    {Manufacturer Recommended Multiword DMA Transfer Cycle Time}
    MinPIOCycle : Word;    {Minimum PIO Transfer Cycle Time Without Flow Control in nsecs}
    MinIORDYPIOCycle : Word; {Minimum PIO Transfer Cycle Time With IORDY Flow Control in nsecs}
  end;


в примере это выглядело так
Код

TIdSector = packed record 
   wGenConfig : Word; 
   wNumCyls : Word; 
   wReserved : Word; 
   wNumHeads : Word; 
   wBytesPerTrack : Word; 
   wBytesPerSector : Word; 
   wSectorsPerTrack : Word; 
   wVendorUnique : Array[0..2] of Word; 
   sSerialNumber : Array[0..19] of Char; 
   wBufferType : Word; 
   wBufferSize : Word; 
   wECCSize : Word; 
   sFirmwareRev : Array[0..7] of Char; 
   sModelNumber : Array[0..39] of Char; 
   wMoreVendorUnique : Word; 
   wDoubleWordIO : Word; 
   wCapabilities : Word; 
   wReserved1 : Word; 
   wPIOTiming : Word; 
   wDMATiming : Word; 
   wBS : Word; 
   wNumCurrentCyls : Word; 
   wNumCurrentHeads : Word; 
   wNumCurrentSectorsPerTrack : Word; 
   ulCurrentSectorCapacity : ULONG; 
   wMultSectorStuff : Word; 
   ulTotalAddressableSectors : ULONG; 
   wSingleWordDMA : Word; 
   wMultiWordDMA : Word; 
   bReserved : Array[0..127] of Byte; 
 end;

на какие нить мысли наводит?
а если попробуеш для себя понять что SATA и PATA это не прсто набор букФ, а АТА- это достаточно стандартизированная спецификация ;) да найдеш себе пдф хотя-бы на ата5 (по всему инету валяется), думаю понимания добавит.

ЗЫ обрати внимание хотябы на это LBACapacity : LongInt; {Total number of user addressable sectors. LBA mode only}

Добавлено через 5 минут и 31 секунду

или тебе обязательно нужно, чтоб был текст
"размер винта можно взять из служебного сектора ID методом LBACapacity*512= сколько байтов в винте" smile 

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