Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём неправильно. Необходимо обновить браузер или попробовать использовать другой.
РАЗБОРСтатья
Создание драйвера под Windows. Часть 2: Как выгрузить драйвер и первый функционал.
И снова здравствуйте, пришло время продолжить работу над нашим драйвером.
На данный момент мы:
Настроили рабочее окружение
Настроили тестовую машину
Написали, скомпилировали и даже запустили наш первый драйвер
База у нас есть, теперь начнем работать над функционалом. Те, кто повторял за мной в первой статье, могли заметить, что в нашем драйвере отсутствует функция выгрузки. Поэтому, чтобы запустить наш драйвер заново, приходится перезагружать виртуальную машину, что не очень удобно. Мало того, это может быть небезопасно - ведь ядро не будет само удалять драйвер из памяти, он будет там висеть пока система не перезагрузится, что может привести к утечкам памяти. Для данной операции предусмотрена функция DriverUnload, которая принимает в себя указатель на DriverObject и возвращает void.
Так как наш драйвер пока что не сделал ничего, чтобы потребовало дополнительных действий перед его выгрузкой, наша функция будет выглядеть крайне просто.
В коде DriverEntry также передадим указатель на DriverObject. DriverObject->DriverUnload = CodebyDriverUnload;
Теперь пересобираем наш драйвер, и проверим, работает ли выгрузка. На тестовой машине вызываем службу запуска драйвера. sc start CodebyDriver
Теперь вызовем службу остановки драйвера. sc stop CodebyDriver
Отлично! функция CodebyDriverUnload отработала.
Наш драйвер большой молодец: умеет загружаться и выгружаться! Однако, все понимают, да и он сам понимает, что он бесполезен.
Давайте научим его делать что-нибудь. Я бы хотел, чтобы он собирал информацию о системе, на которой он запущен.
Для этого надо проштудировать документацию.
Например, давайте определим какая версия Windows установлена на нашей машине.
Для этого нам пригодятся структура OSVERISONINFOW и функция RtlGetVersion.
Инициализируем новую структуру info в которой будут записаны данные OSVERISONINFOW.
C++:
RTL_OSVERSIONINFOW info = { sizeof(info) };
Далее передадим функции RtlGetVersion адрес нашей структуры.
C++:
RtlGetVersion(&info);
Теперь, все что нам надо - это вывести необходимую информацию.
Все отработало отлично, и теперь наш драйвер стал чуточку полезнее.
На этом вторая часть закончена. Я решил не писать полотна текста, а поставлять информацию небольшими частями. Причин на это несколько:
Материал не из легких и усвоить все сразу в больших количествах будет сложно, что может отбить интерес.
Писать небольшие статьи проще и менее ресурсозатратно лично для меня.
В следующей части мы познакомимся с выделением памяти и последующей ее очисткой перед выгрузкой драйвера.
Подскажите пожалуйста. Я тоже прочитал документацию, но я если честно вообще не понял синтаксис и как использовать эту функцию API. Подскажите кто сможет пожалуйста
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь. Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.
Комментарии
2