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

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

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

时间: 2024-08-24 09:34:45

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

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

<围住神经猫>是基于Egret Framework开发的html5游戏. Egret Framework 使用 TypeScript 开发语言. TypeScript是由微软开发的自由和开源的编程语言,是一种javascript的超集. 围住神经猫,HTML5移动游戏的成功范例 "围住神经猫"采用HTML5游戏方式开发,最大的好处就是"即点即玩",为游戏微信传播提供了一个"便捷"的前提,而非像通常意义上的 App 那样,需要经过更多的

linux设备驱动第三篇:写一个简单的字符设备驱动

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存. 下面就开始学习如何写一个简单的字符设备驱动.首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作. 1.主设备号和次设备号 对于字符设备的访问是通过文件系统中的设备名称进行的.他们通常位于/dev目录下.如下: [plain] vie

linux设备驱动第三篇:如何写一个简单的字符设备驱动?

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存. 下面就开始学习如何写一个简单的字符设备驱动.首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作. 1.主设备号和次设备号 对于字符设备的访问是通过文件系统中的设备名称进行的.他们通常位于/dev目录下.如下: [email prot

改变win7驱动图标

一.背景 自己做的USB设备是HID设备,注册到设备管理器中就是"HID Compliant device",显得很业余,然后想去改变这个图标和名称,也就有了此篇文章 二.正文 还没有试,只找到方法,试了之后再来更新博客. 三.参考链接 How to Change a Drive Icon in Vista, Windows 7, and Windows 8 http://www.sevenforums.com/tutorials/65828-drive-icon-change.htm

oracle中,改变表名和字段名的大小写

1.将表名和字段名改为大写  见--http://www.cnblogs.com/wenboge/articles/4121331.html 2.将表名和字段名改为小写 ①改表名为小写 begin for c in (select table_name tn from user_tables where table_name <> lower(table_name)) loop begin execute immediate 'alter table '||c.tn||' rename to

【转载】socket as an IPC

socket 是IPC的一种,是解决不同计算机上进程相互通信的机制.总的来说,socket就是通信端点的逻辑代表.即然代表的是通信端点,所以就要有相关参数反映通信端点的性质.这个socket所代表的端点有什么特征呢?――这个端点在哪?通信方式是什么?怎么通信?等等,弄清楚这些问题,对socket的理解就很easy了.下边让我们先来看看: (1)socket总述:首先什么是套接字?->套接字是通信端点的抽象,就是这个通信端点的逻辑代表.fd->文件,then, 套按字描述符->套接字-&g

高并发服务器开发与配置

一.4大具有代表性的并发模型及其优缺点        4大具有代表性的并发模型:Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,select模型和poll模型.Epoll模型.        Apache(PPC)模型和TPC模型是最容易理解的,Apache模型在并发上是通过多进程实现的,而TPC模型是通过多线程实现的,但是这2种方式在大量进程/线程切换时会造成大量的开销.        select模型是通过

2019 java面试题合集

得不到的始终在骚动 金三银四的季节大家有点躁动了  总结一下面试题 其中有很多其他博客或者论坛摘抄的内容  一. 基础 1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. 2.面向对象的三大特性答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注

Oracle错误——ORA12514:监听程序当前无法识别连接描述符中请求的服务

在连接数据库的时候,有时会遇到一个"ORA12514:监听程序当前无法识别连接描述符中请求的服务"的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,导致监听器无法识别客户端连接符中提供的服务名,从而拒绝建立数据库连接时报的错误信息,所以就需要对监听器配置做修改. 在这里,还需对问题进行细化,有时候可能会发现,在刚开启监听器的时候会发生这个错误,但过了一会再进行连接就不会报错,这其实是因为动态注册需要时间,而刚开启监听器时,数据库还未注册到监听器,导致报错,这种情