Hdmr driver что это

Обновлено: 17.04.2024

Англо-русский словарь технических аббревиатур . 2011 .

Смотреть что такое "HDMR" в других словарях:

HDMR — steht für: Hardware Direct MIDI Routing HDMR Slot, Steckplatz in einem Computer High Dimensional Model Representation, Mathematik Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter Begriffe … Deutsch Wikipedia

High-dimensional model representation — is a finite expansion for a given multivariable function. The expansion is first described by Sobol as: f(mathbf) = f 0+sum ^nf i(x i)+sum

Магнитная запись с использованием энергии — ключ к повышению емкости

Технологии магнитной записи с использованием энергии (EAMR, energy-assisted magnetic recording) уже давно на слуху у пользователей и энтузиастов. По сравнению со стандартной сегодня перпендикулярной магнитной записью PMR они обеспечивают дальнейшее увеличение плотности записи данных.

Из наиболее перспективных технологий EAMR выделяют термомагнитную запись (HAMR,heat-assisted magnetic recording) и запись с использованием микроволн (MAMR, microwave-assisted magnetic recording). По мнению Ассоциации передовых технологий хранения данных (Advanced Storage Technology Consortium, ASTC), HAMR станет новым знаковым этапом на пути к повышению плотности записи, то есть увеличению емкости жестких дисков при прежнем физическом размере. Эта инновация окажет большое влияние на развитие жестких дисков в течение следующего десятилетия.

Какой вариант EAMR лучше?

Переход на любую технологию EAMR позволит достичь намного большей плотности записи. Но какая технология лучше?

На пластине жесткого диска каждый бит данных хранится в виде группы крошечных частиц, также называемых зернами. Значение бита определяется магнитной ориентацией зерна, в зависимости от его направления кодируется двоичная 1 или 0. Чтобы записать больше данных на единицу площади, зерна следует сделать меньше и расположить ближе друг к другу. Но если расположить зерна слишком близко, биты начинают перемагничиваться под воздействием соседних зерен, уничтожая записанную на диске информацию.

Чтобы избежать этой проблемы, понадобилось изобрести новые термостабильные материалы, в которых биты сохраняют ориентацию при нормальных температурах и не воздействуют друг на друга. Эти материалы очень хорошо показали себя с точки зрения стабильности, но возникает новая проблема: как перемагнитить бит, устойчивый к перемагничиванию? Для записи на подобные материалы требуется существенно более сильное магнитное поле, чем обеспечивают обычные головки записи.


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

Современные накопители MAMR используют пластины со сплавом CoPt (кобальт-платина). К головке записи MAMR добавлен генератор электромагнитного поля, которое не нагревает пластину напрямую, но заставляет магнитные зерна "дрожать", облегчая их перемагничивание.

Что касается дисков HAMR, то там применяется более стабильный сплав FePt (железо-платина). На поверхность FePt нельзя записать данные с помощью способов PMR или MAMR. Для метода HAMR используется маленький лазерный диод, установленный на каждой головке записи. Он используется для кратковременного нагрева небольшого участка пластины. Пока участок горячий, головка записи перемагничивает биты на нем, меняя их ориентацию. Процесс нагрева-охлаждения занимает считанные наносекунды, поэтому лазер совершенно не влияет на температуру отдельной пластины и накопителя в целом, равно как и на стабильность и надежность хранения данных. Как считают специалисты ASTC, на данный момент только поверхность FePt позволяет добиться емкости накопителей 30 Тбайт и выше.

Инженеры Seagate свой выбор сделали, посчитав технологию HAMR более перспективной на ближайшие годы. Сегодня технология уже готова к массовому производству, в чем их большая заслуга. На нелегком пути инженерам пришлось решить огромное множество задач и разгадать технические тайны.

Разрабатываем диск HAMR

А теперь давайте на минутку представим себя инженером Seagate и попытаемся разработать и произвести диск HAMR. Для этого следует сделать несколько шагов.

Добавить лазерный диод к головке

Разработать оптический волновод для передачи света от лазера к NFT

