Liveqos ndis 6 filter driver что это

Обновлено: 06.07.2024

Краткий обзор драйверов спецификации NDIS

Сетевые драйверы можно разделить на 2 категории: TDI-драйверы (Transport Driver Interface) и NDIS-драйверы (Network Driver Interface Specification). TDI-драйверы — это высокоуровневые драйверы, например, SMB-клиент, SMB-сервер, обертки SMB (NFFS, MSFS) и т.п. Мы с Вами рассмотрим NDIS-драйвера. NDIS — это специальный драйвер (ему соответствует файл ndis.sys), который содержит функции, используемые низкоуровневыми сетевыми драйверами. NDIS как бы обволакивает низкоуровневые сетевые драйверы и является посредником в их общении между собой и с железом. По сути NDIS можно считать третьим ядром Windows. Чтобы более четко уяснить себе что из себя представляет NDIS можно посмтореть на следующую картинку:

  • Минипорт-драйверы (драйверы адаптера)
  • Промежуточные драйверы (например, psched.sys)
  • Драйверы протокола (например, tcpip.sys)
Минипорт-драйверы
  • производит инициализацию своего устройства (адаптера)
  • создание /включение/выключение/удаление сетевых подключений
  • выдача клиенту или изменение параметров адаптера
  • отправка пакетов
  • получение пакетов
  • оповещение ОС о состоянии адаптера
  • перезагрузка и остановка адаптера

Минипорт-драйверы бывают «Connectionless» (например, драйвер Ethernet-адаптера) и «Сonnection-oriented» (например, драйвер модема). У Сonnection-oriented драйверов система коллбэков чуть сложнее, в нее входят обработчики событий, связанных с подключением к каналу связи, отключением от канала, выбором канала (для беспроводных адаптеров) и т.п. Для некоторых операций Сonnection-oriented драйверы вызывают специальные функции NDIS, отличающиеся префиксом «Со» в имени (например, вместо NdisMIndicateReceivePacket Сonnection-oriented драйвер должен вызывать NdisMColndicateReceivePacket).

Каждый коллбэк выполняет свою задачу: выдача информации, отправка данных, прием данных и т.п. Подробнее можно посмотреть в хелпе к WDK (DDK). Там можно получить полную информацию о коллбэках.

Драйверы протоколов могут передоверять минипорт-драйверу (при условии, что минипорт-драйвер это умеет — либо сам, либо адаптер умеет это делать на аппаратном уровне) некоторые свои функции (например, разграничить контрольную сумму или цифровую подпись IP-пакета или принять решение, как фрагментировать большой ТСP-пакет). Это значительно повышает производитель сети.

  1. LBFO (Load Balancing and Fail Over) — позволяет понимающим его адаптерам распределять между собой исходящий трафик и исправлять ошибки друг друга. Впрочем, что имеет смысл только на backbone routers (центральных маршрутизаторах больших сетей), на которые редко ставят Windows
  2. FFP (Fast Forwarding Path) — позволяет понимающим его адаптерам маршрутизировать/фильтровать пакеты чисто аппаратно, вообще без участия ОС и не нагружая основные процессоры компьютера
Промежуточные драйверы

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

  • организуют «справедливый» доступ разных клиентских программ к адаптерам дабы программы не мешали друг другу
  • фильтруют и перехватывают трафик
  • маршрутизируют пакеты из одной сети в другую, если эти сети различаются (например, Ethernet и WI-FI)
Драйверы протоколов

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

К драйверам протоколов относятся и драйверы транспорта, реализующие стек сетевых протоколов, такой как например TCP/IP (tspip.sys).

Если пост будет интересен читателям, то в следующих постах можно конкретно на примере написать свой сниферо-подобный промежуточный драйвер или также описать как написать каждый из типов драйверов (минипорта, промежуточный или протокола).

NDIS. NET_BUFFER architecture

image

Продолжаем начатый цикл статей о NDIS. В этом топике рассмотрим версии NDIS, и принципы передачи пакетов между драйверами «стека» и архитектуру NET_BUFFER.

Введение

Для начала разберемся с версиями NDIS и их особенностями в связи с тем, что их чуточку больше чем одна.

  • NDIS 5.1. Windows XP, Server 2003. Большинство драйверов написано под эту версию и портировать их никто не берется, т.к. портировать там особо и нечего — почти всё придётся переписывать заново;
  • NDIS 5.2. Windows Server 2003 SP2. Под эту версию, скорее всего не написано ни одного драйвера, т.к. тут прекрасно работают драйвера от 5.1;
  • NDIS 6.0. Windows Vista. подсистема NDIS в Windows Vista претерпела громаднейшие изменения, добавлены новые виды драйверов, улучшена производительность;
  • NDIS 6.1. Windows Vista SP2, Server 2008. Та же история, что и с NDIS 5.2;
  • NDIS 6.20. Windows 7. Небольшие изменения относительно NDIS 6.0, поддержка последней в режиме эмуляции.

