una - mvc c# windows forms
Desarrollo del controlador C#? (7)
Antes de saltar de cabeza en C # ...
Siempre sentí que C, o tal vez C ++, era mejor para desarrollar controladores en Windows. No estoy interesado en la idea de desarrollar un controlador en una máquina .NET.
Pero .NET parece ser la forma en que MS se dirige hacia el desarrollo de aplicaciones, por lo que ahora me pregunto:
- ¿Las personas están usando C # para desarrollar controladores?
- ¿Tiene que hacer muchos enganches de API, o C # tiene las facilidades para interactuar con el kernel sin una gran cantidad de hackers?
- ¿Alguien puede hablar de la fiabilidad y la seguridad de ejecutar un programa C # más cerca del Anillo 0 de lo que normalmente sería el caso?
Quiero que mis dispositivos se puedan usar en C #, y si el controlador dev en C # está maduro, obviamente es el camino a seguir, pero no quiero gastar mucho esfuerzo allí si no es recomendable.
- ¿Cuáles son algunos buenos recursos para comenzar, por ejemplo, a desarrollar un controlador de puerto serie virtual simple?
-Adán
¿Alguien puede hablar de la fiabilidad y la seguridad de ejecutar un programa C # más cerca del Anillo 0 de lo que normalmente sería el caso?
C # se ejecuta en la máquina virtual .NET, no puede acercarlo más al Anillo 0 que la VM, y la VM se ejecuta en el espacio de usuario.
Escribir controladores de dispositivos en .net no tiene sentido para las versiones actuales de Windows.
<especulación>
Los rumores dicen que MS está invirtiendo una gran cantidad de dinero para llevar Singularity al próximo nivel. Solo busca a Midori . Pero eso es 2015+
</ especulación>
Esto te ayudará de alguna manera: Windows Driver Kit
Microsoft tiene una serie de proyectos de investigación en el área de tener un sistema operativo de código administrado, en otras palabras matar con Win32 API.
Ver el artículo de Mary Jo Foley: Reconstruir un legado
No es una respuesta directa a su pregunta, pero si está interesado, puede ver el proyecto Singularity .
No puede hacer controladores de dispositivo en modo kernel en C # ya que el tiempo de ejecución no se puede cargar de manera segura en ring0 y operar como se espera.
Además, C # no crea binarios adecuados para cargar como controladores de dispositivos, en particular con respecto a los puntos de entrada que los conductores deben exponer. La dependencia del tiempo de ejecución para saltar y analizar y JIT el binario durante la carga prohíbe el acceso directo que el subsistema del controlador necesita para cargar el binario.
Sin embargo, hay trabajos en curso para levantar algunos controladores de dispositivo al modo de usuario, puede ver una entrevista aquí con Peter Wieland del equipo de UDMF (User Mode Driver Framework).
Los controladores en modo usuario serían mucho más adecuados para el trabajo administrado, pero tendrá que buscar un poco de Google para averiguar si C # y .NET serán compatibles directamente. Todo lo que sé es que los controladores de nivel de kernel no son factibles solo en C #.
Sin embargo, es posible que cree un controlador C / C ++ y un servicio C # (o similar) y que el controlador hable con el código administrado, si es absolutamente necesario escribir mucho código en C #.
Si está dispuesto a utilizar el marco patentado, el kit de herramientas WinDriver de Jungo admite el desarrollo de controladores en modo usuario (incluso en código administrado) para dispositivos USB, PCI y PCI-E.