X64论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

热搜: 样本 软件
查看: 17|回复: 1

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

[复制链接]

0

技术

2

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
861
人气
28
分享
11
发表于 4 天前 | 显示全部楼层 |阅读模式
我们刚刚设置好的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;


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

使用道具 举报

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
100
人气
0
分享
0
发表于 3 天前 | 显示全部楼层
论坛就缺你这样的人才
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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