Встроить NFT в головку записи

Разработать новые пластины HAMR

Доработать прошивку диска и тестовых систем

Изменить процесс производства, чтобы выпускать диски HAMR

Сделать миллион разных мелочей, что входит в рабочий процесс инженеров Seagate

На головке HAMR лазер прикреплен к субмаунту. Затем оптоволокно передает свет от лазера к преобразователю NFT, который интегрирован в головку записи.

Но это еще не все. Оказалось, что нагревать напрямую лазером поверхность диска не получится. В этом и кроется тайна инженеров Seagate. Для наших читателей нам ничего не жалко, поэтому сорвем же завесу тайны!

Как быть с дифракционным пределом?

Уже более ста лет известно, что дифракция ограничивает размер пятна сфокусированного света (см. Дифракционный предел). У накопителя Blu-ray размер пятна составляет 238 нанометров. Если перейти к масштабу дорожек диска, то пятно слишком крупное. Даже если пойти на оптические хитрости и использовать технологии записи в ближнем поле, то меньше около 100 нм получить сложно. Так что требуется какое-либо другое решение.


Для преодоления дифракционного предела мы будем использовать поверхностные плазмоны. И наш преобразователь ближнего поля NFT становится плазмонным. Когда свет попадает на определенные металлы, то при соблюдении ряда условий он приводит к появлению поверхностного электрического тока. Данный поверхностный ток и связанное с ним электрическое поле и называется поверхностными плазмонами. Они легко распространяются по поверхности металла.


На самом деле, поверхностные плазмоны хорошо знакомы читателям. Человечество использует их на протяжении тысячелетий. Первые витражи в европейских кафедральных соборах появились в VII веке нашей эры. Чтобы создавать разные цвета, мастера смешивали стекло с частицами металла. И когда свет определенной волны в видимом диапазоне попадал на металлические частицы в стекле, то он поглощался и превращался в тепло или рассеивался. Остальные волны видимого диапазона проходили через стекло, создавая восприятие цвета.


Плазмонный преобразователь NFT, разработанный Seagate, использует упомянутый принцип. Плазмонный NFT состоит из диска и выступа. Свет поглощается диском и превращается в поверхностный плазмон. Данный поверхностный плазмон затем перемещается по внешнему контуру диска и вниз по выступу, нагревая участок пластины под диском. Ширина выступа как раз определяет размер горячего участка на пластине. Причем размер участка намного меньше пятна, которое было бы возможно с учетом дифракционного предела. Таким образом, ограничения дифракционного предела удалось обойти.

За последние 15 лет инженеры Seagate трудились, не покладая рук. Дизайн HAMR был много раз переработан и собран "с нуля". Инженерам удалось перейти от теоретической концепции к первым практическим реализациям. На протяжении цикла разработки HAMR было изготовлено более 25 млн. плазмонных преобразователей NFT!

Как дорабатывались пластины HAMR

Конечно, сами пластины жесткого диска тоже пришлось существенно дорабатывать. Подложка пластин HAMR (Disk Substrate) изготовлена из специального стекла, способного выдерживать нагрев записывающего слоя до высоких температур. Для HAMR потребовалось добавить слой-радиатор (Heat Sink/SUL), чтобы он отводил тепло от записывающего слоя. Слишком быстрое отведение приводило бы к недостаточной мощности нагрева. Слишком медленное — к перегреву участка, из-за чего нагревались бы соседние участки с последующей потерей информации. Для успеха жестких дисков HAMR было важно получить нужный баланс. Покрытие пластины тоже пришлось сменить, чтобы оно выдерживало нагрев до более 400°C, но при этом обеспечивало надежный интерфейс между пластиной и головкой записи.


От витражей к терабайтам: разгадываем тайны HAMR

Компания Seagate сообщила о старте коммерческих поставок жестких дисков с технологией термомагнитной записи (HAMR) с ноября 2020, а также расширила программу тестирования Mach.2 HDD с двойным приводом, о которых мы как раз писали ранее. Компания уверена, что имеющиеся технологии позволят наращивать емкость и повышать производительность жестких дисков в ближайшие годы.

