找回密码
 立即注册
搜索

[经验杂志] [驱动开发教程]2.0.驱动程序初始化

[复制链接]
发表于 10-21 21:12:20 | 显示全部楼层 |阅读模式
打开VS2022,新建一个叫做SetPriority(或任意名字都一样)的新的“空的KMDF项目”,并将项目向导产生的inf文件删除,在项目中新建一个名为“SetPriority.c&quot;的源码文件,在源文件中加上对头文件<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,如您认为本帖收录内容侵犯了您的版权或者违规,请在右下角进行举报,发现直接删帖!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|wcbb导航网-属于年轻人的导航网-网站导航-素材导航论坛! ( 桂ICP备2024029389号-2 )|网站地图

快速回复 返回顶部 返回列表