Перед вами
очередной выпуск рассылки "Программирование на
WinApi"
Получение информации о логическом
диске
В прошлом номере рассылки был приведен
пример получения списка логических дисков, установленных в системе. Эта
рассылка является продолжением предыдущей, и в ней мы получим информацию о
единичном диске из списка доступных.
void GetRootInfo(char *root)
{
DWORD LongFNameLen = 0, flags = 0;
char volume[32], FATName[32];
DWORD serialnum = 0;
FillMemory(volume, 32, 0);
FillMemory(FATName, 32, 0);
//Отключаем вывод сообщения о вставке диска в дисковод
UINT oldErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
BOOL res = GetVolumeInformation(root, volume, 32, &serialnum, &LongFNameLen, &flags, FATName, 32);
if (res != 0)
{
// Преобразовываем серийный номер в более удобочитаемую форму
char tmp[256];
FillMemory(tmp, 256, '0');
char serial[16];
FillMemory(serial, 16, 0);
ltoa(serialnum, serial, 16);
CopyMemory(&tmp[8 - strlen(serial)], serial, strlen(serial));
for (int i = 0; i < 4; i++)
serial[i] = toupper(tmp[i]);
serial[i++] = '-';
for (; i < 9; i++)
serial[i] = toupper(tmp[i-1]);
FillMemory(tmp, 256, 0);
sprintf(tmp, "FAT Name:%s, Root:%s, RootVolume:%s, RootSerial:%s", FATName, root, volume, serial);
MessageBox(NULL, tmp, "Volume Information", MB_OK);
}
SetErrorMode(oldErrMode);
}
// Использовать так:
GetRootInfo("C:\\");