Quiero que desviarse EndScene
desde una aplicación arbitraria de DirectX 9 para crear una pequeña superposición. Como ejemplo, puede tomar la superposición del contador de fotogramas de FRAPS, que se muestra en los juegos cuando se activa.El enganchar DirectX endScene de una DLL inyectado
sé los siguientes métodos para hacer esto:
Creación de una nueva d3d9.dll, que luego se copia en el camino de juegos. Desde la carpeta actual se busca en primer lugar, antes de ir a System32 etc., mi DLL modificada se carga, la ejecución de mi código adicional.
Desventaja: Tienes que ponerlo allí antes de comenzar el juego.
- Igual que el primer método, pero reemplazando la DLL en system32 directamente.
Desventaja: No se puede agregar el código específico del juego. No puede excluir aplicaciones donde no desea que se cargue su DLL.
- Obteniendo la compensación de EndScene directamente desde la DLL usando herramientas como IDA Pro 4.9 Gratis. Dado que la DLL se carga como es, puede simplemente añadir este desplazamiento a la DLL dirección de inicio, cuando se asigna al juego, para conseguir compensar el real, y luego conectarlo.
Desventaja: El desplazamiento no es el mismo en todos los sistemas.
- El enganchar Direct3DCreate9 para obtener el D3D9, después enganchando D3D9-> CreateDevice para obtener el puntero del dispositivo, y después enganchando Device-> endScene a través de la mesa virtual.
Desventaja: El DLL no se puede inyectar, cuando el proceso ya se está ejecutando. Usted tiene que comenzar el proceso con la bandera
CREATE_SUSPENDED
para enganchar la primera Direct3DCreate9.- Creando un nuevo dispositivo en una nueva ventana, tan pronto como se inyecta el DLL. A continuación, obtener la
EndScene
desplazamiento desde este dispositivo y conectarlo, lo que resulta en un gancho para el dispositivo que se utiliza por el juego.
Desventaja: como de alguna información que he leído, la creación de un segundo dispositivo puede interferir con el dispositivo existente, y que puede fastidiar con ventana frente a modo de pantalla completa, etc.
- Igual que la tercer método. Sin embargo, que va a hacer una exploración del patrón para obtener
EndScene
.
Desventaja: no parece tan confiable.
Cómo puedo enganchar EndScene
de una DLL inyectado, que puede ser cargado cuando el juego ya se está ejecutando, sin tener que tratar con diferentes d3d9.dll 's en otros sistemas, y con un método que ¿es confiable? ¿Cómo funciona, por ejemplo, FRAPS sus ganchos de DirectX? La DLL no debería aplicarse a todos los juegos, solo a procesos específicos en los que lo inyecté a través del CreateRemoteThread
.
la salida de este para más detalles: Windows a través de C/C++, Capítulo 22 - DLL de inyección y API que engancha, Inyectar una DLL con Windows Ganchos – whunmr
Quiero inyectar el archivo DLL a través de 'CreateRemoteThread'. No quiero un gancho global, solo para juegos específicos. – Etan
Luego solo deje caer el primer paso. – Christopher