Please enable JavaScript.
Coggle requires JavaScript to display documents.
98740етпму0978s;gfjp0348725- vsjpdorfh :, Использование C++,…
-
Использование C++
-
Для ядра не существует среды времени выполнения C++, поэтому некоторые возможности C++ просто не могут использоваться
Операторы new и delete
Вместо них Функции-заменители, построенные по образцу функций C malloc и free
-
Глобальные переменные с конструкторами, отличными от конструкторов по умолчанию, вызываться не будут
Вместо них функция инициализации Init (вызывается напрямую из кода драйвера, напр. DriverEntry) или
Создать указатель в виде глобальной переменной и строить фактический экземпляр динамически (предполагается перегрузка new и delete)
Ключевые слова обработки исключений C++ (try, catch, throw) не компилируются, из за собственной среды выполнения
Обработка исключений может осуществляться только с использованием SEH (Structured Exception Handling) — специального механизма РЯ
-
-
-
-
-
-
Завершение
Если драйвер выгружается в момент, когда все еще удерживает выделенную память или открытые дескрипторы РЯ, то ресурсы не освободятся автоматически, только при перезагрузке системы
Драйвер ядра должен тщательно прибрать за собой, никто другой этого не сделает
Завершение процесса не оставляет после себя утечек ресурсов (приватная память освобождается, дескрипторы закрываются и тд)
IRQL
уровень IRQL остается равным нулю большую часть времени, но не всегда.
-
-
Тестирование и отладка
Две машины должны быть каким-то образом соединены, чтобы данные могли передаваться между хостом (на котором выполняется отладчик) и целевой машиной.
-