Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 6

Получение имени диска для файловой системы FAT и extended

31.03.2015, 22:50. Показов 692. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, в общем есть программа, которая выводит информацию о каждом логическом диске. Для файловой системы NTFS все хорошо, показывает имя диска, а вот для FAT и EXTENDED - нет. Обошел уже программу с ног до головы отладкой, но не выходит ничего. Помогите

Здесь выводится информация о диске
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
UINT PrintMBRInformation(char* pMBR, int abs_addr){
    unsigned int secBegin,secLength,ext=0;
    char* pPartition;
    unsigned char code;
    int i;
    char active;
    char diskname=0;
    pPartition=pMBR+0x01BE;
    for(i=0;i<4;i++){
        code=pPartition[4];
        if(!code)break;
        secBegin=*(UINT*)&pPartition[8];
        secLength=*(UINT*)&pPartition[12];
        active=pPartition[0];
        pPartition+=0x10;
        diskname=GetDiskChar(secLength);
        printf("%u. ",i);
        if(active!=0)printf("(boot) ");
        if(diskname)printf("(%c:)",diskname);
        printf("id: %02X(%s), ",code,GetFileSystem(code));
        printf("size: %u MB (%u sec), ",secLength/(2048),secLength);
        printf("abs adr: %u sec\n",secBegin+abs_addr);
        if((code==0x0F)||(code==0x05))ext=secBegin;
    }
    return ext;
}
Определение файловой системы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char* GetFileSystem(unsigned char code){
    int i;
    if((code==0x05)||(code==0x0F))
        return "extended";
    if((code==0x07)||(code==0x17))
        return "NTFS";
    if(code==0x82)
        return "ext2";
    if(code==0x83)
        return "ext3";
    for(i=0;i<sizeof(FAT);i++)
        if(code==FAT[i])
            return "FAT";
}
Остальной код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
int main(int argc, char** argv){
    printf("MBR reader starts\n");
    while(1){
        printf("Opening HD %c...\n",nHard);
        hDrive=CreateFile(
            HardDiskName,
            GENERIC_ALL,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL, OPEN_EXISTING, 0, NULL);
        if(hDrive==INVALID_HANDLE_VALUE){
            iErr=GetLastError();
            if(iErr==ERROR_FILE_NOT_FOUND){
                printf("ALL HD are scanned\n");
                system("PAUSE");
                exit(0);
            }
            AnalyzeError(iErr);
            system("PAUSE");
            exit(1);
        }
        printf("HD succesfully scanned\n");
        printf("MBR scan:\n");
        while(1){
            if(!ReadFile(hDrive, buf, sizeof(buf), (unsigned long*)&nRead, NULL)){
                CloseHandle(hDrive);
                AnalyzeError(GetLastError());
                exit(1);
            };
            if(extended_addr)printf("Secondary MBR scan\n");
            printf("%u bytes read\n",nRead);
            secpointer=PrintMBRInformation(buf,secpointer);
            if(secpointer==0){
                CloseHandle(hDrive);
                break;
            }
            if(!extended_addr)extended_addr=secpointer;
            else secpointer=extended_addr+secpointer;
            HiPointer=secpointer>>23;
            LoPointer=secpointer<<9;
        SetFilePointer(hDrive,LoPointer,(long*)&HiPointer,FILE_BEGIN);
        }
        printf("HD %c successfully scanned\n\n",nHard);
        secpointer=extended_addr=0;
        HardDiskName[sizeof(HardDiskName)-2]=++nHard;
    }
system("PAUSE");
return 0;
}
char GetDiskChar(int seclength) {
    unsigned int ld=GetLogicalDrives();
    char Drive[4]="X:\\";
    int clusters,sect_on_cluster,buf;
    int i;
    for(i=0;i<25;i++)
        if((ld&(1<<i))!=0){
            Drive[0] = 'A'+i;
            if(GetDriveType(Drive)==DRIVE_FIXED){
                GetDiskFreeSpace(Drive,(unsigned long*)&sect_on_cluster,(unsigned long*)&buf,(unsigned long*)&buf,(unsigned long*)&clusters);
                if((abs((clusters*sect_on_cluster)-seclength))<10)return Drive[0];
            }
        }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2015, 22:50
Ответы с готовыми решениями:

Разработать Windows-приложение для реализации простейшей (FAT) виртуальной файловой системы
Подскажите что почитать, что бы реализовать что-нибудь из этого? ну или если у кого есть уже готовое скиньте ком не трудно) 1....

Моделирование файловой системы FAT
Разработать программу моделирующую файловую систему. При моделировании считать, что: -объем внешней памяти, используемой для хранения...

Конвертировать диски из файловой системы FAT в NTFS
Здравствуйте Прочитал,что командная строка может конвертировать диски из файловой системы FAT в NTFS. Хочу поэксперементировать с...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2015, 22:50
Помогаю со студенческими работами здесь

Файловые системы: FAT-16, FAT-32, NTFS и маленькие текстовые файлы.
Здравствуйте, форумчане:) есть такой вопрос: какое влияние оказывает выбор файловой системы (FAT 16, FAT 32, NTFS) для запоминания...

Получение данных о файловой струкутре системы
Здравствуйте! В JS можно получить данные о внутренней структуре какой-либо папки или диска? То есть, получить доступ ко всем вложенным...

Восстановление файловой системы NTFS жесткого диска
Доброго времени суток! Решил отформатировать ноутбук и установить Win 10 64 bit. Во время установки получил ошибку 0x80070570. Решил...

Определение параметров диска (Серийного номера, файловой системы)
Всем привет, мб у кого нить завалялась программа определения серийного номера,файловой системы диска Скиньте пожалуйста.

Как можно получить информацию о типе файловой системы диска?
Как можно получить информацию о типе файловой системы диска?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru