Заставьте стороннюю программу в Windows поверить, что устройство HID подключено - PullRequest
0 голосов
/ 27 ноября 2018

Поначалу это может показаться необычным вопросом, но позвольте мне объяснить, что я пытаюсь сделать.

Я разработал программу, которая может подключаться к сторонней программе под названием PS4 Remote Play.Программа PS4 Remote Play позволяет вам использовать настоящий геймпад Dualshock для управления вашими играми.Поэтому моя программа подключается к низкоуровневым API из Windows ( kernel32.dll, hid.dll ), чтобы обойти это ограничение.Мои перехватчики делают, когда CreateFileW вызывается для устройства HID, моя программа возвращает пользовательский фиктивный указатель и соответствующие перехваченные hid.dll методы, которые вызываютсяпосле этого вы ведете себя так, будто этот фиктивный указатель - геймпад Dualshock.

Пока все хорошо.Но недавно я получил несколько сообщений от пользователей моей программы о том, что «эмулированный» Dualshock не работает и входные данные, отправленные в этот виртуальный Duashock, не обрабатываются.Мне потребовалось некоторое время, чтобы понять, почему.Всякий раз, когда пользователь использует ноутбук или ПК без подключенного устройства HID, программа PS4 Remote Play никогда не вызывает CreateFileW , по крайней мере, не для создания дескриптора HID.

Я не хочу устанавливать фиктивный драйвер с моим приложением, чтобы заставить Windows думать, что устройство HID подключено.Вместо этого я пытаюсь подключиться к функциям setupapi.dll и заставляю программу PS4 Remote Play только думать, что случайное фиктивное устройство HID подключено так, что оно вызывает CreateFileW метод.Я уже подключен к

  • SetupDiGetClassDevs
  • SetupDiEnumDeviceInfo
  • SetupDiGetDeviceInterfaceDetail

Но у меня нет опыта работы с этим API, поэтому у меня есть несколько вопросов.

Имеет ли информация об устройственабор, возвращаемый SetupDiGetClassDevs всегда содержит элемент информации об устройстве для устройств HID, даже если устройство HID не подключено?Если нет, как я могу добавить ложную информацию об устройстве для устройств HID или как создать ложную информацию об устройстве, установленную в C #, и вернуть ее вместо этого?Или это вообще не нужно, так как я могу просто подключиться к двум другим методам и что-то там сделать.

Любой совет или намек, как я мог бы решить эту проблему, был бы великолепен.Не обязательно, чтобы Windows думала, что устройство HID подключено, только программа стороннего производителя должна действовать так, как если бы она была подключена к ПК.

...