2012-07-29 20 views

Odpowiedz

7

Napisz sterownik urządzenia, aby udawać, że jest nim.

W szczególności sterowniki urządzeń systemu Windows obsługują tak zwane żądania przerwań za pośrednictwem protokołu żądania przerwań - które sprowadzają się do zawiniętej struktury i zestawu buforów wewnątrz sterownika.

Kolejną rzeczą, którą musisz wiedzieć, jest to, że wiele sterowników jest w rzeczywistości warstwowanych lub ułożonych w stosy lub dowolnie wybranej nazwy. Na przykład, aby napisać sterownik dysku, możesz połączyć się ze sterownikiem powyżej (jako klasą dysku), ale użyj sterownika poniżej (na przykład portu scsi), aby wysłać polecenia do urządzeń.

Tak działają prawdziwe urządzenia. Fałszywe urządzenia muszą spełniać wymagania interfejsu najwyższego poziomu, np. dysk, kontroler, mysz lub cokolwiek to jest. Jednak pod spodem mogą zrobić wszystko, co im się podoba - zwracają dowolne wartości.

To otwiera możliwość sterowania sterownika za pomocą aplikacji trybu użytkownika i udawania "być" urządzeniem. Aby wysłać wiadomość ze sterownikami, możesz do niej: DeviceIoControl; następnie, aby uzyskać te wiadomości, możesz:

  • Zapakuj je w Irp, który tworzy tę DeviceIoControl.
  • Niech sterownik odczyta je z pamięci procesowej.

Sterowniki mogą również uzyskać dostęp do \\Registry\\Machine i różnych innych nie rejestrujących się obszarów rejestru, które nie są przeznaczone dla użytkownika, dzięki czemu można się komunikować w ten sposób.

Wreszcie, nie ma powiedzenia, że ​​nie można filtrować istniejącego IO, zamiast tworzyć wszystko za pomocą nowego urządzenia. Istnieje wiele opcji i sposobów na zrobienie tego.

Jeśli masz zamiar to zrobić, trzeba:

  • VirtualKD lub drogiego kabla debugger i dwa komputery.
  • Prawdopodobnie chcesz także zacząć od odniesień pod numerem this blog post. Przekonasz się, że istnieją zasadniczo bazillion różne nazwy dla kodu sterownika, więc będę interpretować niektóre z nich:

    • WDM = Windows Driver Model, w zasadzie modelu kierowcy NT zmieszanego z (części) Windows 9x .
    • KMDF = framework sterownika trybu jądra - sterowniki tego typu wykorzystują to, a dodatkowo dodatkowo WDF (Windows Driver Foundation), który jest zbiorem bibliotek na WDM, aby uczynić go szybszym w użyciu.
    • UMDF = framework sterownika trybu użytkownika - napisz sterownik bez niebezpieczeństwa trybu jądra. Jeśli możesz, użyj tego, ponieważ sterowniki trybu jądra, które pójdą źle, będą miały kolor niebieski (w żargonie, bugcheck) twojego systemu.

Edit: Nie jestem masowo wiedzę na DirectInput - nie może być sposób, aby zastąpić różne kontrole w użyciu API poprzez DLL przekierowania i tym podobne, które mogą być prostsze niż sposób, w jaki opisałem.

+0

Dzięki za wprowadzenie do sterownika dev! Moim celem jest naprawienie obsługi DirectInput kontrolera 360. Obecnie można go używać z DI, ale z ograniczeniami; nie może osobno zająć się wyzwalaczami, nie może użyć wyzwalaczy jako przycisków (aby nie działał z niczym oczekującym na cztery przyciski na ramieniu) i bez wibracji [...] – Dataflashsabot

+0

[...]. Twoja edycja była moją pierwotną intencją; ale DI nie używa tradycyjnie połączonych funkcji, zamiast tego łączy tylko DirectInputCreate, który zwraca strukturę ze wskaźnikami funkcji, i wydaje się również zapewniać różne interfejsy dla C i C++. To mnie nie wyłączyło, ale fałszywy kierowca wygląda jeszcze trudniej, więc myślę, że spróbuję jeszcze raz. (Zanim ktokolwiek zaproponuje XBCD, łamie natywną obsługę xinput.) – Dataflashsabot

4

Najprostszym rozwiązaniem może być emulowanie urządzenia XInput (Xbox 360 i One). Są one obsługiwane w większości nowoczesnych gier, a konfiguracja jest bardzo prosta. Oto projekt C++, który zapewnia to bez żadnych zainstalowanych sterowników lub zewnętrznych zależności: https://github.com/shauleiz/vXboxInterface/

+0

To nieprawda. Musisz zainstalować ScpVBus w swoim Systemie, aby użyć tego API do interakcji wirtualnego gamepada. Wystarczy spojrzeć na to [uwaga do wydania] (https://github.com/shauleiz/vXboxInterface/releases/tag/v1.0.0). – grill2010

0

Wiem, że to stare pytanie, ale dla każdego, kto jest zainteresowany tym tematem, warto również przyjrzeć się temu projektowi pod nazwą ViGEm.

Można emulować niektóre dobrze znane gamepady, takie jak kontroler Microsoft Xbox 360, kontroler Sony DualShock 4 i kontroler Microsoft Xbox One. Projekt oferuje również interfejs API do interakcji z tymi wirtualnymi kontrolerami.

Powiązane problemy