Форум: "Прочее";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизА можно ли вообще при проектировании драйверов использовать ООП? Найти похожие ветки
← →
Городской Шаман (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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.051 c