На данный момент HAMR HDD могут купить лишь ограниченное число клиентов в рамках корпоративных систем хранения и решений Seagate Lyve. Позднее жесткие диски HAMR будут доступны и более широкой аудитории. Но первые 20-Тбайт жесткие диски HAMR могут и не выйти на массовый рынок, поскольку Seagate планирует повысить емкость на 20% в ближайшем будущем. Следовательно, можно ожидать скорое появление 24-Тбайт HDD. И они могут стать первыми розничными HDD на HAMR.


«Мы достигли нового технологического уровня, начав поставки 20-Тбайт жестких дисков HAMR в 2020 году. Данный шаг проецирует успешную стратегию Seagate на ближайшие годы, — сказал Дейв Мосли, главный исполнительный директор Seagate. — Благодаря HAMR мы можем увеличивать плотность записи на 20% и выше каждый год, чтобы поддерживать масштаб вложений наших клиентов в инфраструктуру. Seagate продолжит обеспечивать существенные экономические преимущества по стоимости систем по сравнению с корпоративными SSD, и ситуация вряд ли изменится в обозримом будущем».

Сейчас мы рассмотрим принцип записи с использованием энергии, составной частью которой является термомагнитная запись HAMR. После чего перейдем к разгадкам тайн инженеров Seagate.

Нужен ли специальный драйвер для Samsung evo 860 SSD?

602685c26ad25402066571.jpg

Сейчас стоит вот такой драйвер, поставленный виндой автоматически:

Если есть официальные драйверы от Samsung, просьба скинуть ссылку
  • Вопрос задан 12 февр.
  • 1254 просмотра

SagePtr

Не нужно, т.к. у накопителя внутри свой контроллер, который и выполняет всю логику работы с ним. Всё, что нужно винде - это драйвера на SATA-контроллер, чтобы видеть SATA-диски и отправлять им нужные команды для доступа к данным, а такие драйвера стандартом идут с любой современной виндой, начиная с висты.

Compolomus

Compolomus

602688feaeea4741496363.jpg

на всякий

60269686202f6747454236.jpg

Дмитрий,

Дмитрий, объясни почему ты выбрал D диск и 100MiB пожалуйста

Compolomus

Compolomus

Chamalion, поделил под игрушку для винды и линух пополам примерно

Дмитрий, зачем? Я имею в виду почеум ты выбрал эти значения в программе CrystalDiskMark

Compolomus

Ikabok

Не нужен. Десятка сама подтягивает нужные драйвера и корректно работает с SSD-накопителем. Лучшее, что вы можете сделать для повышения эффективности - не мешать ему.

firedragon

Так на всякий случай, она вроде обновляет микрокод

поставлен, только как
это относится к вопрсоу непонятно

firedragon

Chamalion, Прошивка обновляется. NVME это черный ящик для системы, а вот прошивка может и улучшить показатели

Jump

Владимир Коротенко, NVME не является черным ящиком для системы, ибо система его и реализует.
А прошивку поменять можно многими способами - но она никак не влияет на используемый драйвер. Следовательно бесполезна.

firedragon

АртемЪ, не совсем так. Система реализует подмножество команд интерфейса. Прошивка же отвечает за внутреннее поведение устройства. И может кардинально изменить поведение устройства.

Выход HAMR на рынок: важно быть лидером в исследованиях

Seagate уже начала коммерческую эксплуатацию технологии HAMR, запустив массовое производство 20-Тбайт жестких дисков в конце 2020 года. Но, как мы отметили выше, в рознице эти диски вряд ли появятся, они отгружаются только партнерам. Скорее всего, Seagate начнет массовую продажу накопителей HAMR, начиная с емкости 24 Тбайт.

9 ноября 2010 года Seagate присоединилась к двенадцати другим членам консорциума Advanced Storage Technology Consortium (ASTC). И каждый последующий год Seagate вместе с другими компаниями инвестирует немалые суммы в фундаментальные исследования технологий хранения данных под эгидой ASTC.


