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

Карта разделов дисков Windows без учета скрытых

Delphi , Графика и Игры , Картография

Карта разделов дисков Windows без учета скрытых

В данной статье мы рассмотрим, как программно получить информацию о всех разделах дисков в Windows, не учитывая скрытые разделы. Мы будем использовать Object Pascal (Delphi) для написания примера кода.

Введение

В Windows каждая файловая система раздела диска представлена как отдельный том. Для работы с томами в Windows можно использовать функцию FindFirstVolume и FindNextVolume. Однако, эти функции не учитывают скрытые разделы, что может быть нежелательно в некоторых случаях.

Пример кода

Давайте напишем программу на Object Pascal (Delphi), которая получает информацию о всех разделах дисков в Windows, не учитывая скрытые разделы. Для этого мы будем использовать структуру PARTITION_INFORMATION и функцию DeviceIoControl для получения информации о разделах диска.

program DiskPartitions;
uses
  Windows;

type
  TPARTITION_INFORMATION = record
    StartingOffset: _LARGE_INTEGER;
    PartitionLength: _LARGE_INTEGER;
    HiddenSectors: DWORD;
    PartitionNumber: DWORD;
    PartitionType: BYTE;
    BootIndicator: BOOLEAN;
    RecognizedPartition: BOOLEAN;
    RewritePartition: BOOLEAN;
  end;

const
  IOCTL_DISK_GET_PARTITION_INFO = $0074004;

var
  H: THandle;
  dwBytesReturned: DWORD;
  PartitionInformation: TPARTITION_INFORMATION;
  i, j: Integer;

begin
  for i := 0 to 99 do
  begin
    H := CreateFile(PChar('\.\PhysicalDrive' + IntToStr(i)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    if H <> INVALID_HANDLE_VALUE then
    begin
      for j := 1 to 20 do
      begin
        PartitionInformation.PartitionType := 0;
        DeviceIoControl(H, IOCTL_DISK_GET_PARTITION_INFO, nil, 0, @PartitionInformation, SizeOf(TPARTITION_INFORMATION), dwBytesReturned, nil);
        if (PartitionInformation.PartitionType not in [0, 1, 6, 7, 11, 12, 114]) or PartitionInformation.HiddenSectors <> 0 then
          Continue; // Пропускаем скрытые разделы
        // Здесь можно добавить код для обработки найденного раздела
      end;
      CloseHandle(H);
    end;
  end;
end.

В данном примере мы перебираем все физические диски с помощью цикла for i := 0 to 99 do. Для каждого диска мы открываем файловый дескриптор с помощью функции CreateFile и перебираем все возможные разделы с помощью цикла for j := 1 to 20 do. Для каждого раздела мы получаем информацию о типе раздела и количестве скрытых секторов с помощью функции DeviceIoControl. Если тип раздела не является известным типом файловой системы или количество скрытых секторов не равно нулю, мы пропускаем этот раздел, не учитывая его при дальнейшей обработке.

Заключение

В данной статье мы рассмотрели, как программно получить информацию о всех разделах дисков в Windows, не учитывая скрытые разделы. Мы использовали Object Pascal (Delphi) для написания примера кода, который перебирает все физические диски и получает информацию о типах разделов и количестве скрытых секторов. Это позволяет программе работать с томами дисков, не учитывая скрытые разделы.

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

Краткое описание: Статья объясняет, как программно получить информацию о всех разделах дисков в Windows, не учитывая скрытые разделы, с использованием Object Pascal (Delphi) и функции DeviceIoControl.


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

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




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


:: Главная :: Картография ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:50:30/0.0054488182067871/1