C 鼠标的上过滤器设备驱动程序

C 鼠标的上过滤器设备驱动程序,c,filter,driver,mouse,C,Filter,Driver,Mouse,我刚刚开始钻研与驱动程序相关的东西,因为我想做的事情(参见)似乎可以通过“常规”应用程序来完成。现在,我只是想安装一个内核模式驱动程序(KMDF)作为我想要修改鼠标行为的上过滤器。源文件不是空的,因为它们是根据Visual Studio KMDF模板填充的。到目前为止,我对这些源文件所做的唯一修改是在CreateDevice例程中添加这两行代码: WdfFdoInitSetFilter(DeviceInit); WdfDeviceInitSetDeviceType(DeviceInit, FI

我刚刚开始钻研与驱动程序相关的东西,因为我想做的事情(参见)似乎可以通过“常规”应用程序来完成。现在,我只是想安装一个内核模式驱动程序(KMDF)作为我想要修改鼠标行为的上过滤器。源文件不是空的,因为它们是根据Visual Studio KMDF模板填充的。到目前为止,我对这些源文件所做的唯一修改是在CreateDevice例程中添加这两行代码:

WdfFdoInitSetFilter(DeviceInit);

WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_MOUSE); 
指定驱动程序为鼠标筛选器驱动程序

但是,我在虚拟机上安装它时遇到了问题。这是INF文件(不要太注意注释,我只是添加了它们以便更好地了解发生了什么,因为这是我第一次遇到这样的文件):

我正在尝试在运行Windows 10的虚拟机中安装驱动程序。虚拟机配置为支持USB 2.0,我添加了USB设备过滤器,以便虚拟机检测我的特定鼠标(否则,虚拟机无法区分连接的不同鼠标)

首先,我尝试通过VisualStudio使用项目属性(配置属性->驱动程序安装->部署)中的“安装/重新安装并验证”选项来部署它。请注意,在选择部署之前删除以前的驱动程序版本

它不起作用,我收到以下错误消息:

[17:32:01:625]: ERROR: Task "Default Driver Package Installation Task" failed to complete successfully. Look at the logs in the driver test group explorer for more details on the failure.
[17:32:02:348]: Driver Post Install Actions
[17:32:02:348]: Removing any existing files from test execution folder.
[17:32:02:375]: Copying required files for "Driver Post Install Actions".
[17:32:02:934]: [Driver Post Install Actions] Command Line:
$KitRoot$\Testing\Runtimes\TAEF\te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_DriverPostInstall'" /rebootStateFile:%SystemDrive%\DriverTest\Run\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Run\Driver_Post_Install_Actions_00011.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[17:32:05:387]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[17:32:05:388]: Task "Driver Post Install Actions" completed successfully
Driver Deployment Task Failed: Default Driver Package Installation Task
这听起来可能很愚蠢,但我无法在驱动程序测试组资源管理器中找到日志,以获取有关错误的更多信息

其次,我尝试使用“硬件ID驱动程序”选项,而不是“安装/重新安装并验证”选项,该选项具有以下硬件ID“USB\VID_093A&PID_2510”(与INF中指定的相同)。这次成功了。然而,我不知道确切的原因。现在你对我所做的事情有了更好的了解,下面是我的问题:

1) 我知道SourceDisksNames部分用于指定包含驱动程序的.sys文件的磁盘(CD-rom,DVD)的名称。然而,我不明白如何从这样的磁盘上安装驱动程序。想象一下,我买了一个特定的硬件,它附带了一张带有相应驱动程序文件的CD。一旦CD进入播放机,我该怎么办?我应该运行INF文件来安装它吗?据我记忆所及,我唯一一次必须从磁盘安装驱动程序时,它是一个.exe文件

2) 如果我想通过互联网发布我的驱动程序包怎么办?那么这一节的重点是什么呢

3) 默认情况下,当我创建项目时,VS用“EGMC_过滤器安装磁盘”填充磁盘名。它对应什么?我应该修改它吗

4) 我不明白部署过程是如何工作的。我猜VS首先将驱动程序包(包含.INF、.cat和.sys)传输到VM,然后在VM中启动.INF文件。是这样吗?如果是,DiskName在VM中对应于什么?VS是否创建了包含包的某种ISO?在哪里可以找到包在VM中的存储位置

5) 使用“硬件ID驱动程序更新”和“安装/重新安装[…]”选项时,部署过程是否有所不同

6) 知道为什么我不能使用“安装/重新安装并验证”选项安装驱动程序吗?INF文件有什么问题?这和磁盘名有关吗

7) 尽管读过,但考虑到我不尊重Root\xxx格式(我后来看到了这一页),我还是对为什么可以使用“硬件ID”选项部署驱动程序感到困惑。然而,很明显,对于我想要做的事情,我必须使用另一个选项安装我的驱动程序。知道为什么它看起来仍然有效(至少部分有效)吗

8) 在“不正确”安装完成后,在鼠标和其他指针设备下的设备管理器中添加一个“EGMC过滤设备”条目,即使您感兴趣的鼠标已拔出。为什么会这样?当我插入它时,会出现另一个条目

9) 当我的驱动程序安装好后,鼠标就不工作了(它甚至不亮!)。但是,由于上面的过滤器暂时不起任何作用,鼠标应该可以正常工作。到目前为止,我找到的唯一解释是,驱动程序是作为函数驱动程序安装的,而不是作为过滤器安装的。可能是这样吗?在VM的注册表中,我无法在“Orderiour\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class{4d36e96f-e325-11ce-bfc1-08002be10318}部分中找到具有“EGMC_filter”值的UpperFilters键。我找到的唯一一个是:“UpperFilters:VboxClass”。我的想法是,驱动程序是作为功能安装的,这让我感到欣慰……虚拟机会干扰我的驱动程序吗

10) 感兴趣的鼠标(左)和普通鼠标(右)的驱动程序细节也让我感到困惑,因为前者缺少mouhid

11) 最后,在驱动程序代码中指定它是过滤器驱动程序有什么意义?它的具体变化是什么

我知道这是一篇很长的帖子,我正在问一些非常具体的问题,但我希望你不要介意,希望一些专家能够回答这些问题

我期待着你的答复


<纪尧姆>

编写一个适合Windows的内核驱动程序是很困难的,你可以考虑上课。尝试在没有驱动程序的情况下实现您的目标(修改鼠标行为?)。你到底想修改什么?是的,我知道这是一项艰巨的任务,但我非常有兴趣学习如何修改。你有什么建议可以让我上好课吗?我想你没有读过这篇文章:我在这里解释我想做的事情,以及我为什么没有一个司机不能做的原因。为Windows写一个内核驱动程序是很困难的,你可以考虑去上课。尝试在没有驱动程序的情况下实现您的目标(修改鼠标行为?)。你到底想修改什么?是的,我知道这是一项艰巨的任务,但是
[17:32:01:625]: ERROR: Task "Default Driver Package Installation Task" failed to complete successfully. Look at the logs in the driver test group explorer for more details on the failure.
[17:32:02:348]: Driver Post Install Actions
[17:32:02:348]: Removing any existing files from test execution folder.
[17:32:02:375]: Copying required files for "Driver Post Install Actions".
[17:32:02:934]: [Driver Post Install Actions] Command Line:
$KitRoot$\Testing\Runtimes\TAEF\te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_DriverPostInstall'" /rebootStateFile:%SystemDrive%\DriverTest\Run\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Run\Driver_Post_Install_Actions_00011.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[17:32:05:387]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[17:32:05:388]: Task "Driver Post Install Actions" completed successfully
Driver Deployment Task Failed: Default Driver Package Installation Task