Информация о логических дисках

Материал из DRKB

Информация о логических дисках[править | править код]

Теперь об информации о дисках:

исчерпывающую информацию по этому поводу дает функция GetVolumeInformation, посмотри help, там все понятно (там и серийный номер диска, и тип файловой системы, и прочее и прочее).

Вот параметры FileSysFlags:

FS_CASE_IS_PRESERVED - (при записи на диск сохраняется регистр букв в его имени)
FS_CASE_SENSITIVE - (поддерживается поиск файлов с учетом регистра букв)
FS_UNICODE_STORED_ON_DISK - (поддерживается сохранение имен файлов в UniCode)
FS_PERSISTENT_ACLS - (поддерживаются списки контроля доступа (ACL). Только для NTFS)
FS_FILE_COMPRESSION - (поддерживается сжатие файлов на уровне системы)
FS_VOL_IS_COMPRESSED - (устройство представляет собой сжатый диск)


Определение типа диска:

function GetDriveType(Drive: Byte): string;
var
  DriveLetter: Char;
  DriveType: uInt;
begin
  DriveLetter := Char(Drive + $41);
  DriveType := GetDriveType(PChar(DriveLetter + ':\'));
  case DriveType of
    0: Result := '?';
    1: Result := 'Path does not exists';
    Drive_Removable: Result := 'Removable';
    Drive_Fixed: Result := 'Fixed';
    Drive_Remote: Result := 'Remote';
    Drive_CDROM: Result := 'CD-ROM';
    Drive_RamDisk: Result := 'RAMDisk'
    else Result := 'Unknown';
  end;
end;


Может так попробовать:


procedure TMainForm.btnGetHandleClick(Sender: TObject);
var
  DriveHandle : HWND;
begin
  case Win32Platform of
    VER_PLATFORM_WIN32_NT:
    begin
      DriveHandle := CreateFile ('\\.\Scsi0:', GENERIC_READ+GENERIC_WRITE,
                                FILE_SHARE_READ+FILE_SHARE_WRITE, nil, 
                                OPEN_EXISTING, 0, 0);
      if DriveHandle <> INVALID_HANDLE_VALUE then
        MessageBox (MainForm.Handle, PChar(IntToStr(DriveHandle)),
                   PChar('Here is your handle:'), MB_ICONINFORMATION)
      else
         MessageBox (MainForm.Handle, PChar('Error!'), PChar('Error'), 
                     MB_ICONERROR);
    end;
    VER_PLATFORM_WIN32_WINDOWS:
    begin
      DriveHandle := CreateFile ('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
      if DriveHandle <> INVALID_HANDLE_VALUE then
        MessageBox (MainForm.Handle, PChar(IntToStr(DriveHandle)), 
                    PChar('Here is your handle:'), MB_ICONINFORMATION)
      else
        MessageBox (MainForm.Handle, PChar('Error!'), PChar('Error'), MB_ICONERROR);
    end;
  end; // case
end;


Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01371