查看: 442|回复: 1

[原创] [驱动开发教程]2.1.将信息传递给驱动程序

[复制链接]

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

发表于 2022-6-23 21:28:19 | 显示全部楼层 |阅读模式
我们刚刚设置好的Create和Close操作是必须的,但是显然不够.我们需要有一种方法将信息传递给驱动,告知驱动程序需要设置那个进程的优先级和设置成什么值.从用户模式来说,有三个函数可以使用:WriteFile,ReadFile,DeviceIoControl.

从目标来看,我们可以使用WriteFile和DeviceIoControl.ReadFile在这里没有意义,因为我们要做的是给驱动程序传递信息而不是获得信息.那么用哪个函数好呢?是WriteFile还是DeviceIoControl?
作者的建议是:在确实需要一个写操作时(逻辑上的写操作)使用WriteFile,其余情况就可以使用DeviceIoControl了.因为DeviceIoControl是给驱动程序传递信息金额从驱动程序获得信息的一般机制.

我们已经知道修改进程优先级不是一个纯粹的写操作,我们就使用DeviceIoControl.此函数的原型如下:
BOOL WINAPI DeviceIoControl(
_In_ HANDLE hDevice,
_In_ DWORD dwIoControlCode,
_In_opt_ LPVOID lpInBuffer,
_In_ DWORD nInBufferSize,
_Out_opt_ LPVOID lpOutBuffer,
_In_ DWORD nOutBufferSize,
_Out_opt_ LPDWORD lpBytesReturned,
_Inout_opt_ LPOVERLAPPED lpOverlapped);

有三个重要的参数传递给DeviceIoControl:
1.一个控制代码,为CTL_CODE类型
2.一个输入缓冲区
3.一个输出缓冲区

这说明了DeviceIoControl是跟驱动程序通行的灵活机制.它能够支持多个控制代码,每个代码有不同的含义.它能够支持多个控制代码,每个代码有不同的语义,并跟可选的缓冲区一起传奇.在驱动程序这边,DeviceIoControl对应于IRP_MJ_DEVICE_CONTROL主功能代码.让我们将它加入分发例程中.
[C] 纯文本查看 复制代码
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = SetPriorityDeviceControl;


在下一节,我们将会了解客户程序与驱动程序之间的通信协议,本节到此结束.
(另:每天尽量写两节吧,这是最高产了)

本帖被以下淘专辑推荐:

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

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-6-24 21:57:54 | 显示全部楼层
论坛就缺你这样的人才
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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