reconoce - usb network joystick
Roll My Own Windows Joystick HID Driver? (5)
Cuando presiona las perillas en el Joystick, las señales eléctricas llegan al sistema operativo (y al juego) en forma de IRP''s través de la cadena de controladores. Interceptar estos IRP en algún momento y retrasar el reenvío al siguiente controlador puede retrasar la entrada del joystick. Esto se puede lograr con filtros de controladores .
Para escribir controladores de Windows es necesario utilizar WinDDK .
El punto de entrada de un controlador de Windows es la función DriverEntry . En esta función, se conectarán los IRP que desea interceptar y las funciones de devolución de llamada que se ocupan de ellos, en nuestro caso, las funciones de devolución de llamada que retrasan el reenvío.
Por ejemplo, digamos que nuestro IRP que se retrasará es IRP_MJ_READ
y nuestra función de devolución de llamada se llama CallbackDelayForwarding
:
// 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;
...
}
Para retrasar el reenvío dentro de CallbackDelayForwarding
, debe usar funciones de la familia KeInitializeTimer para simular algún tipo de suspensión (tal vez junto con bloqueos), KeDelayExecutionThread, etc.
Para instalar el controlador del filtro en la cadena del controlador del joystick, puede usar archivos .inf .
Verifique el ejemplo del controlador de filtro de tostadora en el WinDDK, puede encontrarlo en INSTALL_DIR/src/general/toaster/
vea también here .
Enlaces relacionados:
http://www.rootkit.com/newsread.php?newsid=187
http://www.techtalkz.com/microsoft-device-drivers/269654-toaster-filter-driver.html
Tengo un Joystick USB y quiero escribir mi propio controlador HID para ello. En particular, quiero inyectar un retraso entre el momento en que Windows recibe la entrada del joystick y cuando se notifica a mi aplicación ese evento de entrada. También me gustaría cambiar la identidad del joystick percibido por mi aplicación. Nunca he escrito un controlador, y mucho menos un controlador HID, para Windows. ¿Puede alguien proporcionarme consejos o sugerencias sobre cómo hacer esto?
Es posible que desee utilizar Autohotkey . Este es un lenguaje de script para Windows que puede reasignar todas las teclas del mouse / teclado / joysticks. Si captura la clave a través de un script e inserta un retraso antes de enviar la macro / clave correcta a la aplicación activa, es posible que tenga una parte de una solución a su problema.
Lo que estás tratando de hacer es un controlador de filtro.
Los controladores de filtro son controladores opcionales que agregan valor o modifican el comportamiento de un dispositivo. Un controlador de filtro puede dar servicio a uno o más dispositivos. fuente: http://msdn.microsoft.com/en-us/library/ff545890.aspx
Creo que el WDK contiene ejemplos. Debería descargar el Kit de controladores de Windows desde aquí: http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx
El WDK probablemente contiene un código de ejemplo para crear un filtro.
También hay la siguiente descarga en el sitio de microsoft: http://support.microsoft.com/kb/176417
Es probable que esté un poco desactualizado, ya que el USB no era compatible con NT5.0, pero quizás aún sea relevante.
Tenía la impresión de que podías usar <dinput.h>
joySetCapture(wnd, JOYSTICKID1) or joySetCapture(wnd,JOYSTICKID2)
luego los eventos del Joystick dispararían los eventos WM_JOYMOVE
, aunque no tengo ni idea de qué wParam
y lParam
serían para el mensaje.
Luego, cuando su programa se cierre o ya no desee joyReleaseCapture(JOYSTICKID1)
etc.
podrían ser simplemente parámetros vacíos que luego le dirán que use las funciones joyGetPos
o joyGetPosEx
para encontrar los datos por sí mismo desde el dispositivo USB.
Un buen lugar de inicio sería: http://www.microsoft.com/whdc/device/input/default.mspx