Старый хлам в виде W2K с его NDIS 4.0 я трогать не буду, т.к. смысла это поддерживать нет. Так же майкрософт прекращает поддержку NDIS 5.1 в Windows 8.
Как видно из списка огромная пропасть располагается между NDIS 5.x и NDIS 6.x. Фактически, из обшего у них остались только архитектурная особенность и библиотека функций. Вся остальная начинка была перебрана для повышения производительности. Кстати, этого повышения наисследовали 20%, так что хоть в чем-то Vista лучше предшественника. К архитектуре добавились драйверы-фильтры, которых так не хватало в предыдущих версиях. Принципы передачи пакетов кардинально изменились, а именно: если раньше промежуточный драйвер должен был реализовывать как минимум по три функции приёма и отправки пакетов, то сейчас количество этих функций в любом случае равняется одной. Это стало возможно благодаря новой архитектуре передачи пакетов, называемой NET_BUFFER. О ней поговорим ниже.

NET_BUFFER architecture

Итак, что же это такое? По сути, NET_BUFFER — это замена предшествующему NDIS_BUFFER'y, но обо всём по порядку. Что было? Драйвер реализует по три функции отправки и приема пакетов. Говоря русским языком назовём эти функции так:

Первые параметры — по сути указатель, который будет передавать вам NDIS. При регистрации драйвера, а точнее при его присоединении к очереди вы можете указать этот самый указатель. Т.о. у нас в распоряжении всегда находится ссылка на пользовательскую переменную, у которой, как известно, безграничная сфера применения. Очень удобно.
Вторые параметры — указатели на списки NET_BUFFER'ов. С этим разберемся позже.
Все остальные параметры используются редко, поэтому их рассматривать мы не будем.

Переходим к самой архитектуре.
Картинка ниже примерно обрисовывает архитектуру:

image

image

Каждый NET_BUFFER может описывать пакет так, как на картинке ниже:

В заштрихованном пространстве и хранится наш пакет. Как видите, это не обязательно непрерывный блок памяти, один пакет может быть разбросан по всему системному адресному пространству. Так же советуется хранить пакеты в невыгружаемой памяти (для справки: при попытке доступа к выгружаемой памяти на IRQL >= DISPATCH_LEVEL мы получим синий экран с кодом D1. DRIVER_IRQL_NOT_LESS_OR_EQUAL, самая частая ошибка драйверо-писателей).

Сразу вопрос, зачем оставлять пустое пространство перед пакетом? Затем, что когда IP-пакет спускается вниз, то он оборачивается в Ethernet-фрейм для отправки. И чтобы это дело не пересобирать, Ethernet-заголовок просто записывается передпакетом. Достаточно продуманно. Тот же принцип реализован и в драйверах верхнего уровня. Вся информация о т.н. backfill (оно же DataOffset) пространстве, смещениях и длине буфера хранится в структуре NET_BUFFER. Так же хочу отметить, что размер буфера можно менять, т.е. начало буфера можно отодвинуть влево, или конец вправо. Для этого используются специальные функции, экспортируемые ядром NDIS.

Вместо заключения

В этой статье намерено упущено огромное количество деталей, с которыми я столкнулся в процессе изучения подсистемы NDIS. Их я не публикую, т.к. количество материала, при этом, не уместилось бы ни в какие разумные рамки. Одновременно я стараюсь пролить свет на некоторые key features, которые считаю базовыми для понимания сути происходящего.

HP Velocity & Citrix Provisioning Target Device (6.1) software conflict


HP Recommended
  • Mark as New
  • Bookmark
  • Subscribe
  • Email to a Friend

Not a question, just sharing info.

The presence of the HP Velocity software will cause the Citrix Provisioning Target Device software from properly being able to send an image to the Provisioning Server (version used: 6.1). You will receive the error "Error: vDisk is not available. Please check your network PXE boot Configuration and restart imaging wizard." Other blog posts point towards having nonpresent NICs in the Device Manager as causing this issue--and I don't doubt that it does. There's just an additional cause: HP Velocity. The resolution was to uninstall HP Velocity, uninstall the Target Device software, then reinstall the Target Device software and dump the vDisk as normal.

Additionally, HP Velocity seems to be not compatible with VMXNET 2 virtual NICs in VMWare; the LiveQoS NDIS 6 Filter Driver network service does not attach properly. VMXNET 3 works. (My headaches appeared when attempting to upgrade virtual NICs while attempting to deploy HP Velocity to provisioned XenApp servers.)

