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;
}

四、运行效果

目录
相关文章
|
5月前
|
Windows
【Windows内核驱动函数(1)】IoCreateSymbolicLink()-----创建符号链接函数
【Windows内核驱动函数(1)】IoCreateSymbolicLink()-----创建符号链接函数
|
6月前
|
Go 开发工具 C++
2023驱动保护学习 -- 创建第一个驱动程序
2023驱动保护学习 -- 创建第一个驱动程序
68 0
|
6月前
|
Go
2023驱动保护学习 -- 卸载驱动程序
2023驱动保护学习 -- 卸载驱动程序
39 0
|
6月前
2023驱动保护学习 -- 通过代码实现驱动卸载
2023驱动保护学习 -- 通过代码实现驱动卸载
44 0
|
6月前
2023驱动保护学习 -- 通过驱动保护进程
2023驱动保护学习 -- 通过驱动保护进程
44 0
2023驱动保护学习 -- 创建驱动设备及符号链接并实现删除操作
2023驱动保护学习 -- 创建驱动设备及符号链接并实现删除操作
42 0
|
Linux
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
144 0
|
缓存 数据库连接 数据库
DbVisualizer 数据库连接工具:添加数据库驱动方法。dbvis搜索不到驱动文件夹下的驱动解决方法
DbVisualizer 数据库连接工具:添加数据库驱动方法。dbvis搜索不到驱动文件夹下的驱动解决方法
1003 0
DbVisualizer 数据库连接工具:添加数据库驱动方法。dbvis搜索不到驱动文件夹下的驱动解决方法
|
Linux ice Windows
V5.10 DebugServer中CKLINK驱动更新说明
V5.10 DebugServer中CKLINK驱动更新说明
V5.10 DebugServer中CKLINK驱动更新说明