Использование ООП в драйверах ядра

Тема в разделе "LANGS.C", создана пользователем wasm_test, 3 мар 2007.

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Где-то читал, что нельзя использовать классы и прочую объекто-ориентированную лабудень в драйверах режима ядра.
    Решил вот проверить ( доверяй, но проверяй ;) )
    Прекрасно работают классы, виртуальные функции и прочие прелести.
    А если определить операторы new и delete:
    Код (Text):
    1. void* __cdecl operator new(unsigned int nBytes)
    2. {
    3.     return ExAllocatePoolWithTag( NonPagedPool, nBytes, 'wen<' );
    4. }
    5.  
    6. void __cdecl operator delete(void* Object)
    7. {
    8.     ExFreePool( Object );
    9. }
    то можно и динамически создавать объект и компилятор автоматом вставит вызов конструктора и деструктора.

    Так вот вопрос теперь. Действительно ли какие-то прелести объектно-ориентированного С++ не прокатят в ring0, или же меня нагло обманули?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    "Можно, если осторожно". У Cоmpuware целый ООП фреймворк.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну вот я и спрашиваю, какие осторожности надо соблюдать) Потому что я пока что ничего странного не выявил.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    Человеку свойственно бояться того, что он не понимает :))
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну почему же ты решил, что я не понимаю? =)
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    Да я не о тебе - я об авторе мнения что

     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    лоол я это кажется прочитал в мсдн =)))))))))))))))00

    ну вообщем какие есть мысли насчет того, что нельзя использовать?
     
  8. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Наверное нельзя использовать потому, что неизвестно что пользователь поподключает, и чему это приведет (в смысле инициализации). А если это твои объекты написанные с нуля - то можно (хотя тоже неизвестно во что компилятор это все превратит).
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

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

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    ООП в драйверах... зачем? С точки зрения удобства, ну это кому как. С точки зрения того, что будет сгенерировано - мусора только больше, имхо супер баян.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    EP_X0FF
    это скорее проверялось из любопытства, чем для реального использования..
     
  12. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Обманули. К сожалению, давно уже вся ООП-хрень работает и в ядре.

    Насчет нельзя мыслей нет. MS сказала можно и нужно и выпустила KMDF. Ну а юзать или нет - это кто какому богу поклоняется.
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    EP_X0FF

    Бред. Какого еще мусора?
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Хе. Как какого? Связанного с ООП. Таблицы методов классов хотя бы те же.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    мм насколько я помню создается только _vftable для виртуальных методов..
     
  16. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    n0name

    Для обеспечения динамического полиморфизма необходима таблица виртуальных функций, и это не мусор а естественный элемент. Во-первых, никто не заставляет пользоваться динамикой - суть ООП далеко не в этом. Во-вторых, приведи-ка примеры еще какого-нить "мусора", кроме таблиц виртуальных функций.
     
  17. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    _DEN_

    Бред =) А ты скомплируй два драйвера и сравни ;)
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    EP_X0FF

    Заняться мне больше нечем. "Мусор" в исполняемом коде всецело зависит от компилятора. Используй нормальные компиллеры с правильными опциями. Концепция практически любого языка не имеет жестких завязок на правила генерации машинного кода, поэтому выражения типа "С точки зрения того, что будет сгенерировано - мусора только больше" говорят о поверхностном знании предметной области и излишней самоуверенности. Ничего личного.
     
  19. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    а плюсовые ексепшины интересно корректно работают в ядре? проверял кто-нибудь?
    ООП без ексепшинов - это уже не ООП
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    z0mailbox
    Надо проверить..