Программирование для Windows NT

Определение параметров логического устройства


Одним из наиболее интересных параметров логического устройства является размер свободного пространства на нем. Этот параметр вместе с некоторыми другими вы можете определить при помощи функции GetDiskFreeSpace:

BOOL GetDiskFreeSpace(

 LPCTSTR lpRootPathName,  // адрес пути к корневому каталогу

 LPDWORD lpSectorsPerCluster,// количество секторов в кластере

 LPDWORD lpBytesPerSector,   // количество байт в секторе

 LPDWORD lpNumberOfFreeClusters, // количество свободных

                                 // кластеров

 LPDWORD lpTotalNumberOfClusters); // общее количество

                                   // кластеров

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

Для того чтобы определить размер свободного пространства на диске в байтах, вы должны умножить значение количества свободных кластеров (записанное по адресу lpNumberOfFreeClusters) на количество секторов в кластере (записанное по адресу lpSectorsPerCluster) и на количество байт в одном секторе (которое будет записано по адресу lpBytesPerSector). Более подробно о делении диска на кластеры и секторы вы можете узнать из 19 тома “Библиотеки системного программиста”.

   В программном интерфейсе Microsoft Windows NT есть еще одна функция, с помощью которой вы можете определить параметры дискового устройства. Это функция GetVolumeInformation:

BOOL GetVolumeInformation(



  LPCTSTR lpRootPathName,  // адрес пути к корневому каталогу

  LPTSTR  lpVolumeNameBuffer,   // буфер для имени тома

  DWORD   nVolumeNameSize, // размер буфера lpVolumeNameBuffer

  LPDWORD lpVolumeSerialNumber, // буфер для серийного номера

                                // тома

  LPDWORD lpMaximumComponentLength, // буфер для максимальной

    // длины имени файла, допустимой для данного тома

  LPDWORD lpFileSystemFlags,     // буфер для системных флагов


  LPTSTR lpFileSystemNameBuffer, // буфер для имени

                                 // файловой системы

  DWORD nFileSystemNameSize);    // размер буфера

                                 //   lpFileSystemNameBuffer

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

В буфере системных флагов, адрес которого передается функции через параметр lpFileSystemFlags, могут быть установлены следующие флаги:

  

Флаг

Описание

FS_CASE_IS_PRESERVED

Система делает различия между заглавными и прописными буквами в именах файлов при записи этих имен на диск

FS_CASE_SENSITIVE

Система делает различия между заглавными и прописными буквами

FS_UNICODE_STORED_ON_DISK

Система может работать с кодировкой Unicode в именах файлов

FS_PERSISTENT_ACLS

Система способна работать со списком контроля доступа к файлам ACL (access-control list). Такая возможность есть в файловой системе NTFS, но отсутствует в файловых системах HPFS и FAT

FS_FILE_COMPRESSION

Файловая система способна сжимать (компрессовать) отдельные файлы

FS_VOL_IS_COMPRESSED

Для тома используется автоматическая компрессия данных


Содержание раздела