打开VS2022,新建一个叫做SetPriority(或任意名字都一样)的新的“空的KMDF项目”,并将项目向导产生的inf文件删除,在项目中新建一个名为“SetPriority.c"的源码文件,在源文件中加上对头文件<ntifs.h>的#include和一个空的DriverEntry.
[C] 纯文本查看 复制代码#include <ntifs.h>NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath){ return STATUS_SUCCESS;}
注意:多数软件驱动需要在DriverEntry中做如下操作:
1.设置UnLoad例程
2.设置驱动程序支持的分发例程
3.创建设备对象
4.创建符号链接
一步一步来,先增加一个Unload例程吧
[C] 纯文本查看 复制代码#include <ntifs.h>void DriverUnload(PDRIVER_OBJECT DriverObject);NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath){ DriverObject->DriverUnload = DriverUnload; return STATUS_SUCCESS;}void DriverUnload(PDRIVER_OBJECT DriverObject){ }
下一步,我们需要设置支持的分发例程.注意⚠️每一个驱动程序都需要支持IRP_MJ_CREATE 和 IRP_MJ_CLOSE,否则将无法打开驱动的任意句柄,也就没有后面的内容了.因此,我们在DriverEntry中增加如下内容:[C] 纯文本查看 复制代码DriverObject->MajorFunction[IRP_MJ_CREATE] = SetPriorityCreateClose;DriverObject->MajorFunction[IRP_MJ_CLOSE] = SetPriorityCreateClose;
我们将IRP_MJ_CREATE与IRP_MJ_CLOSE指向同一分发例程,为什么呢?因为他们都只做了一件事:批准请求.在其他情况下,他们可能指向不同的函数.
我们增加一下SetPriorityCreateClose的原型.
[C] 纯文本查看 复制代码NTSTATUS SetPriorityCreateClose(PDEVICE_OBJECT DeviceObject,PIRP Irp);
函数必须返回NTSTATUS,接受一个设备对象指针与指向IRP请求包的指针.
在下一节,我们将会了解如何将信息传递给驱动程序,本节到此结束.
附:本节完整源码
[C] 纯文本查看 复制代码#include <ntifs.h>void DriverUnload(PDRIVER_OBJECT DriverObject);NTSTATUS SetPriorityCreateClose(PDEVICE_OBJECT DeviceObject,PIRP Irp);NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath){ DriverObject->DriverUnload = DriverUnload; DriverObject->MajorFunction[IRP_MJ_CREATE] = SetPriorityCreateClose; DriverObject->MajorFunction[IRP_MJ_CLOSE] = SetPriorityCreateClose; return STATUS_SUCCESS;}void DriverUnload(PDRIVER_OBJECT DriverObject){ } |
声明
1,本帖收录内容来源于系统采集或网友自主提交,不代表本网站立场!
2,本帖收录内容,仅供参考使用,本站不对其安全性,正确性等作出保证。
3,如您认为本帖收录内容侵犯了您的版权或者违规,请在右下角进行举报,发现直接删帖!
|