Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Николаев СПО ЛР2.doc
Скачиваний:
4
Добавлен:
04.05.2019
Размер:
201.73 Кб
Скачать

Чтение структуры каталогов

Исходя из вышеуказанных данных, для чтения структуры каталогов путем непосредственного использования данных файловой системы FAT12, необходимо реализовать следующий алгоритм:

  1. Открыть диск функцией CreateFile.

  2. Считать загрузочный сектор диска, получить из него геометрию диска - размер сектора, количество секторов в кластере и т.д. (фактически размер сектора всегда равен 512 байт, а один кластер дискеты соответствует одному сектору).

  3. Считать FAT.

  4. Используя FAT, считать корневой каталог, выбрать из него (по атрибутам) записи подкаталогов.

  5. Для каждой записи подкаталога определить кластер, в котором находится подкаталог.

  6. Используя FAT, считать подкаталог, выбрать из него записи его подкаталогов и т.д.

Описания функций и структур

GetDriveType

Функция GetDriveType определяет, является ли диск сменным (removable), постоянным (fixed), CD-ROM, виртуальным (RAM disk), или сетевым (network drive).

UINT GetDriveType(

LPCTSTR lpRootPathName // корневой каталог диска

);

Параметры

lpRootPathName

[in] Указатель на a null-terminated-строку, которая задает корневой каталог диска, про который требуется информация. Завершающий слеш обязателен. Если lpRootPathName равен NULL, функция использует корневой каталог текущего каталога.

Возвращаемые значения

Возвращаемое значение определяет тип диска. Это может быть одно из следующих значений:

Значение

Смысл

DRIVE_UNKNOWN

Тип диска не может быть определен

DRIVE_NO_ROOT_DIR

Путь к корневому каталогу неверен

DRIVE_REMOVABLE

Сменный диск (FDD)

DRIVE_FIXED

Постоянный диск (HDD)

DRIVE_REMOTE

Удаленный (сетевой) диск

DRIVE_CDROM

CD-ROM

DRIVE_RAMDISK

Виртуальный диск (RAM disk)

Требования

  Windows NT/2000/XP: Требует Windows NT 3.1 или более позднюю версию.   Windows 95/98/Me: Требует Windows 95 или более позднюю версию.   Header: Объявлено в winbase.h; включается в windows.h.   Library: Kernel32.lib.   Unicode: Реализовано в Unicode- и ANSI-вариантах в Windows NT/2000/XP.

CreateFile

Функция CreateFile является очень универсальной функцией и имеет множество различных применений. Поэтому далее будет описано только применение этой функции для организации прямого доступа к диску (в ОС семейства Windows NT).

HANDLE CreateFile(

LPCTSTR lpFileName, // имя диска в формате «\\.\A:»

DWORD dwDesiredAccess, // режим доступа

DWORD dwShareMode, // режим общего доступа

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // атрибуты безопасности

DWORD dwCreationDisposition, // как создать файл

DWORD dwFlagsAndAttributes, // атрибуты файла

HANDLE hTemplateFile // хендл файла-шаблона

);

Образец вызова

HANDLE hDevice = CreateFile (“\\\\.\\a:”, // имя диска

GENERIC_READ, // доступ для чтения

FILE_SHARE_READ, // разделение ресурсов

NULL, // атрибуты безопасности отсутствуют

OPEN_EXISTING, // открыть существующий файл