-
Насколько я понял компилятор для сборки драйверов почти не понимает конструкции С++. В принципе это и правильно. Но возможно ли использовать C++ для написания kernel-mode кода?
-
> В принципе это и правильно.
почему если не секрет??
-
> jack128_ (22.01.09 23:25) [1]
>
>
> > В принципе это и правильно.
>
> почему если не секрет??
Потому что там очень хитрое выделение памяти и ее освобождение. Если с paged memory еще как-то можно реализовать, то с nonpaged вешайся. Мне бы хотя бы для paged, ну там new, delete, виртуальные функции. Мне много не нужно...
-
форум это не справочная система. неужели даже букварь влом почитать.
-
-
мда... склоняюсь к тому, что не зря MS ввело обязательную сертификацию драйверов. с такими писателями по-другому никак видимо.
-
> Eraser © (23.01.09 00:05) [5]
>
> мда... склоняюсь к тому, что не зря MS ввело обязательную
> сертификацию драйверов. с такими писателями по-другому никак
> видимо.
Нет, я понимаю что это можно сделать через перегрузку оператора new, но это геморрой перегружать его для каждого класса.
-
Ладно, разобрался, всем спасибо.
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
> В драйверах тут 90% ничего не понимают
Не. 99.9(9)% в драйверах тут ничего не понимает.
Но "умные" вопросы задают многие.
-
> [6] Городской Шаман (23.01.09 00:18)
>
> > Eraser © (23.01.09 00:05) [5]
> >
> > мда... склоняюсь к тому, что не зря MS ввело обязательную
>
> > сертификацию драйверов. с такими писателями по-другому
> никак
> > видимо.
>
>
> Нет, я понимаю что это можно сделать через перегрузку оператора
> new, но это геморрой перегружать его для каждого класса.
Можно стандартный переопределить
::operator new()
::operator new[]()
-
> Пробегал2.... (23.01.09 00:55) [9]
Вам что-то не нравится? М.б. стОит пойти туда, где Вас любят?
-
> Пробегал2.... (23.01.09 00:56) [10]
>
> Городской Шаман (23.01.09 0:45) [7]
> Ладно, разобрался, всем спасибо
>
> ну так разобрался - расскажи в трех словах и нам ;)
Просто переопределить операторы, код не особо рабочий просто для примера
#define YOURMEM_TAG 0xfef1
__inline void* __cdecl operator new(size_t lBlockSize)
__inline void* __cdecl operator new(size_t lBlockSize, int pageType)
__inline void __cdecl operator delete( void *p )
__inline void __cdecl operator delete( void *p, int pageType)
Использовать так
class PagedObject
;
PagedObject* newPO = new PagedObject;
int* int_tst = new int;
int* int_tst_unpages = new(10) int;
-
> AndreyV © (23.01.09 01:08) [12]
>
> Можно стандартный переопределить
> ::operator new()
> ::operator new[]()
Это я уже понял, просто мне проще сперва вслух сформулировать вопрос, а потом дать на него ответ, тоже вслух.
-
Странно. У меня в каталоге %SystemRoot%\System32\drivers как минимум десяток драйверов написанных на С++, причем фирмы вроде солидные - ATI, Realtek. Кроме того, ядерная часть GDI (которая в драйвере Win32k.sys) она тоже на С++.
Ну и в примерах DDK тоже есть драйверы на С++
Но раз Софт считает, что нельзя - ну увы.
Хотя я лично не вижу причин для ненаписания драйверов на С++. А уж ООП - оно и в Африке ООП (то есть, в драйверах, опять же)
-
как хорошо… как хорошо, что Линус не стал писать Linux на *этом*… а то вот понаписали бы…
---
All Your Base Are Belong to Us
-
ketmar © (23.01.09 01:41) [17]
на *этом* - это на чем ?
-
> Игорь Шевченко © (23.01.09 01:40) [16]
А можно ссылку на исходники данного драйвера, так как я в WinDDK\6001.18001\src\ не нашёл примеров использования ООП при разработке драйверов, поэтому и спрашивал.