Учебное пособие: Файловая система
// если строка получена, то разбираем ее по частям
for (p = temp; *p; p += lstrlen(p) + 1) {
wsprintf(buffer, "Root: %s", p);
switch (GetDriveType(p)) {
case 0: s = "???"; break;
case 1: s = "invalid"; break;
case DRIVE_REMOVABLE: s = "REMOVABLE"; break;
case DRIVE_FIXED: s = "FIXED"; break;
case DRIVE_REMOTE: s = "REMOTE"; break;
case DRIVE_CDROM: s = "CD-ROM"; break;
case DRIVE_RAMDISK: s = "RAM DISK"; break;
default: s = "what?!"; break;}
// укажем явное преобразование указателя на строку ‘s’ к типу
// LPSTR — так как в Windows API для моделей памяти с одним сегментом
// данных (tiny,small,medium) указатели по умолчанию 16-ти разрядные
// а для функций Windows обязательно нужны 32-х разрядные
wsprintf(buffer+lstrlen(buffer), " type=%s volume='", (LPSTR)s);
sernum = complen = flags = 0; file_system[0] = '\0';
if (
GetVolumeInformation(
p, buffer+lstrlen(buffer), 64,
&sernum, &complen, &flags,
file_system, sizeof(file_system)))
{// если информация о томе прочитана -> получаем и выводим более
// подробныесведения
wsprintf(buffer+lstrlen(buffer), "' serial=%08lX\r\n", sernum);
_lwrite(hf, buffer, lstrlen(buffer));
spc = bps = fc = tc = 0L;
GetDiskFreeSpace(p, &spc, &bps, &fc, &tc);