Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли тащить в драйвер обычные linkedlistы на C 
:(
    Опции темы
LimyKurn
Дата 22.9.2018, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.9.2018

Репутация: нет
Всего: нет



или можно юзать исключительно NTшные?

Пример ситуации.
Есть код драйвера. Там есть минифильтр с каллбеками, который кладет данные в очередь, и отдельный поток, которые каждые n минут проверяет эту очередь, и если заполнена — то передает ее куда-то далее, и очищает\пересоздает очередь. В качестве очереди автор выбрал никакой не список, а просто PWCHAR фиксированной длины, и это, конечно, тоже решение, но, например, оно почти не поддается масштабированию. Надо бы его заменить списком.

Еще пример. Здесь случай уже несколько иной.
В реестре есть настройка — ключ строкового типа, который содержит список строк через разделитель. Логичнее еще в DriverEntry распарсить эту строку на linked list, чем парсить ее каждый раз снова и снова. Опять же нужен список.

Объединяет эти случаи одно — и там, и тут нужен список.

Но стоит ли торопиться сразу осваивать специальные списки NT, такие, как SINGLE_LIST_ENTRY?
И что, если между тем списки нужны еще на одной платформе — смежной по применению, но в корне отличающейся технически — такой, как микроконтроллеры? Там уж точно не пригодятся знания NT. То есть, тебе всё равно предстоит смотреть самодельные реализации списков на Си с гитхаба, выбирать какую-то из них и допиливать ее.
Приходится всерьез рассмотреть что-то вроде "кроссплатформенности", вернее — переносимости кода.

В основе переделки — замена malloc/free на ExAllocate***/ExFree***.

Менее очевидные нюансы:
— NT обычно требовательно к быстродействию. Ранее уже упоминались каллбеки, так они могут вызываться очень много где и очень много раз подряд. Чем быстрее они будут отрабатывать — тем лучше. Но разве что-то может быть быстрее, чем твоя собственная реализация linkedlist'а, где ты можешь реализовать любые свои хотелки, да и априори ничего дорогого там вроде нет?
— Синхронизация в NT более сложная. В тех же каллбеках иногда доступны лишь спинлоки и InterlockedExchange. Тем не менее, не видится проблем все это приспособить к списку — если уж он вообще годен в сложившейся ситуации как таковой.

Если тащить эти linkedlist'ы в драйвер все-таки решительно нельзя — то я готов с этим согласиться. Но ответ нужен аргументированный, чтобы знать почему, и уметь кому-нибудь объяснить.
PM MAIL   Вверх
xvr
Дата 24.9.2018, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Никакая NT, вместе со всей MS, не запретит вам писать свой код в драйвере. И если этот код будет дублировать функциональность каких то встроенных средств, представленных MS для драйверописателей, никоим образом не должно волновать процессор - ему всё равно, чей код исполнять (ваш или MS).

Списки не используют каких либо секретных знаний о ядре и/или интерфейсе ОС, так что вполне можете заменить их своими.

Цитата(LimyKurn @  22.9.2018,  16:37 Найти цитируемый пост)
Но стоит ли торопиться сразу осваивать специальные списки NT, такие, как SINGLE_LIST_ENTRY?

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


Это сообщение отредактировал(а) xvr - 24.9.2018, 15:38
PM MAIL   Вверх
_zorn_
Дата 19.10.2018, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Драйвер, это ВСЕГДА потенциальный BSOD. Особенно если написан лично. Не надо лезть в ядро без необходимости (там гавяное АПИ smile).

Цитата(xvr @  24.9.2018,  22:37 Найти цитируемый пост)
Никакая NT, вместе со всей MS, не запретит вам писать свой код в драйвере

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

Это сообщение отредактировал(а) _zorn_ - 19.10.2018, 16:27
PM MAIL   Вверх
xvr
Дата 20.10.2018, 14:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(_zorn_ @  19.10.2018,  16:12 Найти цитируемый пост)
 Винда тупо не загрузит твой драйвер если он не подписан. 

А если ТС в драйвере вместо своих linkedlist'ов будет использовать SINGLE_LIST_ENTRY то драйвер автоматически подпишется?  smile 

Цитата(_zorn_ @  19.10.2018,  16:12 Найти цитируемый пост)
Можно отключить конечно, но для распространения не годится.

И какое это имеет отношение к вопросу ТС?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1344 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.