Каждый год ASTC публикует технологические планы, которые показывают, в каком направлении будет двигаться индустрия. Выше как раз приведен подобный план. Позвольте разобрать его чуть подробнее.

Что нас ждет в будущем?

Как можно видеть по планам, технология PMR будет с нами еще несколько лет, учитывая наработки с гелиевым наполнением HDD, SMR и использование нескольких приводов (см. Seagate MACH.2 и Exos 2X14: разбираемся в преимуществах двойного привода).

На конференции ASTC 2020 доктор Стефания Эрнандес использовала микромагнитное моделирование, которое масштабировало технологию HAMR до 6,0 Tbpsi (терабит на квадратный дюйм). А доктор Стив Гранц в своей демонстрации HAMR смог получить плотность записи 2,77 Tbpsi, поставив новый рекорд по критериям ASTC.

Seagate с жесткими дисками HAMR уже удалось получить уровень 2,0 Tbpsi. Тестируется технология с плотностью записи 2,381 Tbpsi, она обеспечит емкость 3 Тбайт на пластину, то есть HDD с девятью пластинами смогут дать уже 27 Тбайт емкости. Переход на жесткие диски HAMR не потребует изменения экосистемы и инфраструктуры. На данный момент прогнозируется 20% ежегодный рост емкости, что позволит получить 24-Тбайт HDD в ближайшем будущем, а через несколько лет емкость достигнет 40 Тбайт и выше.

Рано или поздно HAMR будет сочетаться с технологией записи, использующей битовые шаблоны BPMR (bit patterned media). В случае Seagate данная технология называется HDMR (Heated Dot Magnetic Recording), она позволит увеличить емкость жестких дисков до 100 Тбайт и выше.

После HDMR будут и другие технологии, которые позволят Seagate предлагать передовые решения с высокой емкостью по оптимальной цене.

Технические тайны HAMR

Объемы данных продолжают расти, поэтому без дальнейшего повышения емкости жестких дисков не обойтись. Как мы уже неоднократно отмечали, при повышении плотности записи данных возникают проблемы температурной стабильности. Ниже приведена иллюстрация, где зеленым цветом показаны зерна битовой области с двоичным состоянием "1", а белым — зерна области с состоянием "0". Как можно видеть, некоторые зерна поменяли свою ориентацию в области с закодированным битом, став белыми. Подобная смена может приводить к ошибкам, поэтому ее следует предотвращать.


Чтобы увеличить плотность хранения данных, необходимо уменьшать объем зерен на пластине ("V" в формуле ниже). Но при этом теряется температурная стабильность зерен, и для компенсации следует увеличивать анизотропию материала пластины (буква "K"). Анизотропия пропорциональна усилиям, которые необходимы для изменения магнитной ориентации зерен.


Чтобы сохранить высокий уровень SNR, число зерен в бите уменьшать нельзя. Поэтому рост плотности записи возможен только через уменьшение зерен. Но чем меньше зерна, тем выше вероятность смены состояния зерен и потери данных.

Как решить эту проблему? Чтобы ответить на вопрос, давайте обратимся к истории.

Немного истории: как повышалась плотность записи

Первые жесткие диски использовали продольную магнитную запись (LR, Longitudinal Recording), намагничивался верхний слой диска, ориентация зерен параллельна его плоскости. Для записи используется краевое магнитное поле, которое показано на иллюстрации ниже. Обратите внимание на расположение стрелок записываемых данных — в плоскости диска.


При увеличении плотности записи и уменьшении размера зерен, необходимо повышать анизотропию материала, как мы указали ранее. Но по мере того, как материал становится более стабильным, запись оказывается все более трудоемкой, для изменения ориентации зерен требуется уже более сильное магнитное поле. Более 60 лет производители жестких дисков усиливали магнитное поле головки записи, но было очевидно, что такой подход рано или поздно упрется в рамки законов физики.


От PMR к SMR и HAMR