Just putting this out there for the search engines to pick up. Putting it under the HP Thin Client section for reasons obvious to HP Velocity users.

‎02-12-2014 08:55 AM


HP Recommended
  • Mark as New
  • Bookmark
  • Subscribe
  • Email to a Friend

Updating my original post, since it contains inaccuracies.

Further investigation shows that HP Velocity has no difficulty attaching the LiveQoS NDIS 6 Filter Driver to a VMXNET 2 virtual NIC. What HP Velocity does have difficulty with is attaching the LiveQoS NDIS 6 Filter Driver to a NIC that is communicating with the Citrix Provisioning Server. To test, I added three additional virtual NICs to the VM as it was running: an E1000, a VMXNET 2, and a VMXNET 3. The LiveQoS network service successfully attached to all three additional virtual NICs.

To get around this, I reverse imaged my provisioned vDisk to a local drive on the VM, booted to that local drive, uninstalled HP Velocity, uninstalled the Target Device software, rebooted, reinstalled HP Velocity, disabled the LiveQoS NDIS 6 Filter Driver in the network adapter properties, reinstalled the Target Device software, and ran the wizard to dump a new vDisk.

This left me with a new golden image with HP Velocity correctly installed, but the LiveQoS network service that allows it to intercept/monitor network communications disabled. From here, when I enable the LiveQoS network service, about 50% of the time it works properly (and can successfully monitor/protect traffic), and 50% of the time it breaks communication with the Citrix Provisioning Server, causing the VM to hang.

From here, if I take one of the successful attempts and write it back to a new version of the vDisk (via a maintenance mode version), then attempt to boot off of that updated version of the vDisk with the LiveQoS NDIS Filter Driver enabled, I invariably receive a stop error when booting: 0x0000007B.

From the searching I've done, this is typically received due to two reasons: the golden image is missing MS hotfix KB2550978, or the provisioned machine is connecting to the provisioning server using a virtual NIC that has a different ethernet adapter pci address than what was seen on the original Target Device. However, neither of these solutions seems to apply in this case. I've made sure that KB2550978 was installed on the Target Device, and I'm using the same Target Device VM to boot the updated vDisk, so the pci address cannot have changed.

I've got a Citrix SR open, and I'm attempting to get HP support in on this as well. I'll keep this updated with my endeavors.

Почему появляется ошибка в файле Ndis.sys

NDIS (Network Driver Interface Specification) являет собой спецификацию интерфейса сетевого драйвера, соответственно ndis.sys – это файл, связанный с NDIS. Сбои в работе компонента Windows нередко появляются после установки нового оборудования или программного обеспечения, так что для решения проблемы немаловажно отследить, что предшествовало данному событию.

Ошибка может быть вызвана следующими факторами:

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

Методы исправления ошибки Ndis.sys

Сканирование компьютера на вредоносные программы

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

Удаление стороннего антивируса

Нередко ошибка BSoD может появляться после установки обновлений Windows 10, в то время как на устройстве был установлен сторонний антивирусный софт. В таком случае следует удалить защитное ПО и перезагрузить компьютер. Если ошибка больше не возникает, его можно опять установить антивирус.

BSoD с ошибкой Ndis.sys

Синий экран смерти в Windows с ошибкой Ndis.sys

Обновление драйверов

Эффективным методом исправления ошибки Ndis.sys является процедура обновления драйверов сетевых устройств. Синий экран, включая рассматриваемую ошибку, часто вызван именно некорректными или повреждёнными драйверами. Это можно сделать вручную, загрузив софт с официального сайта производителя оборудования или с использованием специальных программ. Ещё один вариант предполагает использования встроенной службы Windows – Диспетчера устройств, перейти к нему можно через «Пуск». Находим драйверы сетевого оборудования и нажатием на каждом из них ПКМ вызываем контекстное меню, где выбираем действие «Обновить».

Откат сетевых драйверов

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

Чтобы откатить драйверы, выполняем следующие действия:

  • Идём в Диспетчер устройств.
  • Переходим в ветку «Сетевые адаптеры» и выбираем сетевое устройство в раскрывшемся меню.
  • Жмём ПКМ и переходим в «Свойства».
  • Во вкладке «Драйвер» нажимаем «Откатить драйвер», если кнопка активна.
  • Подтверждаем действие и перезагружаем компьютер.

Замена файла Ndis.sys

Многим пользователям удаётся избавиться от проблемы путём переноса в системную папку элемента Ndis.sys с другого компьютера (из каталога Servicepackfiles), на котором проблем с ним не возникает. Для переноса драйверов с устройства на устройство можно использовать специальный софт.

