技术4
经验6680
魅力17
人气208
分享36
原创6
注册时间2022-4-22
最后登录2024-12-18
阅读权限100
在线时间316 小时
主题122
回帖581

版主
禁止发言
  
- 积分
- 5367
- 人气
- 208
- 分享
- 36
 
|
我们刚刚设置好的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;
在下一节,我们将会了解客户程序与驱动程序之间的通信协议,本节到此结束.
(另:每天尽量写两节吧,这是最高产了)
|
|