Следующая эволюция плотности записи произошла благодаря переходу на перпендикулярную магнитную запись (PMR, Perpendicular Magnetic Recording). Под слоем пластины с зернами расположен слой магнитомягкого материала, который можно считать частью головки записи. В результате слой с зернами находится как бы в зазоре головки записи, что позволило усилить магнитное поле. Стрелки на записываемых данных расположены уже перпендикулярно поверхности диска, то есть ориентация зерен перпендикулярна плоскости диска.


В итоге удалось уменьшить размер зерен и увеличить плотность записи.

Следующий эволюционный шаг — переход на черепичную магнитную запись (SMR, Shingled Magnetic Recording). SMR увеличивает плотность хранения данных через более близкое расположение дорожек, а не через уменьшение размера зерен. Дорожки частично наслаиваются друг на друга, напоминая черепицу на крыше, отсюда и название. В результате на прежней площади пластины можно записать больше данных. И новые записываемые дорожки частично наслаиваются на старые.

Поскольку элемент чтения на головках намного меньше, чем элемент записи, данные с подобных наслоенных дорожек по-прежнему весьма успешно считываются без каких-либо компромиссов по надежности или целостности. Кроме того, для SMR можно использовать существующие технологии чтения и записи. Здесь не требуется существенно менять производственные конвейеры, поэтому себестоимость разработки и производства жестких дисков SMR остается низкой. Конечно, у SMR есть и недостатки по скорости записи, о чем можно узнать в нашей статье "SMR: понятно в теории, сложно на практике".

Технология SMR действительно обеспечивает увеличение емкости HDD. Seagate представила первый жесткий диск SMR в 2014 году, увеличив емкость на 25 процентов. При этом метод записи битов остался прежним, что позволило сочетать преимущества PMR и SMR. Но и данная технология не позволяет увеличивать плотность записи бесконечно. Современные жесткие диски PMR не могут дать выше 1 терабита на квадратный дюйм (Tbpsi). Законы физики обойти невозможно.

Диски FePt (железо-платина) с высокой анизотропией позволили решить проблемы температурной стабильности традиционных накопителей PMR и увеличить плотность записи. Но обычные головки записи уже не могут записать информацию на такие диски, поскольку магнитное поле недостаточно сильное.

Здесь на помощь приходит технология термомагнитной записи HAMR, которая обходит упомянутое ограничение, нагревая участок диска перед записью.

При комнатной температуре зерна на таком диске по-прежнему маленькие, но термически стабильные. Как раз то, что нам нужно. Благодаря нагреву участка, получается временно снизить коэрцитивную силу вещества.


В итоге запись производится только после нагрева участка, а хранить и считывать данные можно в обычном "холодном" состоянии. Причем весь процесс нагрева, записи и охлаждения занимает менее одной наносекунды.


Головки HAMR напоминают обычные PMR. Но к ним добавлен лазер, оптический волновод и преобразователь ближнего поля NFT (near-field transducer) для облегчения нагрева материала.

Простейший WDM-драйвер

В данной статье описан процесс написания простейшего драйвера, который выводит скан-коды нажатых клавиш.
Также в данной статье описан процесс настройки рабочего места для написания драйверов.
Если Вам интересно, прошу под кат.

Подготовка стенда
Установка необходимого ПО для написания простейшего драйвера
  1. Windows DDK (Driver Development Kit);
  2. VMware Workstation или Virtual Box;
  3. Windows XP;
  4. Visual Studio 2005;
  5. DDKWizard;
  6. KmdManager
  7. DebugView;
Настройка рабочего места
Установка DDK

Установка предельно проста. Единственное на что необходимо обратить внимание — это диалог, в котором Вам предлагается выбрать компоненты, которые будут установлены. Настоятельно рекомендую отметить всю документацию и примеры.

Установка и настройка Microsoft® Visual Studio 2005

