查看: 604|回复: 5

[原创] [驱动开发教程]2.2.客户程序/驱动程序之间的通信协议

[复制链接]

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

发表于 2022-7-2 13:57:19 | 显示全部楼层 |阅读模式
本帖最后由 YFSafe 于 2022-7-2 14:02 编辑

我们已经决定使用DeviceIoControl作为客户/驱动程序间的通信手段了,现在需要定义实际的含义了.显然我们需要一个控制代码和一个输入缓冲区.输入缓冲区中需要包含两部分内容:要设定优先级的线程id和要设置的优先级,这样驱动程序才能完成它的工作.

这两部分内容必须能同时被驱动程序和客户端程序使用.客户程序会提供数据,而驱动程序需要用这些数据工作.所以数据的定义需要放在一个单独的头文件中,并被驱动程序与客户端程序同时包含.

现在,让我们在驱动程序的项目中新增一个叫做'SetPriorityCommon.h'的头文件.这个头文件在后面也会被客户端程序所使用.
在此头文件中,我们需要定义两个东西:驱动程序需要获得的数据结构,和用来修改线程优先级的控制码.我们先从声明结构开始吧:
[C++] 纯文本查看 复制代码
struct ThreadData
{
    ULONG ThreadId;
    int Priority;
};

我们需要线程的唯一ID和需要修改的优先级.线程ID是一个32位的无符号整数,因此我们把它定义为ULONG类型.⚠️注意⚠️:我们不能使用DWORD,它并没有在内核头文件里定义.优先级必须是一个1~31之间的数字,因此我们使用ULONG就行.

下一步我们需要定义一个控制代码.控制代码需要使用CTL_CODE宏来定义,它的定义如下:

#define CTL_CODE(DeviceType, Function, Method, Access) (
  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
)


下面是这些参数的介绍:

DeviceType(设备类型,高16位(16-31位)),

Function(功能2-13 位),

Method(I/O访问内存使用方式),

Access(访问限制,14-15位).

有了上面这些信息,我们就可以定义控制代码了.

[C++] 纯文本查看 复制代码
#define SET_PRIORITY_DEVICE 0x8000
#define IOCTL_SET_PRIORITY CTL_CODE(SET_PRIORITY_DEVICE,0x800,METHOD_NEITHER,FILE_ANY_ACCESS)

本节到此结束,下一节讲创建设备对象


评分

参与人数 3经验 +81 人气 +3 分享 +6 收起 理由
skystars + 50 + 1 + 3 很给力!
剑指巅峰 + 11 + 1 不知道该加多少:)
hackerbob + 20 + 2 + 2 很给力!

查看全部评分

本帖被以下淘专辑推荐:

YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com

2

技术

6

魅力

2

原创

病毒研究组

Rank: 8Rank: 8

积分
1721
人气
179
分享
17

最佳新人活跃会员

发表于 2022-7-3 19:39:57 | 显示全部楼层
good,加油

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

 楼主| 发表于 2022-7-3 19:46:06 | 显示全部楼层

感谢感谢
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

 楼主| 发表于 2022-7-9 18:31:47 | 显示全部楼层
@剑指巅峰 这不加点经验?[旺柴][旺柴]
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com

0

技术

32

魅力

0

原创

退休版主

既然前路未知,那就先做好当下吧。

Rank: 8Rank: 8

积分
10688
人气
396
分享
335

最佳新人活跃会员灌水之王

发表于 2022-7-9 19:08:56 | 显示全部楼层
YFSafe 发表于 2022-7-9 18:31
@剑指巅峰 这不加点经验?[旺柴][旺柴]

我一脸懵逼

好的我给你先来个-150玩玩




更多奖励还是等@skystars 吧!

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

 楼主| 发表于 2022-7-9 19:32:22 | 显示全部楼层
剑指巅峰 发表于 2022-7-9 19:08
我一脸懵逼

好的我给你先来个-150玩玩

蟹蟹奖励!!
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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