На чём пишут драйвера, C или C++?
От: legogogo  
Дата: 22.07.10 09:55
Оценка:
На чём обычно пишут драйвера под винду на Си или C++?
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re: На чём пишут драйвера, C или C++?
От: Sni4ok  
Дата: 22.07.10 09:57
Оценка:
Здравствуйте, legogogo, Вы писали:

L>На чём обычно пишут драйвера под винду на Си или C++?


обычно на си
Re: На чём пишут драйвера, C или C++?
От: bazis1 Канада  
Дата: 22.07.10 10:10
Оценка:
Здравствуйте, legogogo, Вы писали:

L>На чём обычно пишут драйвера под винду на Си или C++?

В силу исторических причин, обычно на Си. Но есть ряд библиотек, позволяющих писать на С++. Например, уже покойная numega driver studio или моя BazisLib.
Аргументы сторонников C обычно сводятся к тому, что С++ медленнее, хотя конкретных примеров никто не приводит. В итоге, многие драйвера состоят чуть менее чем полностью из копипасты реализации "стандартной" функциональности (например, обработка состояний PnP-устройства в WDM).
Re[2]: На чём пишут драйвера, C или C++?
От: bazis1 Канада  
Дата: 22.07.10 10:15
Оценка: :)))
Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:

#define private _private
#define new _new
#include "related_linux_headers.h"
#undef new
#undef private
Re[3]: На чём пишут драйвера, C или C++?
От: legogogo  
Дата: 22.07.10 10:22
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:


Чесно говоря не вижу смысла писать под Linux дрова на C++, так как стандартные библиотеки Си и C++ не используются, придётся постоянно писать extern "c" {}, будет ли оно работать стабильно тоже вопрос...

Под виндой та же ситуация со стандартной библиотекой Си, можно использовать только функции из ядра и никаких stdlib.h?
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re[4]: На чём пишут драйвера, C или C++?
От: bazis1 Канада  
Дата: 22.07.10 10:30
Оценка:
Здравствуйте, legogogo, Вы писали:

L>Здравствуйте, bazis1, Вы писали:


B>>Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:


L>Чесно говоря не вижу смысла писать под Linux дрова на C++, так как стандартные библиотеки Си и C++ не используются, придётся постоянно писать extern "c" {}, будет ли оно работать стабильно тоже вопрос...


L>Под виндой та же ситуация со стандартной библиотекой Си, можно использовать только функции из ядра и никаких stdlib.h?

STLPort под оба кернела заводится без проблем.
PROFIT!! начинается, когда пишется более одного драйвера. Тогда вместо копипасты и ручной инициализации хреновой тучи таблиц можно сделать набор библиотечных классов в виртуальными методами и пронаследовать конкретные реализации от них. Сравните реализации HandleStopDevice() в примерах bulkusb и isousb. Копипаста 99%. В случае с C++ это была бы общая библиотека и класс а-ля:

class CBulkUsbDevice : public BasicUSBDevice
{
    NTSTATUS HandleStopDevice(...) override
    {
        DoSomethingSpecific();
        return __super::HandleStopDevice(...)
    }
}


На чистом C пришлось бы городить руками таблицы функций, включение структур и приведение типов.
Re[5]: На чём пишут драйвера, C или C++?
От: legogogo  
Дата: 22.07.10 10:41
Оценка:
Здравствуйте, bazis1, Вы писали:

B>STLPort под оба кернела заводится без проблем.


Интересно.
А есть какой нибудь документ гв сети где перечислены нововведения в windows api в Windows 7? В сравнении с Vista в семёрке много нововведений, разных механизмов, функций и т.д. и что в семёрке устарело?
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re[6]: На чём пишут драйвера, C или C++?
От: bazis1 Канада  
Дата: 22.07.10 11:26
Оценка:
Здравствуйте, legogogo, Вы писали:

L>Здравствуйте, bazis1, Вы писали:


B>>STLPort под оба кернела заводится без проблем.


L>Интересно.

L>А есть какой нибудь документ гв сети где перечислены нововведения в windows api в Windows 7? В сравнении с Vista в семёрке много нововведений, разных механизмов, функций и т.д. и что в семёрке устарело?
Я не в теме. Из интересного — IoSetIoPriorityHint() и иже с ними. Спросите в профильной конфе.
Re: На чём пишут драйвера, C или C++?
От: пыщьх http://rsdn_user.livejournal.com
Дата: 22.07.10 16:44
Оценка:
Здравствуйте, legogogo, Вы писали:

L>На чём обычно пишут драйвера под винду на Си или C++?

Некоторые (не будем показывать пальцем) до сих пор пишут на ассемблере.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[2]: На чём пишут драйвера, C или C++?
От: mrTwister Россия  
Дата: 24.07.10 09:24
Оценка: :)
Здравствуйте, пыщьх, Вы писали:

П>Здравствуйте, legogogo, Вы писали:


L>>На чём обычно пишут драйвера под винду на Си или C++?

П>Некоторые (не будем показывать пальцем) до сих пор пишут на ассемблере.

Соответствующая иллюстрация:

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