Установка Microsoft® Visual Studio 2005 ничем не сложнее установки DDK. Если Вы будете использовать её только для написания драйверов, то когда инсталлятор спросит какие компоненты необходимо установить, выберите только Visual C++.
Далее можно установить Visual Assist X. С помощью этой программы (аддона) можно будет легко настроить подсказки для удобного написания драйверов.
После установки Visual Assist X в Visual Studio 2005 появится новое меню VAssistX. Далее в этом меню: Visual Assist X Options -> Projects -> C/C++ Directories -> Platform: Custom, Show Directories for: Stable include files . Нажимаем Ins или на иконку добавить новую директорию и в появившейся строке, если у вас Windows XP вписываем %WXPBASE%\inc\ddk\wxp .

Установка и настройка DDKWizard
  • Создать системные (рекомендуется) или пользовательские переменные со следующими именами и значением, которое соответствует пути к DDK
    Версия DDK
    Имя переменной
    Путь по умолчанию
    Windows XP DDK
    WXPBASE
    C:\WINDDK\2600
    Windows 2003 Server DDK
    WNETBASE
    C:\WINDDK\3790.1830
    Windows Vista/Windows 2008 Server WDK
    WLHBASE
    Windows 7/Windows 2008 Server R2 WDK
    W7BASE

    Например, если я использую Windows XP DDK, то я должен создать переменную WXPBASE со значением, которое соответствует пути к DDK. Так как я не изменял путь установки, то значение у меня будет C:\WINDDK\2600.
  • Скопируйте скачанный скрипт ddkbuild.cmd, например, в папку с DDK. У меня это C:\WINDDK\.
  • Добавьте в конец системной переменной Path путь к скрипту ddkbuild.cmd.
Установка необходимого ПО для запуска драйверов
  • DebugView (link) — это утилитка, которая позволяет просматривать отладочный вывод как режима пользователя так и режима ядра.
  • KmdManager (link) — утилита динамической загрузки/выгрузки драйверов
Постановка задачи

Задача: написать драйвер, который будет выводить в дебаг скан-коды нажатых клавиш и их комбинаций.

Немного теории
  • драйверы классов;
  • минидрайверы;
  • функциональные драйверы;
  • фильтрующие драйверы.

Необязательно определять все возожные функции в своем драйвере, но он обязательно должен содержать DriverEntry и AddDevice .

IRP — это структура, которая используется драйверами для обмена данными.

  • верхние фильтрующие драйверы;
  • нижние фильтрующие драйверы.
Отличия между верхними и нижними фильтрующими драйверами

Через верхние фильтрующие драйверы проходят все запросы, а это значит, что они могут изменять и/или фильтровать информацию, идущую к функциональному драйверу, ну и далее, возможно, к устройству.
Пример использования верхних фильтрующих драйверов:
Фильтр-хук драйвер, который устанавливает свою хук-функцию для системного драйвера IpFilterDirver, для отслеживания и фильтрации траффика. Такие драйверы используются в брандмауэрах.

Через нижние фильтрующие драйверы проходит меньше запросов потому что большинство запросов выполняет и завершает функциональный драйвер.

Проблемы синхронизации

В драйвере, который мы будем писать, есть несколько «проблемных» секций. Для нашего драйвера вполне достаточно использования ассемблерных вставок:

Префикс lock позволяет безопасно выполнить идущую за ним команду. Она блокирует остальные процессоры, пока выполняется команда.

Экшен

Для начала необходимо включить заголовочные файлы «ntddk.h», «ntddkbd.h»


Также необходимо описать структуру DEVICE_EXTENSION

Объект pLowerDO это объект устройства, который находится ниже нас в стеке. Он нужен нам для того чтобы знать кому дальше отправлять IRP-пакеты.
Еще для работы нашего драйвера нам нужна переменная, в которой будет храниться количество не завершенных запросов.

Начнем с функции, которая является главной точкой входа нашего драйвера.

theDriverObject – объект драйвера, содержит указатели на все необходимые операционной системе функции, которые мы должны будем инициализировать.
ustrRegistryPath – имя раздела в реестре, где хранится информация о данном драйвере.
Для начала необходимо объявить и обнулить переменные:

Далее, как я и писал выше, нужно инициализировать указатели на функции