Обновление системы

Попробуйте обновить Windows, для чего нужно перейти в Центр обновлений (Пуск – Параметры – Обновление и безопасность – Центр обновления Windows) и проверить наличие доступных обновлений для вашей ОС. Служба выполнит проверку автоматически и установит необходимые обновления.

Средства защиты иногда становятся причиной некорректной установки ПО, включая обновления Виндовс, поэтому во время выполнения обновлений ОС лучше отключать защиту, чтобы антивирус не смог помешать системным процессам.

Восстановление системы Windows

Параметры восстановления после сбоя Windows

Возврат к сохранённой точке восстановления

Один из действенных способов восстановления Windows и её компонентов – возврат к ранее созданной контрольной точке (при её наличии). Это поможет вернуть систему в то состояние, когда сбоев ещё не возникало, в том числе и устранить ошибку с файлом Ndis.sys. Есть и другие способы восстановления операционной системы, позволяющие избавиться от проблем с работоспособностью ОС.

Отключение, удаление программ для работы с VPN/Прокси

Если на компьютерное устройство устанавливался софт для работы с VPN, а также инструменты, обеспечивающие сетевым приложениям способность работать через прокси-серверы, это могло привести к ошибке с файлом Ndis.sys. Попробуйте отключить или удалить, чтобы проверить, исчезла ли проблема.

Удаление виртуальных сетевых драйверов

Установленные виртуальные машины, например, VirtualBox или прочие, а также установленные виртуальные сетевые адаптеры могли стать причиной ошибки 0x000000d1 Ndis.sys. Если так, способ исправления сбоя заключается в удалении виртуального сетевого адаптера.

Проверка системных файлов встроенной утилитой SFC

В Windows есть системный инструмент, позволяющий проверить целостность системных файлов и восстановить повреждённые элементы, заменив их корректными. Чтобы запустить утилиту SFC (System File Checker) потребуются права администратора. Так, выполняем следующее:

  • Открываем консоль «Выполнить» (сочетанием клавиш Win+R).
  • Вводим в поле команду cmd.
  • В терминале запускаем процесс командой sfc/scannow и ожидаем окончания сканирования.

При обнаружении повреждений системных компонентов, они будут восстановлены, если это возможно.

Дамп памяти после BSoD

Проверка жёсткого диска на ошибки

  • Загружаемся в «Безопасном режиме» (для этого нужно перезагрузить устройство и при загрузке нажать соответствующую клавишу, например, F2, F12 или Del).
  • Открываем командную строку от имени администратора (через Пуск).
  • В интерфейсе консоли вводим chkdsk /f /r и жмём клавишу ввода.
  • Будет предложено запланировать задачу, соглашаемся и перезагружаем компьютер.
  • Процесс проверки диска начнётся автоматически. При обнаружении проблем, они будут исправлены, если это возможно.

Кроме стандартного инструмента Widows для проверки диска можно использовать и специализированный сторонний софт.

Проверка оперативной памяти на наличие ошибок

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

  • Загружаем образ программы, нажимаем на нём ПКМ и выбираем опцию «Извлечь в текущую папку», выбираем путь сохранения на компьютере.
  • Открываем извлечённую папку и запускаем утилиту ImageUSB.
  • Выбираем подключённый USB-накопитель, чтобы сделать из него загрузочный (в результате форматирования в ходе процедуры будет потеряна имеющаяся на носителе информация, поэтому копируем её, если она важна).
  • Когда Memtest86 будет установлена, перезагружаемся и начинаем тестирование памяти на ошибки.

Программа Memtest

Проверка оперативной памяти после сбоя

Исправление записей реестра

Сброс сетевых настроек Windows

Если предыдущие способы не помогли, можно сбросить параметры сети. После сброса сетевые настройки вернуться к исходному состоянию, как при установке Windows, поэтому если для работы интернет-подключения необходим ручной ввод определённых параметров, нужно будет настраивать всё заново. Метод подразумевает автоматическое удаление и повторную установку в системе сетевых адаптеров, он не гарантирует исправление проблемы, но в некоторых случаях может быть эффективен. Выполняется процедура в Windows 10 следующим образом:

  • Идём в Параметры (через кнопку Пуск или, задействовав клавиши Win+I).
  • Переходим в раздел «Сеть и Интернет» и из меню в левой части окна выбираем «Состояние».
  • Листаем страницу вниз и находим здесь «Сброс сети», нажимаем.
  • Жмём кнопку «Сбросить сейчас», подтверждаем действие и ждём, пока устройство перезагрузится.

При подключении к сети после перезагрузки вам необходимо выбрать тип подключения компьютера (общественная или частная сеть).

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