首先要获取驱动模块的文件名字,根据每次文件名字的不同进行生成,名字可以从链表获得:

typedef struct _LDR_DATA_TABLE_ENTRY {

LIST_ENTRY InLoadOrderLinks;

LIST_ENTRY InMemoryOrderLinks;

LIST_ENTRY InInitializationOrderLinks;

PVOID DllBase;

PVOID EntryPoint;

ULONG SizeOfImage;

UNICODE_STRING FullDllName;

UNICODE_STRING BaseDllName;

}LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;

//上面这个结构体需要自己定义

static PLDR_DATA_TABLE_ENTRY GetSysList(PDRIVER_OBJECT DriverObject)

{

PLDR_DATA_TABLE_ENTRY ldr = (PLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection;

return ldr;

}

PLDR_DATA_TABLE_ENTRY pSysList = NULL;

pSysList = GetSysList(DriverObject);//从DriverEntry获取驱动链表的节点信息。

// 拼字符串创建服务名字

static NTSTATUS XCreateDriverName(IN PDRIVER_OBJECT DriverObject,UNICODE_STRING BaseDllName)

{

UNICODE_STRING DeviceName,Win32Device;

PDEVICE_OBJECT DeviceObject = NULL;

NTSTATUS status;

P_USTR(&BaseDllName);

WCHAR strDevice[256];

RtlInitEmptyUnicodeString(&DeviceName,strDevice,sizeof(strDevice));

RtlAppendUnicodeToString(&DeviceName,L"\\Device\\");

RtlAppendUnicodeStringToString(&DeviceName,&BaseDllName);

P_USTR(&DeviceName);

WCHAR strDosDevices[256];

RtlInitEmptyUnicodeString(&Win32Device,strDosDevices,sizeof(strDosDevices));

RtlAppendUnicodeToString(&Win32Device,L"\\DosDevices\\");

RtlAppendUnicodeStringToString(&Win32Device,&BaseDllName);

P_USTR(&Win32Device);

status = IoCreateDevice(DriverObject,

0,

&DeviceName,

FILE_DEVICE_UNKNOWN,

0,

FALSE,

&DeviceObject);

if (!NT_SUCCESS(status))

return status;

if (!DeviceObject)

return STATUS_UNEXPECTED_IO_ERROR;

DeviceObject->Flags |= DO_DIRECT_IO;

DeviceObject->AlignmentRequirement = FILE_WORD_ALIGNMENT;

status = IoCreateSymbolicLink(&Win32Device, &DeviceName);

DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;

return STATUS_SUCCESS;

}

更多请关注微信公众号:driverdevelop

转载于:https://www.cnblogs.com/xujinping/p/4822803.html

如何自己写xuetr(一) 每次改变的驱动名和服务名相关推荐

  1. [react] 写出React动态改变class切换组件样式

    [react] 写出React动态改变class切换组件样式 export default memo(function Demo(){const [clsName,setClsName] = useS ...

  2. 六逻辑层次 职业规划案例_我如何在六个月内改变职业并找到了一名开发人员...

    六逻辑层次 职业规划案例 by Christian Jess Mark 克里斯蒂安·杰西·马克(Christian Jess Mark) 我如何在六个月内改变职业并找到了一名开发人员 (How I c ...

  3. 【Android项目实战 | 从零开始写app(十二)】实现app首页智慧服务热门推荐热门主题、新闻

    说在前面,由于各种adapter,xml布局,bean实体类,Activity,也为了让看懂,代码基本都是"简单粗暴直接不好看",没啥okhttp和util工具类之类的封装,本篇幅 ...

  4. ACCESS中写SQL语句时尽量把表名和字段名用中括号括起来

    ACCESS中写SQL语句时尽量把表名和字段名用中括号括起来,一般都要写成: [TableName].FieldName,否则较长的中文名表名可能会被不识别.

  5. Android 尝试写一份Linux 字符设备驱动

    从事android工作几年时间,功底不是很深,一直围绕这android系统定制移植开发,慢慢的从应用层接触到framework层,在接触到hal,目前从事的工作wifi驱动相关工作.但是没有系统的学习 ...

  6. 澎湃新闻:我在南山写代码,是改变世界还是养家糊口?

    2017年12月30日,欧建新的遗体告别仪式在深圳沙湾殡仪馆举行,他的妻子带着两个孩子向他做了最后的告别,随后艰难地在火化同意书上签下了自己的名字.20天前,这位研发工程师从他就职的中兴公司通讯研发大 ...

  7. matlab向excel连续写数据,每次换行

    最近接触到一个新的需求,需要使用matlab从excel读取数据,经过matlab处理后,写回到excel中:这里需要每次换行写数据,并且数据的个数每次都在发生变化,终于,找到了解决方法,下面是我的一 ...

  8. html窗口缩小后版面乱版,为何我写好的页面改变窗口大小后布局就乱了?

    让网页版面自动适应屏幕分辨率的技巧 一. 自然拉伸 如果你的网站结构没有用到大量的图形来衔接,主要*表格来定结构,那么你就可以使用该方法.非常适用于主要*表格.文字来表达信息的简单的网页页面. 制作表 ...

  9. 神经猫是用什么语言写的,HTML5改变世界

    <围住神经猫>是基于Egret Framework开发的html5游戏. Egret Framework 使用 TypeScript 开发语言. TypeScript是由微软开发的自由和开 ...

最新文章

  1. LeetCode简单题之图像渲染
  2. oracle文件夹cwallet,Oracle Wallet
  3. python字典中append_零基础入手!Python中字典与集合的使用指南
  4. 有感:仅在面试时攻克 MySQL 还不够
  5. 关于混合使用智能指针和内置指针的自己的问题和自己的见解(问题搜集中)这个帖子有待解决的问题
  6. C++ deque 底层原理及 queue、stack 容器的使用详解
  7. [Java基础]线程基础与实现多线程
  8. 先装vs还是先装sql_【家装话题】装修师先装门还是先装地板?
  9. C++ array初始化需要双层大括号
  10. Django框架——查询集QuerySet
  11. 对于计算机专业英语的问题,计算机专业英语的问题
  12. Python openpyxl 删除excel有删除线的文字
  13. Windows 系统添加 VirtIO 驱动(Windows ISO 安装镜像添加驱动)
  14. 阿里开源软件替换指南 1
  15. 华为设备的安全配置console及telnet
  16. 大型复杂项目集管理之二——项目集治理
  17. 【matplotlib】可视化解决方案——共享绘图区域问题
  18. 计算机JAVA相关说课稿_面向对象程序设计-java说课稿
  19. hasNext()方法
  20. 四库全书总目提要 卷一百八十四 集部三十七

热门文章

  1. jquery为元素绑定事件
  2. 冲突、冲突域、广播、广播域、洪泛的基本概念
  3. 华云网际:虚拟机+廉价服务器 一体机就这么简单
  4. 在给Ext2 Grid设置了autoHeight属性后,如何显示滚动条
  5. 调试比较大小的 才=c语言,计算机等级二级C语言考试练习题(六)
  6. python进程池的实现原理_Python基于进程池实现多进程过程解析
  7. 核函数与径向基函数 (Radial Basis Function 简称 RBF)详解
  8. 对于一组给定的叶子结点_高糊图片可以做什么?Goodfellow等人用它生成一组合理图像...
  9. 步骤一:入门linux基础/01Linux简介和安装/003Linux系统的多面性
  10. Java 算法 乘积最大