Функция DispatchRead будет обрабатывать запросы на чтение. Она будет вызываться, когда нажата или отпущена клавиша клавиатуры.
Функция DriverUnload вызывается, когда драйвер уже не нужен и его можно выгрузить из памяти, или когда пользователь сам выгружает драйвер. В данной функции должна производиться «зачистка», т.е. освобождаться ресурсы, которые использовались драйвером, завершаться все незавершенные запросы и т.д.
Функция DispatchThru это функция-заглушка. Все что она делает это передача IRP-пакета следующему драйверу (драйверу который находится под нашим в стеке, т.е. pLowerDO из DEVICE_EXTENSION ).
Далее мы вызываем нашу функцию, для создания и установки нашего устройства в стек устройств:

Эту функцию я опишу чуть ниже.
Возвращаем status , в котором, если функция InstallFilter завершилась удачей, хранится значение STATUS_SUCCESS .
Переходим к функции InstallFilter . Вот её прототип:

Эта функция создает объект устройства, настраивает его и включает в стек устройств поверх \\Device\\KeyboardClass0

pKeyboardDevice – это объект устройсва, которое мы должны создать.
Вызываем IoCreateDevice для создания нового устройства

  • Первый аргумент это объект драйвера, который мы получили как параметр функции InstallFilter. Он передается в IoCreateDevice для того чтобы установить связь между нашим драйвером и новым устройством.
  • Третий параметр это имя устройства
  • Четвертый параметр это тип устройства
  • Пятый параметр это флаги, которые обычно устанавливаются для запоминающих устройств.
  • Шестой параметр описывает можно ли открывать манипуляторы устройства в количестве больше одного. Если FALSE можно открыть только один манипулятор. Иначе можно открыть любое количество манипуляторов.
  • Седьмой параметр это память, в которой будем сохранен созданный объект устройства.

Флаги, которые мы устанавливаем для нашего устройства, должны быть эквивалентными флагам устройства, поверх которого мы включаемся в стек.
Далее мы должны выполнить преобразования имени устройства, которое мы включаем в стек.

Функция IoAttachDevice внедряет наше устройство в стек. В pdx->pLowerDO будет храниться объект следующего (нижнего) устройства.

Далее разберем функцию DispatchRead с прототипом:

Данная функция будет вызываться операционной системой при нажатии или отпускании клавиши клавиатуры
Увеличиваем счетчик незавершенных запросов

Перед тем как передать запрос следующему драйверу мы должны настроить указатель стека для драйвера. IoCopyCurrentIrpStackLocationToNext копирует участок памяти, который принадлежит текущему драйверу, в область памяти следующего драйвера.
Когда запрос идет вниз по стеку в нем еще нет нужных нам данных, поэтому мы должны задать функцию, которая вызовется, когда запрос будет идти вверх по стеку с нужными нам данными.

где ReadCompletionRoutine наша функция.
Передаем IRP следующему драйверу:

Теперь разберем функцию, которая будет вызываться каждый раз при завершении IRP . Прототип:

Структура PKEYBOARD_INPUT_DATA используется для описания нажатой клавиши.

Проверяем, удачно завершен запрос или нет

Чтобы достать структуру KEYBOARD_INPUT_DATA нужно обратиться к системному буферу IRP -пакета.

Узнаем количество клавиш

И выводим каждую клавишу:

И не забываем уменьшать количество не обработанных запросов

Возвращаем статус запроса

Разберем функцию завершения работы. Прототип:

Извлекаем устройство из стека:

Проверяем есть незавершенные запросы или нет. Если мы выгрузим драйвер без этой проверки, при первом нажатии на клавишу после выгрузки будет БСоД.

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

Для запуска драйвера я использовал утилиту KmdManager. Для просмотра отладочной информации использовалась утилита DbgView.

P. S. Статью писал давно, ещё на третьем курсе, сейчас уже почти ничего не помню. Но если есть вопросы, постараюсь ответить.
P. P. S. Прошу обратить внимание на комментарии, в частности на этот

Читайте также: