使Windows上的3rd Party程序相信已连接HID设备

时间:2018-11-27 12:50:18

标签: c# hook hid easyhook

乍看起来这似乎是一个不寻常的问题,但让我解释一下我想做什么。

我开发了一个程序,该程序可以连接到名为PS4 Remote Play的第三方程序中。 PS4远程播放程序仅允许您使用真正的Dualshock游戏手柄来控制游戏。 因此,我的程序正在使用Windows的低级API( kernel32.dll,hid.dll ),以绕过此限制。我的钩子正在做什么,就是为HID设备调用 CreateFileW 时,我的程序会返回一个自定义的虚拟指针和相应的钩子 hid.dll 方法。随后被调用的行为就像是一个Dualshock游戏手柄上的虚拟指针。

到目前为止,一切都很好。但是最近我从程序用户那里收到一些报告,称“模拟” Dualshock无法正常工作,发送到该虚拟Duashock的输入也没有得到处理。我花了一些时间弄清楚原因。每当用户使用未连接HID设备的笔记本电脑或PC时,PS4远程播放程序都不会调用 CreateFileW ,至少不是为了创建HID句柄。 / p>

我不想在应用程序中安装虚拟驱动程序,只是让Windows认为已连接HID设备。相反,我尝试使用 setupapi.dll 的功能,并且仅使PS4 Remote Play程序认为连接了随机虚拟HID设备,以便它调用 CreateFileW 方法。我已经迷上了

  • SetupDiGetClassDevs
  • SetupDiEnumDeviceInfo
  • SetupDiGetDeviceInterfaceDetail

但是我没有使用此API的经验,所以我有几个问题。

即使没有连接HID设备,由 SetupDiGetClassDevs 返回的设备信息集是否始终包含HID设备的设备信息元素?如果没有,如何为HID设备添加伪造的设备信息,或者如何在C#中创建伪造的设备信息集并返回呢?还是根本不需要这样做,因为我可以使用其他两种方法并在那里做一些事情。

任何建议或暗示我如何解决此问题都将是很好的。 Windows不必认为只连接了HID设备,而只有第3方程序可以像连接PC一样操作。

0 个答案:

没有答案