Pregunta

Antes de lanzarme precipitadamente a C#...

Siempre sentí que C, o tal vez C++, era mejor para desarrollar controladores en Windows.No me gusta la idea de desarrollar un controlador en una máquina .NET.

Pero .NET parece ser el camino hacia el que MS se dirige para el desarrollo de aplicaciones, por lo que ahora me pregunto:

  • ¿La gente utiliza C# para desarrollar controladores?
  • ¿Tiene que hacer muchos enlaces de API o C# tiene las instalaciones para interactuar con el kernel sin mucha piratería?
  • ¿Alguien puede hablar de la confiabilidad y seguridad de ejecutar un programa C# más cerca del Anillo 0 de lo que sería normalmente?

Quiero que mis dispositivos se puedan utilizar en C#, y si el desarrollo de controladores en C# está maduro, ese es obviamente el camino a seguir, pero no quiero gastar mucho esfuerzo en ello si no se recomienda.

  • ¿Cuáles son algunos buenos recursos para comenzar, por ejemplo, a desarrollar un controlador de puerto serie virtual simple?

-Adán

¿Fue útil?

Solución

No puede crear controladores de dispositivos en modo kernel en C# ya que el tiempo de ejecución no se puede cargar de forma segura en ring0 y funcionar como se esperaba.

Además, C# no crea archivos binarios adecuados para cargar como controladores de dispositivos, especialmente en lo que respecta a los puntos de entrada que los controladores 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.

Se está trabajando, sin embargo, para poner algunos controladores de dispositivos en modo de usuario; puede ver una entrevista aquí con Peter Wieland del equipo UDMF (User Mode Driver Framework).

Los controladores en modo de usuario serían mucho más adecuados para el trabajo administrado, pero tendrás que buscar un poco en Google para saber si C# y .NET serán compatibles directamente.Todo lo que sé es que los controladores a nivel de kernel no son factibles solo en C#.

Sin embargo, probablemente pueda crear un controlador C/C++ y un servicio C# (o similar) y hacer que el controlador se comunique con el código administrado, si es absolutamente necesario escribir mucho código en C#.

Otros consejos

Esto te ayudará de alguna manera: Kit de controladores de Windows

No es una respuesta directa a su pregunta, pero si está interesado, puede consultar Proyecto de singularidad.

¿Alguien puede hablar de la confiabilidad y seguridad de ejecutar un programa C# más cerca del Anillo 0 de lo que sería normalmente?

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.

Si está dispuesto a probar un marco propietario, Kit de herramientas WinDriver de Jungo admite el desarrollo de controladores en modo de usuario (incluso en código administrado) para dispositivos USB, PCI y PCI-E.

Microsoft tiene una serie de proyectos de investigación en el área de tener un sistema operativo de código administrado, en otras palabras, eliminar con la API Win32.

Vea el artículo de Mary Jo Foley: Reconstruyendo un legado

Escribir controladores de dispositivos en .net no tiene sentido para las versiones actuales de Windows.

<especulación>
Se rumorea que MS está invirtiendo mucho dinero para llevar Singularity al siguiente nivel.solo busca midori.Pero eso es 2015+
</especulacion>

Si no recuerdo mal, el Proyecto Dokan es un controlador de sistema de archivos en modo de usuario, que también permite que un controlador del sistema ejecute código .NET: https://github.com/dokan-dev/dokan-dotnet.

Por lo tanto, podría desarrollar un "controlador" de C# (en realidad, una aplicación en modo de usuario), que luego es llamado/invocado por un controlador en modo kernel de C++.El controlador del kernel podría simplemente pasar todo sin manipular los datos y actuar como un simple contenedor.
No hace falta mencionar que es muy inseguro y lo más probable es que termines con un BSOD (lo probé).


Ligeramente relacionado:

El Proyecto Cosmos es un sistema operativo de código abierto, desarrollado en C# y ejecuta
"Controladores (kernel)" y aplicaciones a nivel de usuario escritas completamente en C#/F#/VB.NET/...

Aunque técnicamente estos son controladores a nivel de kernel, el sistema operativo ya no es Windows sino el suyo, así que supongo que esta no es una respuesta correcta...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top