Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как определить физический размер сектора для различных файловых систем в Delphi

Delphi , Файловая система , Диски

Вопрос пользователя заключается в необходимости получить физический размер сектора для различных типов системных дисков, работающих под управлением Windows 7 или более новой версии. В частности, пользователь столкнулся с проблемой, что функция, использующая DeviceIoControl для получения физического размера сектора, не работает с внешними устройствами, имеющими файловую систему, отличную от NTFS, например, FAT16 или exFAT. При попытке использовать данную функцию с такими устройствами возникает исключение с кодом ошибки 50, указывающее на то, что запрос не поддерживается.

Вот пример кода на Object Pascal, который пользователь использовал для получения физического размера сектора:

function GetSectorSize(Drive:Char):DWORD;
var
  h: THandle;
  junk: DWORD;
  Query: STORAGE_PROPERTY_QUERY;
  Alignment: STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
begin
  Result := 0;
  h := CreateFileW(PWideChar('\\.\' + UpperCase(Drive) + ':'), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  if h = INVALID_HANDLE_VALUE then RaiseLastOSError;
  try
    FillChar(Query, SizeOf(Query), 0);
    Query.PropertyId := StorageAccessAlignmentProperty;
    Query.QueryType := PropertyStandardQuery;
    if not DeviceIoControl(h, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(Query), @Alignment, SizeOf(Alignment), junk, nil) then RaiseLastOSError;
    Result := Alignment.BytesPerPhysicalSector;
  finally
    CloseHandle(h);
  end;
end;

Подтвержденный ответ

Для решения проблемы пользователя стоит обратить внимание на новые возможности, предоставленные в Windows 8 и Windows Server 2012, которые позволяют улучшить совместимость с дисками нового формата (Advanced Format, 4K). В частности, была введена новая структура FILE_FS_SECTOR_SIZE_INFORMATION, которая позволяет получить физический размер сектора для файловой системы.

Существуют несколько способов запроса информации о физическом размере сектора:

  1. Использование функции FltQueryVolumeInformation или ZwQueryVolumeInformationFile, передавая в качестве параметра FileInformationClass значение FileFsSectorSizeInformation и указатель на структуру FILE_FS_SECTOR_SIZE_INFORMATION.
  2. Создание IRP с основной функцией IRP_MJ_QUERY_VOLUME_INFORMATION.
  3. Использование функции FsRtlGetSectorSizeInformation с передачей указателя на структуру FILE_FS_SECTOR_SIZE_INFORMATION.

Альтернативный ответ

Также стоит отметить, что физический размер сектора диска не зависит от файловой системы и должен быть запрошен не через обработчик тома, а через физическое устройство (\\.\PhysicalDriveX). Это позволяет получить корректные данные, не зависящие от файловой системы.

Комментарии и рекомендации

  • При работе с различными файловыми системами важно учитывать, что физический размер сектора может отличаться от логического.
  • Перед использованием новых методов убедитесь, что ваша версия Windows поддерживает их.
  • При запросе информации о физическом размере сектора рекомендуется использовать физический путь к устройству, а не к тому.

Заключение

Для получения физического размера сектора на различных файловых системах в среде Delphi, особенно для файловых систем, отличных от NTFS, рекомендуется использовать новые API, предоставленные в Windows 8 и выше. Обратите внимание на структуру FILE_FS_SECTOR_SIZE_INFORMATION и соответствующие методы запроса информации о томах. Учитывайте также, что запросы должны выполняться через физическое устройство, а не через обработчик тома.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой получения физического размера сектора для различных файловых систем в Delphi, особенно для систем, отличных от NTFS, и ищет решение, используя возможности, доступные в Windows 8 и выше.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диски ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-11 00:34:53/0.0033390522003174/0