Объекты C++ в функциях драйвера kernel mode

Тема в разделе "WASM.NT.KERNEL", создана пользователем retmas, 21 дек 2009.

  1. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Господа!

    Вопрос: какие ограничения на использования объектов (классов) в ф-иях в драйвере?

    Кроме, конечно, ограничение размера стека.

    Вообще, насколько возможно использовать классы на стеке в ф-иях драйвера?
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Ограничения вот такие:
    - нужно определить new/delete
    - CRT не вызывает constructors/destructors у глобальных переменных (instances)
    - С++ exceptions не работают
    - нету STL

    Так что это подмножество языка С++. Вполне рабочее. Просто надо свою простую шаблонную библиотеку зацепить.
     
  3. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
  4. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    -это те что какие??Интересно то что под этим подразумевается) типа handler_except3?
     
  5. reversecode

    reversecode Guest

    Публикаций:
    0
    try/catch/throw
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Обязательно объявлять для своих классов? или можно объявить для базовых типов?
     
  7. reversecode

    reversecode Guest

    Публикаций:
    0
    можно просто переопределить - этого будет достаточно
     
  8. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    -это всего лишь "слова", я спрашивал про реализацию
     
  9. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    про реализацию Great как-то один раз упомянул. только как-то затихло.
     
  10. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    ограничения связаны с баном в гугле )
    http://www.google.com/search?&q=windows+kernel+C%2B%2B+library
     
  11. reversecode

    reversecode Guest

    Публикаций:
    0
    я вроде по-русски отвечаю
    но вижу что меня не понимают

    вопрос был
    ответ последовал
    ваше
    вообще не в ту степь
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вот никогда без меня не разберутся ^^
    Разъясняю на пальцах. Мы не подключаем стандартную библиотеку, когда собираем драйвер. Поэтому:
    - не будут работать зависимые от среды функции (которые используют апи ОС), в том числе операторы new/delete
    - мы перенаправляем точку входа к себе => не будут вызываться инициализаторы и терминаторы для глобальных переменных. Сюда, кстати, попадают не только глобальные объекты с их конструкторами и деструкторами. Следующий инициализатор тоже не будет вызван:
    int rand();
    int some_rand = rand();

    - нет обработчика __CxxThrowException, __CxxExceptHandler3 => не будут работать С++ исключения try/catch/throw.
    Не путать с SEH (__try/__except - он обрабатывается операционной системой, в _except_handler3).

    Не знаю как у вас, а у меня большинство шаблонов из STL работало чудесно. Помню, определял свой аллокатор и, вроде бы, всё.

    Речь про реализацию в этом топике не шла. RET, кажется, имел в виду, посредством каких стандартных функций реализованы try/catch/throw.
    Ответ ему выше: __CxxThrowException, __CxxFrameHandler(X).
    Hint: учитесь понимать новичков без словарного запаса)

    А уж коли речь зашла про то, как сделать так, чтобы C++ исключения заработали в ядре - на это будет мой отдельный пост в ближайшем времени в этом разделе.

    J0E
    Я понимаю, что от большого ума хочется блеснуть этим самым умом :lol: , но спрашивали в основном не "как сделать так, чтобы в ядре с плюсами было зашибись", а "почему в ядре с плюсами не всё зашибись" :) Может чувак хотел это все сам сделать, а ты его так обломал)) Отчасти шучу, конечно. Но не факт еще, что реализация "из гугола" не окажется криворукой )

    * * *
    А мы с вами увидимся в следующем выпуске, не переключайтесь! :lol:
     
  13. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Мой ответ и был: потому что неумеем искать в гугле.
    2я строка по моему запросу http://www.hollistech.com/Resources/Cpp/kernel_c_runtime_library.htm - new+delete и инициализация статиков.
     
  14. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Какую реализацию брал, STLPort? У MS в контейнерах используются объекты синхронизации, от которых не вполне ясно как избавиться.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    J0E
    Брал реализацию MS стандартную из Visual Studio 2008. Ах да, с синхронизацией я что-то тоже модифицировал.
     
  16. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Не хочешь публиковать измененные исходники по лицензионным, или другим ограничениям?
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    J0E
    Опубликую на днях вместе со статьей про устройство обработчиков исключений и RTTI.

    simnet_
    Создай отдельную тему плиз. Не подходит сюда
     
  18. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    О, C001 ) то есть на днях следует ждать STL часть стандартной библиотеки плюс поддержку исключений и RTTI? И не криворукую как "из гугола"? Хороший подарок к НГ! )
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сарказм?)

    ПС. Что есть "C001"? :)
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia