Курсовая работа: Разработка драйвера виртуального жесткого диска
где DiskSize – размер диска.
Если количество цилиндров превышает 1023(такое ограничение было введено для совместимости со старыми версиями BIOS), то количество секторов на дорожку увеличивается вдвое и будет равно 64.
Таким образом максимальный размер рамдиска, для которого число цилиндров не превышает 1023 равен:
MaxDiskSize = 1023*16*64*512 = 536346624 байт= 511.5 Мбайт,
что более чем достаточно для нашей версии рамдиска.
2. 7 Структура драйвера
С учетом всего вышеизложенного требуется разработать классовый драйвер, который имеет монолитную структуру. Драйвер будет иметь следующие части:
· Инициализация драйвера
· Обработка запросов PnP и управления питанием
· Обработка запросов записи/чтения данных
· Обработка расширенных запросов
· Выгрузка драйвера
3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ
3.1 Выбор и обоснование языка и среды программирования
Для разработки драйвера виртуального диска применялся пакет DDK (Driver Development Kit), который включает в себя все необходимые заголовочные файлы и библиотеки. Пакет DDK ориентирован на язык С. Драйвер разрабатывался на Windows 2003 Server DDK, т.к. она включает в себя как средства для разработки драйверов для Windows 2003 Server, так и последние версии средств для разработки драйверов ОС Windows 2000 и XP.
В качестве интегрированной среды разработки применялся Microsoft Visual C++ 6. Он предоставляет удобный интерфейс для написания программного кода на C, и позволяет компилировать его используя библиотеки пакета DDK.
Для отладки работы драйвера применялись программы DebugView и DriverMonitor из пакета NuMega Driver Studio 2.0, которые позволяют просматривать отладочные сообщения драйвера.
3.2 Структуры данных классового драйвера
Параметры диска и его состояние хранятся в расширении устройства — структуре DEVICE_EXTENSION. Она всегда доступная через объект-устройство (DEVICE_OBJECT, поле DeviceExtension), она реализует наиболее удобный и рекомендованный Microsoft способ хранения таких данных. Структуру расширения определяет разработчик драйвера. Мы ее определим так:
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT DeviceObject;
PDEVICE_OBJECT LowerDeviceObject;
DEVICE_STATE DevState; // Текущее состояние устройство
IO_REMOVE_LOCK RemoveLock; // Блокировка устройства
ULONG Flags; // Флаг устройства
PUCHAR DiskImage; // Указатель на образ диска
DISK_GEOMETRY DiskGeometry; // Параметры геометрии диска
DISK_INFO DiskRegInfo; // Параметры диска из реестра
UNICODE_STRING SymbolicLink; // Символическая ссылка
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;