Учебное пособие: Файловая система
// если возникла ошибка (не хватило памяти для получения списка устройств)
// то просто выводим текст с сообщением, но не заканчиваем, что бы не
// заботиться об уничтожении временного файла досрочно
_lwrite(hf, "NOT ENOUGHT MEMORY TO GET INFORMATION!\r\n", 40);}
// пишемвторойзаголовок
_lwrite(hf, "\r\n******** READ DOS DEVICES MAP ********\r\n\r\n", 44);
// просто для примера назначаем Z: как каталог, содержащий win.com
GetWindowsDirectory(buffer, sizeof(buffer));
SetLastError(ERROR_SUCCESS);
DefineDosDevice(0, devZ, buffer);
if (GetLastError() != ERROR_SUCCESS) {
// функция DefineDosDevice нереализована - этоне Windows NT!
_lwrite(hf, "NOTE: DefineDosDevice() is not implemented!\r\n", 45);
} else {
// если назначить удалось - это NT, получаем полный список и выводим его
// хотя может быть и Windows 98
buffer[ QueryDosDevice(NULL, buffer, 1024) ] = ‘\0’;
// функция QueryDosDevice возвращает число символов, скопированных в буфер
// и в случае Windows 98 мы получим 0, хотя сам буфер может содержать мусор.
for (p = buffer; *p; p += lstrlen(p) + 1) {
_lwrite(hf, " ", 15 - lstrlen(p));
_lwrite(hf, p, lstrlen(p));
_lwrite(hf, " = ", 3);
// используем массив file_system в качестве временной строки
QueryDosDevice(p, file_system, sizeof(file_system));
_lwrite(hf, file_system, lstrlen(file_system));
_lwrite(hf, "\r\n", 2);}
GetWindowsDirectory(buffer, sizeof(buffer));
// удаляем назначенное нами устройство