Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1233154388
flaxe
2009-01-28 17:53
2009.03.29
Вопрос про работу с opengl


2-1234257405
Scot Storch
2009-02-10 12:16
2009.03.29
службы (сервисы)


2-1233266659
Тимоха
2009-01-30 01:04
2009.03.29
непонятки со string


2-1233920654
девушка
2009-02-06 14:44
2009.03.29
Для чего используется ReadComponentRes


2-1233557503
Mops
2009-02-02 09:51
2009.03.29
определение variant





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский