Frage

Ich habe einen USB-Joystick, und ich mag meine eigenen HID-Treiber für sie schreiben. Insbesondere mag ich Verzögerung zwischen injizieren, wenn der Joystick-Eingang der von Windows empfangen wird, und wenn meine Anwendung dieses Eingabeereignisses gemeldet. Ich möchte auch die Identität des durch meine Anwendung percieved Joystick ändern. Ich habe nie einen Fahrer, geschweige denn einen HID-Treiber, für Windows geschrieben. Kann mir jemand mit Rat oder Hinweise geben, wie diese gehen zu tun?

War es hilfreich?

Lösung

Wenn Sie Knöpfe auf dem Joystick der elektrischen Signale erreichen das Betriebssystem (und auf das Spiel) in Form von IRP des durch die Kette Treiber. diese IRP ist an einem gewissen Punkt abfängt und die Weiterleitung an den nächsten Treiber verzögern kann den Joystick Eingang verzögern. Dies kann erreicht werden durch Treiber Filter .

zu schreiben Windows-Treiber müssen Sie WinDDK .

Der Einstiegspunkt eines Windows-Treiber ist die Driver Funktion . In dieser Funktion wird Einhaken Sie, was IRP ist Sie abfangen und die Callback-Funktionen wollen, die sich mit ihnen, in unserem Fall die Callback-Funktionen, die die Weiterleitung verzögern.

Zum Beispiel, sagen unsere IRP verzögert werden soll IRP_MJ_READ und unsere Callback-Funktion wird CallbackDelayForwarding genannt:

// the function that delays the IRP
NTSTATUS CallbackDelayForwarding(
    IN PDEVICE_OBJECT pDeviceObject, 
    IN PIRP pIrp
){
    // delay the forwarding
}

// this is the driver entrypoint, similar to "main" in user-mode executables
NTSTATUS DriverEntry(
    IN PDRIVER_OBJECT pDriverObject, 
    IN PUNICODE_STRING RegistryPath 
){
    pDriverObject->MajorFunction[IRP_MJ_READ] = CallbackDelayForwarding;
    ...
}

, um die Weiterleitung innerhalb CallbackDelayForwarding zu verzögern, müssen Sie Funktionen aus dem KeInitializeTimer Familie eine Art von Schlaf zu simulieren (vielleicht in Verbindung mit Schlössern), KeDelayExecutionThread etc.

Um die Filtertreiber in der Joystick-Treiber Kette zu installieren, können Sie a href verwenden <= "http://msdn.microsoft.com/en-us/library/aa741213%28VS.85%29.aspx" rel = "noreferrer">. inf Dateien .

Überprüfen Sie die Toaster Filtertreiber Probe im WinDDK, können Sie es bei INSTALL_DIR/src/general/toaster/ auch finden hier .

Links zum Thema:
http://www.rootkit.com/newsread.php?newsid=187
http://www.techtalkz.com/microsoft-device -Treiber / 269654-Toaster-Filter-driver.html

Andere Tipps

Was Sie versuchen, ist ein Filtertreiber zu tun.

  

Filter-Treiber sind optional Treiber, den Mehrwert oder das Verhalten eines Gerätes ändern. Ein Filtertreiber kann ein oder mehrere Geräte bedienen.   Quelle: http://msdn.microsoft.com/en-us/library/ ff545890.aspx

Ich denke, die WDK enthält Beispiele Sie haben Ould das Windows Driver Kit zum Download von hier: http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx

Die WDK wahrscheinlich enthält einen Beispielcode, einen Filter zu erstellen.

Es gibt auch die folgenden Download auf Microsofts Website: http://support.microsoft.com/kb / 176.417

Es ist wahrscheinlich ein wenig, da USB veraltet war nicht vorge NT5.0 unterstützt, aber vielleicht ist es nach wie vor relevant.

Sie können Autohotkey verwenden möchten. Dies ist eine Skriptsprache für Windows, die alle Tasten der Maus / Tastatur / Joysticks neu zuordnen können. Wenn Sie den Schlüssel durch ein Skript erfassen und eine Verzögerung ein, bevor Sie den richtigen Schlüssel / Makro an die aktive Anwendung zu senden, könnten Sie einen Teil einer Lösung für Ihr Problem haben.

Ich hatte den Eindruck, könnten Sie <dinput.h>

joySetCapture(wnd, JOYSTICKID1) or joySetCapture(wnd,JOYSTICKID2)

dann würde Joystick Ereignisse WM_JOYMOVE Ereignisse ausgelöst, obwohl das, was die wParam und lParam für die Nachricht würde ich keine Ahnung habe.

Dann, wenn Ihr Programm schließt oder Sie nicht mehr wollen joyReleaseCapture(JOYSTICKID1) usw.
es könnte nur leere params sein, die dann sagen joyGetPos oder joyGetPosEx Funktionen nutzen die Daten für sich selbst aus dem USB-Gerät zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top