Что такое kernel driver
kernel driver
Смотреть что такое «kernel driver» в других словарях:
Kernel Patch Protection — (KPP), informally known as PatchGuard, is a feature of x64 editions of Microsoft Windows that prevents patching the kernel. It was first introduced in 2005 with the x64 editions of Windows XP and Windows Server 2003 Service Pack 1.cite web… … Wikipedia
Driver Verifier — A component of Microsoft Windows Driver Verifier in Windows 7. Driver Verifier is a tool included in Microsoft Windows that replaces the default operating system subroutines with ones that are specifically developed to catch de … Wikipedia
Driver — may refer to: Contents 1 Places 2 Surnames of people 2.1 Fiction 3 Occupation and activity 3.1 … Wikipedia
Kernel (computing) — A kernel connects the application software to the hardware of a computer In computing, the kernel is the main component of most computer operating systems; it is a bridge between applications and the actual data processing done at the hardware… … Wikipedia
Kernel (computer science) — In computer science, the kernel is the central component of most computer operating systems (OS). Its responsibilities include managing the system s resources (the communication between hardware and software components). As a basic component of… … Wikipedia
Kernel-Mode Driver Framework — The Kernel Mode Driver Framework (KMDF) is a driver framework developed by Microsoft as a tool to aid driver developers create and maintain Kernel mode device drivers for Windows 2000. The original release of KMDF only supported Windows XP and… … Wikipedia
Kernel-based Virtual Machine — Infobox Software name = Kernel based Virtual Machine logo = caption = Screenshot of the Windows XP boot up process in a qemu/kvm window in Fedora 7. developer = latest release version = 75 latest release date = release date|2008|09|10 operating… … Wikipedia
Kernel streaming — In Microsoft Windows terminology, Kernel Streaming is a technique that supports kernel mode processing of streamed data. It enables efficient real time streaming for multimedia devices such as sound cards and TV tuner cards. Kernel streaming… … Wikipedia
Kernel-Mode — Schema der Ringe beim x86 System mit Gates zur Kommunikation Der Ring, auch Domain genannt, bezeichnet im Umfeld der Betriebssystem Programmierung und des Multitaskings eine Privilegierungs bzw. Sicherheitsstufe eines Prozesses. Diese schränkt… … Deutsch Wikipedia
Kernel-Modus — Schema der Ringe beim x86 System mit Gates zur Kommunikation Der Ring, auch Domain genannt, bezeichnet im Umfeld der Betriebssystem Programmierung und des Multitaskings eine Privilegierungs bzw. Sicherheitsstufe eines Prozesses. Diese schränkt… … Deutsch Wikipedia
Device driver — Operating systems Common features … Wikipedia
Windows Kernel Drivers — Стандартные ошибки – IRQL
Данная статья нацелена на тех, кто только недавно начал разрабатывать kernel-драйвера под ОС Windows. В 100-ый раз видишь ненавистную надпись IRQL_NOT_LESS_OR_EQUAL и этот грустный смайлик? Тогда прошу пройти под кат.
Одной из основных ошибок, которую я и сам совершал, является жонглирование IRQL так, как душе угодно, и неполное понимание внутреннего устройства работы приоритетов потоков в ядре Windows.
К примеру, у вас есть кусок кода, который генерирует какое-либо событие по PID-процесса.
Внутри данного кода, используются разделяемые данные, синхронизация которых, обеспечивается спинлоком. Также нам нужно получить имя процесса, чтобы залогировать событие.
Уже увидели ошибку в данном фрагменте?
PsLookupProcessByProcessId() – требует соблюдения условия: IRQL
И вот дальше, начинается самое интересное. Первое решение, которое придёт в голову новичкам, будет менять уровень IRQL перед вызовом данной функции так, чтобы условие соблюдалось.
То есть, переписать код — вот так:
Вот теперь то, всё работает достаточно стабильно. Но, на самом деле это не так. Данный код только хорошо маскирует проблему, снижая шансы её проявления до минимума, но в 1 из 1000 случаев, она всё же всплывёт, а вы будет рвать на себе волосы, пытаясь понять в чём же ошибка.
И тут нужно вспомнить одно из правил написания драйверов, а именно:
«Понижать IRQL можно только в том случае, если вы его собственноручно повышали, и только до его предыдущего значения!»
Если какой-либо код вызвал вашу функцию на IRQL = APC_LEVEL, то вы не имеете права опустить его ниже данного уровня. Вы можете поднять IRQL до DISPATCH_LEVEL, потом опустить обратно до APC_LEVEL, но не ниже.
Таким образом, более приемлемым вариантом кода, будет:
А вспомогательные функции по типу SetIrql() из 2-го примера, в принципе не являются адекватными с точки зрения интерфейса, т.к. при проектировании отдельных методов в вашем драйвере, важно продумывать ограничения накладываемые на предусловия вызова вашей функции.
Для описания данных предусловий, удобно использовать аннотации SAL, их список вы можете посмотреть тут:
Также Microsoft предоставляет небольшой whitepaper(в самом низу статьи) по управлению приоритетами потоков в ядре, и более подробно рассказывает некоторые тонкости по работе с ними:
Если же, вам всё-таки нужно каким-либо образом вызвать какое-либо Api, требующее более низких значений IRQL, то одним из вариантов решения данной проблемы могут стать WorkItem’ы. Но о них, я расскажу уже в другой статье.
Создание драйверов надежных Kernel-Mode
Драйверы составляют значительный процент от общего кода, выполняемого в режиме ядра. Драйвер режима ядра, фактически, является компонентом операционной системы. Поэтому драйверы, которые являются надежными и безопасными, значительно влияют на общую надежность операционной системы. Чтобы создать надежный драйвер режима ядра, следуйте приведенным ниже рекомендациям.
Обеспечьте правильную защиту объектов устройств.
Доступ пользователей к драйверам и устройствам системы осуществляется с помощью дескрипторов безопасности, которые система назначает объектам устройств. Чаще всего система устанавливает параметры безопасности устройства при установке устройства. Дополнительные сведения см. в разделе Создание защищенных установок устройств. Иногда драйвер может играть часть в управлении доступом к своему устройству. Дополнительные сведения см. в разделе Защита объектов устройств.
Проверьте правильность объектов устройств.
Если драйвер создает несколько типов объектов устройств, он должен проверить, какой тип он получает в каждом IRP. Дополнительные сведения см. в разделе сбой при проверке объектов устройств.
Используйте функции «безопасного типа».
При управлении строками драйвер должен использовать функции с надежными строками, а не строковые функции, предоставляемые библиотеками среды выполнения языка C/C++. дополнительные сведения см. в разделе использование Сейф строковых функций.
Проверка дескрипторов объектов.
Драйверы, получающие дескрипторы объектов в качестве входных данных, должны проверять, являются ли дескрипторы допустимыми, доступны ли они и имеют ли они ожидаемый тип. Дополнительные сведения об использовании дескрипторов объектов см. в следующих разделах:
Поддержка многопроцессорности должным образом.
Никогда не следует считать, что драйвер будет работать только в однопроцессорных системах. Сведения о методах программирования, которые можно использовать, чтобы убедиться, что драйвер будет правильно функционировать в многопроцессорных системах, см. следующие разделы:
Правильно обработайте состояние драйвера.
Важно всегда проверять, находится ли драйвер в том состоянии, в котором он предполагается. Например, если драйвер получает IRP, то уже обслуживает IRP того же типа? Если драйвер не проверяет эту ситуацию, первый IRP может быть потерян. Дополнительные сведения см. в разделе сбой при проверке состояния драйвера.
Проверка входных значений IRP.
Это важно для проверки всех значений, связанных с IRP, таких как буферные адреса и длины, с точки зрения надежности и безопасности. Следующие разделы содержат сведения о проверке входных значений IRP:
Правильно обработайте стек ввода-вывода.
При передаче запросов IRP вниз по стеку драйверовважно, чтобы драйверы вызывали иоскипкуррентирпстакклокатион или иокопикуррентирпстакклокатионтонекст для настройки расположения стека ввода-вывода следующего драйвера. Не создавайте код, который непосредственно копирует одно расположение стека ввода-вывода в следующий.
Правильно обрабатывайте операции завершения IRP.
Драйвер не должен заполнять IRP со значением состояния STATUS_SUCCESS, если только он не поддерживает и не обрабатывает IRP. Сведения о правильных способах управления операциями завершения IRP см. в разделе Завершение IRP.
Правильно обрабатывайте операции отмены IRP.
Операции отмены могут быть сложными для правильного кода, так как они обычно выполняются асинхронно. Проблемы в коде, обрабатывающем операции отмены, могут пойти незамеченными в течение длительного времени, поскольку этот код обычно не выполняется часто в работающей системе.
Не забудьте прочитать и разобраться в информации, предоставляемой при отмене запросов IRP. Обратите особое внимание на синхронизацию отмены IRP и моменты, которые следует учитывать при отмене запросов IRP.
Одним из способов избежать проблем синхронизации, связанных с операциями отмены, является реализация очереди ненадежных запросов IRP. безнадежная очередь IRP — это управляемая драйвером очередь, которая появилась для Windows XP и более поздних версий операционных систем, но также обратно совместима с предыдущими версиями.
Правильно обрабатывайте операции очистки и закрытия IRP.
Дополнительные сведения об правильной обработке запросов IRP см. в разделе Дополнительные ошибки при обработке запросов IRP.
Использование средства проверки драйверов
Средство проверки драйверов — это наиболее важный инструмент, который можно использовать для обеспечения надежности драйвера. Средство проверки драйверов может проверять различные распространенные проблемы с драйверами, в том числе некоторые из обсуждаемых в этом разделе. Однако использование средства проверки драйверов не заменяет осторожность, продуманное проектирование программного обеспечения.
Руководство по проектированию архитектуры драйверов Kernel-Mode
Сведения о программных интерфейсах, которые драйвер может реализовывать или вызывать, см. в справочнике по драйверам режима ядра.
Этот раздел содержит общие понятия, помогающие понять программирование в режиме ядра и описывает конкретные методы программирования ядра. общие сведения о драйверах Windows см. в разделе начало работы с драйверами Windows, в которых представлен общий обзор компонентов Windows, перечислены типы драйверов устройств, используемых в Windows, описаны цели Windows драйверов устройств и обсуждаются универсальные примеры драйверов устройств, входящие в комплект.
Этот раздел содержит общие сведения, описывающие и помогающие создавать драйверы режима ядра.
компоненты режима ядра описывают основные диспетчеры режима ядра и компоненты операционной системы Windows.
Компонент | Описание |
---|---|
Диспетчер | |
диспетчер объектов Windows Kernel-Mode | Управляет объектами: файлами, устройствами, механизмами синхронизации, разделами реестра и т. д. |
диспетчер памяти Windows Kernel-Mode | Управляет физической памятью для операционной системы. |
Windows Kernel-Mode процессов и диспетчер потоков | Обрабатывает выполнение всех потоков в процессе. |
диспетчер ввода-вывода Windows Kernel-Mode | Управляет взаимодействием между приложениями и интерфейсами, предоставляемыми драйверами устройств. |
диспетчер самонастраивающийся Windows Kernel-Mode | Подсистема диспетчера ввода-вывода, диспетчер самонастраивающийся (PnP) позволяет компьютеру распознать, когда устройство добавляется в систему. |
Windows Kernel-Mode Power Manager | Управляет упорядоченным изменением состояния электропитания для всех устройств, поддерживающих изменения состояния электропитания. |
Windows Kernel-Mode Configuration Manager | Управляет реестром, например наблюдение за изменениями в реестре или регистрация обратных вызовов для конкретных данных реестра. |
диспетчер транзакций ядра Kernel-Mode Windows | Реализует обработку транзакций в режиме ядра. |
монитор справочника по безопасности Windows Kernel-Mode | Предоставляет подпрограммы, позволяющие драйверу работать с контролем доступа. |
Libraries | |
библиотека ядра Windows Kernel-Mode | Реализует основные функциональные возможности, от которых зависит все остальные компоненты операционной системы. ядро Microsoft Windows предоставляет базовые низкоуровневые операции, такие как планирование потоков или маршрутизация аппаратных прерываний. |
библиотека поддержки Windows Kernel-Mode Executive | Относится к компонентам режима ядра, которые предоставляют различные службы для драйверов устройств, в том числе: Управление объектами, управление памятью, управление процессами и потоками, управление входными и выходными данными и управление конфигурацией. |
библиотека Run-Time Kernel-Mode Windows | Набор общих служебных подпрограмм, необходимых для различных компонентов режима ядра. |
Windows Kernel-Mode Сейф библиотеки строк | Надежная библиотека строк для обеспечения большей безопасности при разработке в режиме ядра. |
библиотека Windows Kernel-Mode DMA | Библиотека прямого доступа к памяти (DMA) для разработчиков драйверов устройств. |
библиотека Windows Kernel-Mode HAL | Слой абстрагирования оборудования (HAL) для разработки драйверов в режиме ядра. |
Windows Kernel-Mode библиотеки CLFS | Транзакционная система ведения журнала, файловая система CLFS (CLFS). |
библиотека WMI Windows Kernel-Mode | общий механизм управления компонентами, именуемый инструментарий управления Windows (WMI) (WMI). |
написание драйверов wdm и введение в wdm предоставляют сведения, необходимые для записи драйверов с помощью WDM (WDM).
Объекты устройств и другие разделы в объектах устройств и в стеках устройств описывают, как операционная система представляет устройства по объектам устройств.
управление памятью для драйверов Windows показывает, как драйверы режима ядра выделяют память для таких целей, как хранение внутренних данных, буферизация данных во время операций ввода-вывода и совместное использование памяти с другими компонентами режима ядра и пользовательского режима.
Безопасность Чтобы обеспечить максимально безопасную безопасность, от управления доступом к устройствам и привилегиями на SDDL для объектов устройств.
Обработка IRP описывает, как драйверы режима ядра обрабатывают пакеты запросов ввода-вывода (IRP).
Канал DMA Прямой доступ к памяти (DMA) — это важный аспект разработки драйверов, а темы на этом узле охватывают DMA от а до я.
Объекты контроллера представляют собой контроллер физического устройства с подключенными устройствами.
Программы-обработчики прерываний (ISR) обработают прерывания для драйверов физического устройства, принимающего прерывания.
Сигнальные прерывания вызывают прерывание, записывая значение в определенный адрес памяти.
Отложенные вызовы процедур (объекты DPC) могут быть поставлены в очередь из ISR и выполняться позже, а уровень IRQL — ниже, чем при ISR.
Самонастраивающийся (PnP) специализируется на поддержке программного обеспечения для PnP и о том, как драйверы используют эту поддержку для реализации PnP.
Управление питанием описывает архитектуру, обеспечивающую комплексный подход к управлению питанием системы и устройств.
инструментарий управления Windows (WMI) (WMI) являются расширениями для драйвера в режиме ядра, что позволяет драйверу стать поставщиком WMI. Поставщик WMI делает данные измерений и инструментирования доступными для потребителей WMI, таких как приложения пользовательского режима.
Методики программирования драйверов для драйверов программирования в режиме ядра Windows требуются методы, которые иногда значительно отличаются от обычных средств программирования в пользовательском режиме.
Dadaviz
NVIDIA Windows Kernel Mode Driver перестал отвечать — что делать
Ошибка «Видеодрайвер NVIDIA Windows Kernel Mode Driver перестал отвечать» очень распространена среди любителей поиграть в компьютерные игры на различных версиях Windows (7/8/10). Перегрузки видеокарты приводят к системным сбоям и нарушениям правильной работы. Такое возникает непосредственно в игре или в самом ее начале. Хотя случаи появлений ошибки иногда просто нельзя объяснить, ведь пользователь может в этот момент просматривать фильм. Для каждой драйвера с ошибкой также указана его версия (Version 372.90, 375.70, 373.06, 314.22, 341.95 и другие).
Пример ошибки драйверов NVIDIA
Обновляем видеокарту
В выдаваемом окне можно увидеть слово driver. Именно драйвера в первую очередь и нужно проверять. Они могут устареть или установиться не корректно, в том случае, если были скачаны не с официального сайта.
Пытаемся решить при помощи DirectX
Установка последнего DirectX очень важный шаг для любого геймера. Без его нормальной работы рассчитывать на успешный запуск игры не приходится. Тут главное уловить момент. Если ошибка появляется в начале загрузки, значит проблема с большой долей вероятности в DirectX.
DirectX лучше скачивать только с официального источника – Microsoft. Также он идет к любой компьютерной игре в комплекте. Папка, где он обычно храниться именуется «Redist».
Работа по настройкам видеокарты
Проблема может крыться в сбитых или несоответствующих настройках видеокарты. Иногда в играх, сложных программах включены завышенные параметры, а в видеокарте нет.
Восстанавливаем параметры 3D
Вот подробная видео-инструкция по настройке видеодрайвера.
Повышаем производительность
Очень актуально при ошибке NVIDIA Windows Kernel Mode Driver для ноутбуков c Windows (7/8/10). Попробуйте выставить производительность системы на максимум.
Изменяем производительность энергообеспечения ноутбука
Повысив производительность, уберите все возможные фоновые программы. Если на рабочем столе стоят анимированные обои, то их следует заменить. Установите стандартный фон.
Проверяем Adobe Flash Player. Если баг «Видеодрайвер перестал отвечать» выскакивает в браузере, то возможно стоит обновить Adobe Flash Player. Думаю с его обновлением, проблем возникнуть не может.
Плата видеокарты
Ошибка видеодрайвера Nvidia windows kernel mode driver – это не только программные сбои, но и возможные физические поломки. Следует перейти к непосредственному изучению самой платы видеокарты.
Данные советы помогут вам понять что делать и как исправить проблему со сбоем «Видеодрайвер перестал отвечать и был успешно восстановлен» в Windows (7/8/10).