Заполняем полученный блок памяти именами
lpLogicalDriveStrings = malloc(dwDriveStringsSpace);
// Заполняем полученный блок памяти именами дисков
GetLogicalDriveStrings(dwDriveStringsSpace,
lpLogicalDriveStrings);
// Подсчитываем количество дисков, сканируя список
// имен, полученный на предыдущем шаге
nNumDirves = 0;
for(lpTemp = lpLogicalDriveStrings;
*lpTemp != 0; nNumDirves++)
{
lpTemp = strchr(lpTemp, 0) + 1;
}
// Заказываем память для хранения информации
// о всех дисках
pdi = malloc(nNumDirves * sizeof(DISKINFO));
// Заполняем массив структур DISKINFO информацией о дисках
for(i = 0, lpTemp = lpLogicalDriveStrings;
i < nNumDirves; i ++)
{
// Получаем имя очередного диска
strcpy((pdi + i)->szDriveName, lpTemp);
// Определяем тип диска
(pdi + i)->nDriveType = GetDriveType(lpTemp);
// В зависимости от типа диска выбираем способ
// заполнения соответствующей структуры DISKINFO
switch ((pdi + i)->nDriveType)
{
// Для сменных устройств и для CD-ROM
// записываем пустые значения
case DRIVE_REMOVABLE:
{
// Выбираем пиктограмму с номером 0
(pdi + i)->iImage = 0;
strcpy((pdi + i)->szVolumeName, "<Unknown>");
(pdi + i)->dwVolumeSerialNumber = 0;
(pdi + i)->dwMaxFileNameLength = 0;
(pdi + i)->dwFileSystemFlags = 0;
strcpy((pdi + i)->szFileSystemName, "?");
(pdi + i)->dwFreeSpace = 0;
(pdi + i)->dwTotalSpace = 0;
break;
}
case DRIVE_CDROM:
{
(pdi + i)->iImage = 2;
strcpy((pdi + i)->szVolumeName, "<Unknown>");
(pdi + i)->dwVolumeSerialNumber = 0;
(pdi + i)->dwMaxFileNameLength = 0;
(pdi + i)->dwFileSystemFlags = 0;
Содержание Назад Вперед