当前位置: 首页 > news >正文

tiechui_lesson01_入口函数和卸载函数

主要讲解入口函数和卸载函数。

#include <ntifs.h>VOID 
nothing(HANDLE ppid, HANDLE mypid, BOOLEAN bcreate)
{UNREFERENCED_PARAMETER(ppid);UNREFERENCED_PARAMETER(mypid);UNREFERENCED_PARAMETER(bcreate);DbgPrint("processNotify\n");
}VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{UNREFERENCED_PARAMETER(DriverObject);//如果卸载清理的时候不做清理,那么系统会蓝屏(第二个参数设置为TRUE)PsSetCreateProcessNotifyRoutine(nothing, TRUE);DbgPrint("Unload\n");
}NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{DriverObject->DriverUnload = DriverUnload;PsSetCreateProcessNotifyRoutine(nothing, FALSE);DbgPrint("%wZ\n",RegistryPath);return 0;
}

PsSetCreateProcessNotifyRoutine 

在安装驱动的时候注册了一个进程通知回调,在系统中有进程创建或者关闭的时候,调用回调函数。第一个参数为注册的回调函数,第二个是添加和删除回调的布尔值。

[in] NotifyRoutine

指定调用方提供的进程创建回调例程的入口点。 请参阅 PCREATE_PROCESS_NOTIFY_ROUTINE。

[in] Remove

指示是否应从系统的通知例程列表中添加或删除 NotifyRoutine 指定的例程。 如果 为 FALSE,则指定例程将添加到列表中。 如果 为 TRUE,则从列表中删除指定的例程。

有一种蓝屏(BSOD)的情况,如果在卸载函数中没有设置删除设置个进程通知回调函数nothing,那么就会产生BSOD。因为操作系统中保有这个回调指针后,我们卸载掉驱动,那么这个指针所指的函数就不存在了,而操作系统仍然去试图访问这个函数那么就导致了蓝屏。所以需要在卸载驱动的时候调用:

PsSetCreateProcessNotifyRoutine(nothing, TRUE);

来将这个回调函数从操作系统删除掉,之后就不会蓝屏了。

http://www.lryc.cn/news/65052.html

相关文章:

  • 密码学【java】初探究加密方式之非对称加密
  • 网络安全和黑客技能:15本必读书籍推荐
  • 电话号码的字母组合
  • PAT A1032 Sharing
  • Git常见问题汇总
  • 设计模式之代理模式(静态代理动态代理)
  • Java并发编程基础知识概述
  • Redis超详细入门手册教程!还不快来看看?
  • 代码随想录算法训练营第四十九天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
  • 零基础如何学习挖漏洞?看这篇就够了【网络安全】
  • Twitter 推荐算法底有多牛? 已斩获11.7K star
  • 看过这篇文章,读懂数据分析
  • [计算机图形学]光场,颜色与感知(前瞻预习/复习回顾)
  • L4公司进军辅助驾驶,放话无图也能跑遍中国
  • 【Java笔试强训 17】
  • 【IPv6】基本概念及字段
  • 数据库中的 Schema 变更实现
  • 【C++ 学习 ②】- 类和对象(上)
  • 最好的物联网教程:软硬结合——从零打造物联网
  • 猫狗训练集训练报错:Failed to find data adapter that can handle input
  • 中国网络安全人才需求
  • 设计模式之组合模式
  • 计算机基础书籍
  • 保龄球游戏的获胜者、找出叠涂元素----2023/4/30
  • jQuery事件
  • 初识SpringCloud
  • 安装java配置
  • KBO的选秀会有哪些规定和流程`棒球7号位
  • 男子订民宿被毁约5个家庭漂泊街头 房东:住满了,没办法
  • Vue快速入门,常用指令,生命周期