2023驱动保护学习 -- 创建驱动设备及符号链接并实现删除操作

简介: 2023驱动保护学习 -- 创建驱动设备及符号链接并实现删除操作

一、新建一个C文件进行设备添加删除操作

1、创建设备操作,通过状态判断是否创建成功,创建的设备名称只能在内核中使用,如果要在外部应用使用,需要通过符号链接使用,所以需要创建符号链接

NTSTATUS 创建设备(PDRIVER_OBJECT 驱动对象)
{
  NTSTATUS 状态码;
  UNICODE_STRING 驱动名称aiyou;
  PDEVICE_OBJECT 设备对象bucuo;
  RtlInitUnicodeString(&驱动名称aiyou, L"\\DEVICE\\aiyou");//初始化设备名称
  //通过驱动对象创建驱动设备,返回最后的参数设备指针
  状态码 = IoCreateDevice(驱动对象, sizeof(驱动对象->DriverExtension), &驱动名称aiyou, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &设备对象bucuo);
  if (状态码 == STATUS_SUCCESS)
  {
    KdPrint(("nxyn:驱动设备对象创建成功!!! \n"));
    //创建符号链接
    UNICODE_STRING 符号链接名字;  //在应用层使用的名字
    RtlInitUnicodeString(&符号链接名字, L"\\??\\bucuo"); //初始化符号链接名字
    状态码 = IoCreateSymbolicLink(&符号链接名字, &驱动名称aiyou);
    if (状态码 == STATUS_SUCCESS)
    {
      KdPrint(("nxyn:创建符号链接 %wZ 成功!!!", &符号链接名字));
    }
    else
    {
      KdPrint(("nxyn:创建符号链接 %wZ 失败 status=%X!!!", &符号链接名字, 状态码));
    }
  }
  else
  {
    KdPrint(("nxyn:驱动设备对象创建失败,删除设备!!!\n"));
    IoDeleteDevice(设备对象bucuo);
  }
  return 状态码;
}

2、删除设备操作,先删除符号链接,再删除设备,最后再删除驱动

void 删除设备(PDRIVER_OBJECT 驱动对象)
{
  KdPrint(("nxyn:正在删除设备"));
  if (驱动对象->DeviceObject)//是否创建的驱动设备
  {
    UNICODE_STRING 符号链接名字; //符号链接名字     
    RtlInitUnicodeString(&符号链接名字, L"\\??\\bucuo"); 
    KdPrint(("nxyn:删除符号链接=%wZ", &符号链接名字));
    IoDeleteSymbolicLink(&符号链接名字);
    KdPrint(("nxyn:删除驱动设备"));
    IoDeleteDevice(驱动对象->DeviceObject);//删除设备对象
  }
  KdPrint(("nxyn:已全部删除"));
}

二、在上节课的C代码中,声明一下创建设备和删除设备函数

NTSTATUS 创建设备(PDRIVER_OBJECT 驱动对象);
void 删除设备(PDRIVER_OBJECT 驱动对象);

三、在卸载回调函数中调用删除设备,在主函数中调用创建设备

void 卸载驱动回调函数(PDRIVER_OBJECT 驱动对象)
{
  删除设备(驱动对象);
  KdPrint(("nxyn:我被卸载了,驱动编号=%p", 驱动对象));
}
NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT 驱动对象, _In_ PUNICODE_STRING psg)
{
  创建设备(驱动对象);
  驱动对象->DriverUnload = 卸载驱动回调函数;
  KdPrint(("nxyn:第一个驱动程序,驱动编号:%p", 驱动对象));
  return 0;
}

四、运行效果


目录
相关文章
|
4月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】第三人称视觉
本文介绍了Unity中常用的第三人称视角实现方法,适用于角色扮演游戏。内容包括安装Cinemachine插件、为角色添加面朝向点、创建虚拟摄像机、编写控制脚本及测试运行,帮助开发者快速掌握镜头控制技巧。
172 0
|
关系型数据库 MySQL 数据库
mysql的用户管理和权限控制
本文介绍了MySQL中用户管理的基本操作,包括创建用户、修改密码、删除用户、查询权限、授予权限和撤销权限的方法。
482 2
|
算法 网络安全 区块链
harmony-utils之ECDSA,ECDSA工具类
`harmony-utils` 是一款功能丰富的 HarmonyOS 工具库,提供包括 ECDSA 签名与验签在内的多种实用工具,助力开发者高效构建鸿蒙应用。
226 0
|
Ubuntu 安全 网络安全
在Ubuntu 16.04上安装和配置GitLab的方法
在Ubuntu 16.04上安装和配置GitLab的方法
298 0
|
监控 芯片 数据格式
OPC客户端与OPC服务器连接
OPC客户端与OPC服务器连接
|
文字识别 数据安全/隐私保护
大漠插件7.2302
大漠插件是一款文字图片识别的编程插件.能够被大多主流编语言调用
1347 0
大漠插件7.2302
|
传感器 算法 数据可视化
倍福(Beckhoff)嵌入式控制器PLC
倍福(Beckhoff)嵌入式控制器PLC
倍福(Beckhoff)嵌入式控制器PLC
|
Ubuntu 网络安全 数据安全/隐私保护
鸿蒙系统环境搭建、源码编译与烧写之经典
大家好,今天学习一下,如何部署鸿蒙环境,并在ubuntu系统下编译,以及烧写镜像的方法。 目录
913 0
鸿蒙系统环境搭建、源码编译与烧写之经典
|
人工智能 Cloud Native 安全
用“绿色计算“技术推动算力可持续发展
7月30日,2022中国算力大会在济南开幕,大会突出创新、融合、绿色三大理念,多位知名院士专家、行业领军人物围绕“算赋百业 力导未来”主题展开深入研讨,共话算力产业发展。蚂蚁集团基础设施委员会主席、绿色计算负责人何征宇应邀参会并在主论坛发表演讲。
705 0
用“绿色计算“技术推动算力可持续发展
|
Java Android开发
Android 10.0 StatusBar—下拉菜单快捷方式
Android 10.0 StatusBar—下拉菜单快捷方式