Курсовая работа: Разработка драйвера виртуального жесткого диска
SURPRISEREMOVED
Устройство удалено без предварительного предупреждения
REMOVED
Устройство удалено
UNKNOWN
Устройство в ошибочном состоянии
2.5 Обработка расширенных запросов
Для управления сами устройством диспетчер ввода вывода посылает драйверу пакет с кодом управления вводом/выводом(IOCTL). Какие именно коды управления будет посылаться зависит от типа устройства. О том какие коды должен обязательно поддерживать классовый драйвер точно ничего не сказано. Поэтому приведенный далее список кодов управления был получен в процессе отладки драйвера, когда записывались получаемые драйвером IOCTL и выяснялась их функция.
Список кодов управления:
· IOCTL_DISK_GET_PARTITION_INFO – сообщить о типе, размере и природе раздела диска.
· IOCTL_DISK_GET_MEDIA_TYPES,
IOCTL_DISK_GET_DRIVE_GEOMETRY – сообщить о геометрии диска (количество цилиндров, дорожек, секторов)
· IOCTL_DISK_IS_WRITABLE – проверка можно ли на диск записывать данные
· IOCTL_DISK_SET_PARTITION_INFO – изменить тип раздела
· IOCTL_MOUNTMGR_QUERY_POINTS – сообщить о символической ссылке для тома
· IOCTL_MOUNTDEV_QUERY_DEVICE_NAME – сообщить об имени устройства
· IOCTL_DISK_FORMAT_TRACKS – форматировать дорожки
· IOCTL_DISK_MEDIA_REMOVAL – блокировать извлечение носителя
· IOCTL_DISK_CHECK_VERIFY – проверить, сменился ли носитель (для съемных дисков)
2.6 Расчет геометрии диска
При получении расширенного запроса IOCTL_DISK_GET_DRIVE_GEOMETRY или IOCTL_DISK_GET_MEDIA_TYPES требуется инициатору запроса передать информацию о геометрии диска. Драйвер виртуального диска заполняет стандартную структуру Windows DISK_GEOMETRY, где указываются следующие параметры:
Cylinders – количество цилиндров
TracksPerCylinder – количество дорожек на цилиндр
SectorsPerTrack – количество секторов на дорожку
BytesPerSector – размер сектора в байтах
MediaType – тип носителя
Тип носителя для жестких дисков должен быть равен FixedMedia.
Размер сектора примем равным 512 байтам, это стандарт де-факто для почти всех современных дисковых накопителей.
Количество дорожек и секторов будет фиксированным
TracksPerCylinder = 16 SectorsPerTrack = 32
Вычисляем количество цилиндров диска: