Обработка запросов Plug and Play
В процессе работы диспетчер ввода вывода может динамически управлять состоянием устройства: запускать, останавливать и выгружать. Реализация этих функций драйвером устройства хранения обеспечивает при обработке специфичных PnP IRP пакетов. В таблице 2 приведены описания IRP пакетов, которые должны поддерживаться.
Таблица 2
Применительно к виртуальному диску большая часть этих сообщений не влечет каких-либо дополнительных действий, т.к. у рамдиска нет дополнительных буферов, данные с которые должны быть записаны на диск при остановке устройства, или поддержки функций управления электропитанием устройства. Поэтому для виртуального диска существует внутренняя переменная, которая хранит текущее состояние устройства. Основным состоянием диска будет WORKING – когда диск находится в рабочем состоянии. Остальные состояния(приведенные в таблице 3) носят информативный характер, чтобы узнать текущий режим работы диска. При операциях доступа к устройству будет осуществляться проверка состояния WORKING, и только при нем доступ к диску разрешен.
Таблица 3
Обработка расширенных запросов
Для управления сами устройством диспетчер ввода вывода посылает драйверу пакет с кодом управления вводом/выводом(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 – проверить, сменился ли носитель (для съемных дисков) Расчет геометрии диска
При получении расширенного запроса IOCTL_DISK_GET_DRIVE_GEOMETRY или IOCTL_DISK_GET_MEDIA_TYPES требуется инициатору запроса передать информацию о геометрии диска. Драйвер виртуального диска заполняет стандартную структуру Windows DISK_GEOMETRY, где указываются следующие параметры: Cylinders – количество цилиндров TracksPerCylinder – количество дорожек на цилиндр SectorsPerTrack – количество секторов на дорожку BytesPerSector – размер сектора в байтах MediaType – тип носителя Тип носителя для жестких дисков должен быть равен FixedMedia. Размер сектора примем равным 512 байтам, это стандарт де-факто для почти всех современных дисковых накопителей. Количество дорожек и секторов будет фиксированным
TracksPerCylinder = 16 SectorsPerTrack = 32
Вычисляем количество цилиндров диска:
Cylinders = DiskSize /(BytesPerSector*SectorsPerTrack* TracksPerCylinder),
где DiskSize – размер диска. Если количество цилиндров превышает 1023(такое ограничение было введено для совместимости со старыми версиями BIOS), то количество секторов на дорожку увеличивается вдвое и будет равно 64. Таким образом максимальный размер рамдиска, для которого число цилиндров не превышает 1023 равен:
MaxDiskSize = 1023*16*64*512 = 536346624 байт= 511.5 Мбайт,
что более чем достаточно для нашей версии рамдиска. Структура драйвера
С учетом всего вышеизложенного требуется разработать классовый драйвер, который имеет монолитную структуру. Драйвер будет иметь следующие части: · Инициализация драйвера · Обработка запросов PnP и управления питанием · Обработка запросов записи/чтения данных · Обработка расширенных запросов · Выгрузка драйвера
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (286)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |