Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Как получить физическую геометрию жесткого диска по Win9x   Найти похожие ветки 

 
Arazel ©   (2006-06-28 12:52) [0]

Кто с этим встречался?


 
tesseract ©   (2006-06-28 13:54) [1]

гм......

LBA вроде не совсем физическая геометрия.  А win8x вроде вообще синусов не имеет.


 
Deka ©   (2006-06-28 14:13) [2]

Может как-нибудь до таблиц автоопределения биоса достучаться? Хотя наверное не получится...


 
han_malign ©   (2006-06-28 18:03) [3]

Примерно так:
type
  ExtGetDskFreSpcStruc = packed record
     ExtFree_Size   : Word;
     ExtFree_Level                     : Word;
     ExtFree_SectorsPerCluster         : LongWord;
     ExtFree_BytesPerSector            : LongWord;
     ExtFree_AvailableClusters         : LongWord;
     ExtFree_TotalClusters             : LongWord;
     ExtFree_AvailablePhysSectors      : LongWord;
     ExtFree_TotalPhysSectors          : LongWord;
     ExtFree_AvailableAllocationUnits  : LongWord;
     ExtFree_TotalAllocationUnits      : LongWord;
     ExtFree_Rsvd                      : array[0..1] of LongWord;
  end;

const
  VWIN32_DIOC_DOS_IOCTL  = 1; //Performs the specified MS-DOS device I/O control function (Interrupt 21h Function 4400h through 4411h).
  VWIN32_DIOC_DOS_INT25  = 2;
  VWIN32_DIOC_DOS_INT26  = 3;
  VWIN32_DIOC_DOS_INT13  = 4; //Performs Interrupt 13h commands.
  VWIN32_DIOC_DOS_DRIVEINFO  = 6;
  CARRY_FLAG = 1;

type
  TDIOCRegisters = packed record
     reg_EBX, reg_EDX, reg_ECX, reg_EAX,
     reg_EDI, reg_ESI, reg_Flags: LongWord;
  end;

function  GetDiskFreeInfo(DiskName : AnsiChar; var DiskInfo : ExtGetDskFreSpcStruc) : Boolean;
var
  OS  : TOSVersionInfo;
  r  : TDIOCRegisters;
  hDev, cb : LongWord;
  DiskStr  : String[4];
begin
  result := False;
  FillChar(DiskInfo, sizeof(DiskInfo), 0);
  DiskStr := DiskName + ":\"#0;
  OS.dwOSVersionInfoSize := sizeof(OS);
  GetVersionEx(OS);
  case OS.dwPlatformId of
     VER_PLATFORM_WIN32_WINDOWS : begin
        hDev := CreateFile("\\.\VWin32", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
           nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_DELETE_ON_CLOSE, 0
        );
        if hDev <> INVALID_HANDLE_VALUE then begin
           FillChar(r, sizeof(r), 0);
           with r do begin
              reg_EAX := $7303;             // Get_ExtFreeSpace
              reg_EDI := LongWord(@DiskInfo);
              reg_ECX := LongWord(sizeof(DiskInfo));
              reg_EDX := LongWord(@DiskStr[1]);

              Result := DeviceIOControl(hDev, VWIN32_DIOC_DOS_DRIVEINFO, @r, sizeof(r), @r, sizeof(r), cb, nil) and
                        (not BOOL(r.reg_Flags and CARRY_FLAG));
           end;
           CloseHandle(hDev);
        end;
     end;
     VER_PLATFORM_WIN32_NT : begin
        with DiskInfo do Result := Boolean(GetDiskFreeSpace(
           PChar(@DiskStr[1]), ExtFree_SectorsPerCluster, ExtFree_BytesPerSector,
                    ExtFree_AvailableClusters, ExtFree_TotalClusters
        ));

     end;
     else Exit;
  end;
end;


 
Arazel ©   (2006-06-29 06:08) [4]

Я нашел один вариянт но оно выводит по другому формату 8o

Test:
DiskEdit от "NU"
 Cylinders: 526, Heads: 255, Sectors: 63
 умножем все : 8450190

Мои:
 Cylinders: 8942, Heads: 15, Sectors: 63
 умножем все : 8450190

В конце тоже самое но! Геометрия разная... :(
Может здесь не хвотает по битного выделение?

han_malign ©   (28.06.06 18:03) [3]
Мне кажется что это работает только для логических дисков
но я проверю ;)


 
Arazel ©   (2006-06-29 09:29) [5]

han_malign ©   (28.06.06 18:03) [3]
И все таки под логические :(


 
Deka ©   (2006-06-29 10:41) [6]

Ниразу не видел дисков больше чем с шестью физическими головками. В смысле разобрал и посчитал.


 
Arazel ©   (2006-06-29 11:29) [7]

Удалено модератором


 
Izyum ©   (2006-06-29 17:58) [8]

PCHS вы не получите в общем случае никакими путями - максимум, что вам будет доступно - это LCHS. Для того что бы узнать _физическую_ геометрию накопителя вам нужно будет получить доступ к микропрограмме накопителя, что не возможно в обычном режиме работы НЖМД, т.е. для того что бы узнать PCHS накопитель придется переводить в технологический режим, что есть табу за семью печатями;)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
15-1161522130
PHPDeveloper
2006-10-22 17:02
2006.11.12
Кто сколько часов спит в день


3-1157979564
kaif
2006-09-11 16:59
2006.11.12
Как ограничить запрашиваемый SQL-набор в ADO


6-1142629607
Volf_555
2006-03-18 00:06
2006.11.12
Как узнать количество текущих соединений с Интернетом?


2-1161708285
Velimir
2006-10-24 20:44
2006.11.12
Как анализировать одно и тоже событие в разных местах


15-1161548226
brrrrr
2006-10-23 00:17
2006.11.12
Продажа бу ноутбука. Где бы продать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский