Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

А можно ли вообще при проектировании драйверов использовать ООП?   Найти похожие ветки 

 
Городской Шаман   (2009-01-22 23:21) [0]

Насколько я понял компилятор для сборки драйверов почти не понимает конструкции С++. В принципе это и правильно. Но возможно ли использовать C++ для написания kernel-mode кода?


 
jack128_   (2009-01-22 23:25) [1]


> В принципе это и правильно.

почему если не секрет??


 
Городской Шаман   (2009-01-22 23:29) [2]


> jack128_   (22.01.09 23:25) [1]
>
>
> > В принципе это и правильно.
>
> почему если не секрет??


Потому что там очень хитрое выделение памяти и ее освобождение. Если с paged memory еще как-то можно реализовать, то с nonpaged вешайся. Мне бы хотя бы для paged, ну там new, delete, виртуальные функции. Мне много не нужно...


 
Eraser ©   (2009-01-22 23:46) [3]

форум это не справочная система. неужели даже букварь влом почитать.


 
Городской Шаман   (2009-01-23 00:02) [4]


> Eraser ©   (22.01.09 23:46) [3]
>
> форум это не справочная система. неужели даже букварь влом
> почитать.


Ну почему, читал
C++ Issues for Kernel-Mode Drivers
http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx


 
Eraser ©   (2009-01-23 00:05) [5]

мда... склоняюсь к тому, что не зря MS ввело обязательную сертификацию драйверов. с такими писателями по-другому никак видимо.


 
Городской Шаман   (2009-01-23 00:18) [6]


> Eraser ©   (23.01.09 00:05) [5]
>
> мда... склоняюсь к тому, что не зря MS ввело обязательную
> сертификацию драйверов. с такими писателями по-другому никак
> видимо.


Нет, я понимаю что это можно сделать через перегрузку оператора new, но это геморрой перегружать его для каждого класса.


 
Городской Шаман   (2009-01-23 00:45) [7]

Ладно, разобрался, всем спасибо.


 
Пробегал2....   (2009-01-23 00:53) [8]

Удалено модератором


 
Пробегал2....   (2009-01-23 00:55) [9]

Удалено модератором


 
Пробегал2....   (2009-01-23 00:56) [10]

Удалено модератором


 
Германн ©   (2009-01-23 00:58) [11]


> В драйверах тут 90% ничего не понимают

Не. 99.9(9)% в драйверах тут ничего не понимает.
Но "умные" вопросы задают многие.


 
AndreyV ©   (2009-01-23 01:08) [12]

> [6] Городской Шаман   (23.01.09 00:18)
>
> > Eraser ©   (23.01.09 00:05) [5]
> >
> > мда... склоняюсь к тому, что не зря MS ввело обязательную
>
> > сертификацию драйверов. с такими писателями по-другому
> никак
> > видимо.
>
>
> Нет, я понимаю что это можно сделать через перегрузку оператора
> new, но это геморрой перегружать его для каждого класса.

Можно стандартный переопределить
::operator new()
::operator new[]()


 
Johnmen ©   (2009-01-23 01:19) [13]


> Пробегал2....   (23.01.09 00:55) [9]

Вам что-то не нравится? М.б. стОит пойти туда, где Вас любят?


 
Городской Шаман   (2009-01-23 01:32) [14]


> Пробегал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)
{
 PAGED_CODE();
 return ExAllocatePoolWithTag(PagedPool, lBlockSize, YOURMEM_TAG);
}

__inline void* __cdecl operator new(size_t lBlockSize, int pageType)
{
 //здесь типа по pageType выбираем функцию под нужный тип памяти
 PAGED_CODE();
 return ExAllocatePoolWithTag(PagedPool, lBlockSize, YOURMEM_TAG);
}

__inline void __cdecl operator delete( void *p )
{
 PAGED_CODE();

 if (!p)
   return;

 ExFreePoolWithTag(p, YOURMEM_TAG);
}

__inline void __cdecl operator delete( void *p, int pageType)
{
 //здесь типа по pageType выбираем функцию под нужный тип памяти

 PAGED_CODE();

 if (!p)
   return;

 ExFreePoolWithTag(p, YOURMEM_TAG);
}


Использовать так

class PagedObject
{
};

PagedObject* newPO = new PagedObject;
int* int_tst = new int;
int* int_tst_unpages = new(10) int;//10 означает что используем нестраничную память из нужного пула


 
Городской Шаман   (2009-01-23 01:34) [15]


> AndreyV ©   (23.01.09 01:08) [12]
>
> Можно стандартный переопределить
> ::operator new()
> ::operator new[]()


Это я уже понял, просто мне проще сперва вслух сформулировать вопрос, а потом дать на него ответ, тоже вслух.


 
Игорь Шевченко ©   (2009-01-23 01:40) [16]

Странно. У меня в каталоге %SystemRoot%\System32\drivers как минимум десяток драйверов написанных на С++, причем фирмы вроде солидные - ATI, Realtek. Кроме того, ядерная часть GDI (которая в драйвере Win32k.sys) она тоже на С++.

Ну и в примерах DDK тоже есть драйверы на С++

Но раз Софт считает, что нельзя - ну увы.

Хотя я лично не вижу причин для ненаписания драйверов на С++. А уж ООП - оно и в Африке ООП (то есть, в драйверах, опять же)


 
ketmar ©   (2009-01-23 01:41) [17]

как хорошо… как хорошо, что Линус не стал писать Linux на *этом*… а то вот понаписали бы…

---
All Your Base Are Belong to Us


 
Игорь Шевченко ©   (2009-01-23 01:43) [18]

ketmar ©   (23.01.09 01:41) [17]

на *этом* - это на чем ?


 
Городской Шаман   (2009-01-23 02:04) [19]


> Игорь Шевченко ©   (23.01.09 01:40) [16]


А можно ссылку на исходники данного драйвера, так как я в WinDDK\6001.18001\src\ не нашёл примеров использования ООП при разработке драйверов, поэтому и спрашивал.


 
Городской Шаман   (2009-01-23 02:22) [20]

А здесь они похоже уже определены
#include <stdunk.h>


 
ketmar ©   (2009-01-23 02:22) [21]

>[18] Игорь Шевченко © (2009-01-23 01:43:00)
на цпп.

---
Understanding is not required. Only obedience.


 
Городской Шаман   (2009-01-23 02:33) [22]


> ketmar ©   (23.01.09 02:22) [21]
>
> >[18] Игорь Шевченко © (2009-01-23 01:43:00)
> на цпп.


Ну там чиста-С. И что в этом хорошего?


 
Petr V. Abramov ©   (2009-01-23 02:44) [23]


> А можно ли вообще при проектировании драйверов использовать
> ООП?

1. Вы знаете ОПП
2. Вы прооекттирете драйверы

ВАш ответ на вопрос "неужна ли эта технология на этой задаче?"
если нет ответа то:
Вы не использовали ООП. ну спросите че-нить "как бы применить ООП к вот таким вызовам, а если никак, то агрументируйте, хоть на уровне нет объектов
Вы объектно-ориентированный парограммист, заставили писать драйверы. задайте вопрос "я объектный, а тут такая задача. есть тут объектность или забить? :)


 
ketmar ©   (2009-01-23 02:52) [24]

>[22] Городской Шаман (2009-01-23 02:33:00)
>там чиста-С. И что в этом хорошего?

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

---
All Your Base Are Belong to Us


 
Городской Шаман   (2009-01-23 03:00) [25]


> Petr V. Abramov ©   (23.01.09 02:44) [23]


Без ООП обойтись можно, но с ним удобнее. Просто я уже привык мыслить объектами. Без них можно, но примерно как детской лопаткой самосвал загружать.

В принципе ООП там есть, но это не особо тривиально.


 
Городской Шаман   (2009-01-23 03:01) [26]


> ketmar ©   (23.01.09 02:52) [24]
>
> >[22] Городской Шаман (2009-01-23 02:33:00)
> >там чиста-С. И что в этом хорошего?
> нет набора костылей и набора граблей, заботливо разложеных
> трупом страуса в самых интересных и приятных местах.


Обходя щедро разложенные на пути грабли, ты теряешь драгоценный опыт.


 
ketmar ©   (2009-01-23 03:18) [27]

>[26] Городской Шаман (2009-01-23 03:01:00)
идиотия может быть только печальным опытом. благодарю, я не мазохист.

---
Do what thou wilt shall be the whole of the Law.


 
test   (2009-01-23 05:22) [28]

ketmar ©   (23.01.09 03:18) [27]
В одной очень старой книжке по программированию игр автор страниц 5 доказывал что игры можно писать не только на ассемблере!


 
le croise   (2009-01-23 08:54) [29]

http://ldeniau.web.cern.ch/ldeniau/cos.html


 
han_malign ©   (2009-01-23 10:37) [30]


> нет набора костылей и набора граблей, заботливо разложеных
> трупом страуса в самых интересных и приятных местах.

- ну а как же набор костылей и набор граблей - при функциональной декомпозиции? Нахрен - забыть про инструкцию call - только линейный код и исключительно jxx и int - только так можно добиться максимальной прозрачности управления стеком...


 
ketmar ©   (2009-01-23 10:55) [31]

>[28] test (2009-01-23 05:22:00)
>В одной очень старой книжке по программированию игр автор страниц 5 доказывал что
>игры можно писать не только на ассемблере!

и знаешь — во многих случаях он прав. что-то я не видел вменяемых игр для ZX Spectrum, например, написаных не на асме.

>[30] han_malign © (2009-01-23 10:37:00)
>ну а как же набор костылей и набор граблей — при функциональной декомпозиции?

никак. в отличие от цпп, цэ — хороший макроассемблер. и как хороший макроассемблер, он не делает неявных и неочевидных действий. я ж не против там ООП вообще, я против героиновых глюков трупа страуса. тот же Objective C намного логичней, приятней, красивей, удобней, проще и мощней. вдобавок совместим с простым C, а C++ нифига не совместим (я про перекомпиляцию исходников без правки).

---
All Your Base Are Belong to Us


 
Jukadze   (2009-01-23 11:19) [32]

>он не делает неявных и неочевидных действий.

Вся беда в том, что пользователи не хотят читать и запоминать руководства. Для C++ есть неплохое руководство: Annotated Reference Manual, где объясняются большинство неявных и неочевидных действий, а так же причины, по которым эти действия были введены. Поэтому, милочка, идите в сад.


 
ketmar ©   (2009-01-23 13:52) [33]

>[32] Jukadze (2009-01-23 11:19:00)
>Вся беда в том, что пользователи не хотят читать и запоминать руководства.

неа. не хочу. если что-то надо *запоминать* и это логически не очевидно, то это называется «костыль» или «грабли».

>Поэтому, милочка, идите в сад.
уй, пусичка. ты что, абиделась? ну пожуй фекалии ещё, пожуй — у тебя так яро и колоритно выходит…

---
Understanding is not required. Only obedience.


 
Jukadze   (2009-01-23 14:20) [34]

ketmar ©   (23.01.09 13:52) [33]

>неа. не хочу. если что-то надо *запоминать* и это логически не очевидно, то это называется «костыль» или «грабли».

Ну не хотите, так не пользуйтесь, и другим не мешайте. Если бы вы прочли ARM, то поняли бы, что все то, что вы называете костылями, есть логические следствия базового дизайна языка, который очень гибок и мультипарадигменнен. Ни что, как вы знаете, не дается бесплатно.

>ты что, абиделась?

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


 
Игорь Шевченко ©   (2009-01-23 14:25) [35]

ketmar ©   (23.01.09 02:22) [21]


> на цпп.


С ним что-то не так ? Можешь привести реальные аргументы ?


 
KSergey ©   (2009-01-23 14:38) [36]

> Игорь Шевченко ©   (23.01.09 14:25) [35]
> С ним что-то не так ? Можешь привести реальные аргументы?

Это кал из костылей и граблей! неужели нужны еще аргументы?!

PS
Меня всегда поражало ортодоксальное устройство мозгов юниксоидов. Видимо потому мне и не испытать кайфа от использования *nix, увы.


 
test   (2009-01-23 15:06) [37]

ketmar ©   (23.01.09 10:55) [31]
С тех пор ничего не изменилось?


 
ketmar ©   (2009-01-23 15:19) [38]

>[37] test (2009-01-23 15:06:00)
>С тех пор ничего не изменилось?

а я откуда знаю, о какой ты книге? ты сказал «старая». я тебе привёл пример. ты же даже архитектуру и время выпуска не уточнил.

---
Do what thou wilt shall be the whole of the Law.


 
ketmar ©   (2009-01-23 15:20) [39]

>[35] Игорь Шевченко © (2009-01-23 14:25:00)
>С ним что-то не так ? Можешь привести реальные аргументы ?

Игорь, мы с тобой это уже неоднократно обсуждали же.

---
Do what thou wilt shall be the whole of the Law.


 
ketmar ©   (2009-01-23 15:21) [40]

>[36] KSergey © (2009-01-23 14:38:00)
ну так оно и видно, незашореный наш.

---
Do what thou wilt shall be the whole of the Law.



Страницы: 1 2 3 вся ветка

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.028 c
2-1233739538
zorik
2009-02-04 12:25
2009.03.29
Смена типа на ходу


2-1233221405
apic
2009-01-29 12:30
2009.03.29
64 bit


15-1233183371
Германн
2009-01-29 01:56
2009.03.29
Ох уж мне эти писатели "кривых" драйверов! -2


2-1233922206
Barsuk
2009-02-06 15:10
2009.03.29
Обход перехвата WinAPI-функции


15-1232824673
Unknown user
2009-01-24 22:17
2009.03.29
Модель приложения, основанная на сообщениях.