Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Как получить физическую геометрию жесткого диска по 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 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.058 c
2-1161872990
Riply
2006-10-26 18:29
2006.11.12
Последовательный доступ к памяти


2-1162015160
Riply
2006-10-28 09:59
2006.11.12
Видимость переменных из private.


15-1161752978
nikolay_sch
2006-10-25 09:09
2006.11.12
Ошибка при инсталяции...


15-1161818872
RAM
2006-10-26 03:27
2006.11.12
Ассоциации с цифрами Помогите прогуглить ?


15-1161950797
Stanislav
2006-10-27 16:06
2006.11.12
Где можно взять карту