X64论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

热搜: 样本 软件
查看: 58|回复: 9

[驱动开发教程]2.0.驱动程序初始化

[复制链接]

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
发表于 2022-6-2 23:05:04 | 显示全部楼层 |阅读模式
本帖最后由 YFSafe 于 2022-6-23 21:23 编辑

打开VS2022,新建一个叫做SetPriority(或任意名字都一样)的新的“空的KMDF项目”,并将项目向导产生的inf文件删除,在项目中新建一个名为“SetPriority.c"的源码文件,在源文件中加上对头文件<ntifs.h>的#include和一个空的DriverEntry.


[C] 纯文本查看 复制代码
#include <ntifs.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistrtPath)
{
        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 RegistrtPath)
{
        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 RegistrtPath)
{
    DriverObject->MajorFunction[IRP_MJ_CREATE] = SetPriorityCreateClose;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = SetPriorityCreateClose;
    return STATUS_SUCCESS;
}

void DriverUnload(PDRIVER_OBJECT DriverObject)
{
       
}

评分

参与人数 1经验 +30 人气 +3 收起 理由
Andysun06 + 30 + 3 赞一个!

查看全部评分

回复

使用道具 举报

2

技术

0

魅力

1

原创

病毒研究组

Rank: 8Rank: 8

积分
1080
人气
49
分享
4
发表于 2022-6-3 08:52:01 | 显示全部楼层
非常好,最近想学驱动,就看你的教程了
回复

使用道具 举报

0

技术

0

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
729
人气
3
分享
7
发表于 2022-6-6 12:42:04 | 显示全部楼层
空的KMDF项目是啥
回复

使用道具 举报

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
 楼主| 发表于 2022-6-6 20:41:34 来自手机 | 显示全部楼层
zhangzhixiao 发表于 2022-6-6 12:42
空的KMDF项目是啥

你打开vs2022-新建项目-空的KMDF项目不就行了吗
回复

使用道具 举报

0

技术

0

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
729
人气
3
分享
7
发表于 2022-6-7 12:21:34 | 显示全部楼层
YFSafe 发表于 2022-6-6 20:41
你打开vs2022-新建项目-空的KMDF项目不就行了吗




没有这个项目哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
 楼主| 发表于 2022-6-7 15:21:01 | 显示全部楼层

没装扩展吧你这是
回复

使用道具 举报

0

技术

0

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
729
人气
3
分享
7
发表于 2022-6-7 16:47:20 | 显示全部楼层
YFSafe 发表于 2022-6-7 15:21
没装扩展吧你这是

哪个扩展
回复

使用道具 举报

0

技术

0

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
729
人气
3
分享
7
发表于 2022-6-7 16:49:17 | 显示全部楼层
YFSafe 发表于 2022-6-7 15:21
没装扩展吧你这是

换句话说,扩展名叫啥
回复

使用道具 举报

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
 楼主| 发表于 2022-6-7 20:55:21 来自手机 | 显示全部楼层
少年,你需要一本《Windows内核编程》
回复

使用道具 举报

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
 楼主| 发表于 2022-6-7 20:57:30 来自手机 | 显示全部楼层
本帖最后由 YFSafe 于 2022-6-7 20:59 编辑
zhangzhixiao 发表于 2022-6-7 16:49
换句话说,扩展名叫啥

自己去百度,搜不到再来论坛问。网上大把这种基础教程的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|X64论坛 ( 沪ICP备2020028431号-4 )|网站地图

GMT+8, 2022-6-27 16:44 , Processed in 0.060927 second(s), 9 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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