Когда вы нажимаете ручки на джойстике, электрические сигналы достигают операционной системы (и попадают в игру) в виде IRP через цепочку драйверов.Перехват этих IRP в некоторый момент и задержка пересылки следующему драйверу может задержать ввод джойстика.Это может быть достигнуто с помощью фильтров драйверов .
. Для записи драйверов Windows необходимо использовать WinDDK .
Точкой входа драйвера Windows является Функция DriverEntry .В этой функции вы будете перехватывать то, что IRP вы хотите перехватить, и функции обратного вызова, которые имеют с ними дело, в нашем случае, функции обратного вызова, которые задерживают переадресацию.
Например, скажем, наш IRP, который будет задержан,IRP_MJ_READ
и наша функция обратного вызова называется 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;
...
}
Чтобы задержать пересылку внутри CallbackDelayForwarding
, вы должны использовать функции из семейства KeInitializeTimer для имитации некоторого видаsleep (возможно, в сочетании с блокировками), KeDelayExecutionThread и т. д.
Чтобы установить драйвер фильтра в цепочке драйверов джойстика, вы можете использовать .inf файлы .
Проверьте пример драйвера фильтра тостера в WinDDK, вы можете найти его по INSTALL_DIR/src/general/toaster/
, см. Также здесь .
Ссылки по теме:
http://www.rootkit.com/newsread.php?newsid=187
http://www.techtalkz.com/microsoft-device-drivers/269654-toaster-filter-driver.html