2009-06-15 17 views
26

He escrito anteriormente en C/C++ pero actualmente, lo necesito para convertirlo en C#.Escribiendo controladores en C#

¿Alguien me puede decir el código/forma Cómo escribir controladores en C#?

Actualmente, tengo algunos problemas con mi aplicación anterior escrita en C++ y tenemos que escribir los controladores de nuestras impresoras LPT1, COM y otros controladores USB en C#.

Respuesta

22

Simplemente no puedes. C# produce un lenguaje intermedio interpretado por una máquina virtual (.NET). Todo esto se ejecuta en modo de usuario y los controladores WDM se ejecutan en modo kernel.

Hay un DDK pero tampoco es compatible con VStudio (pero puede hacer un proyecto de archivo MAKE para la compilación).

El desarrollo de controladores es complejo, propenso a la pantalla azul y requiere una buena comprensión de C, estructuras de núcleo y manipulación de mem. Ninguna de esas habilidades es necesaria para C# y .NET, por lo tanto, hay una ruta de entrenamiento larga y dolorosa.

+0

Teniendo en cuenta que el código debe estar firmado antes de la ejecución, no es posible crear un controlador firmado tampoco (aunque IL puede ser) si el código está JITted. (En Xbox 360, todos los códigos XNA/.NET se ejecutan en el espacio de usuario al contrario que los juegos de códigos nativos, por lo que aparentemente Microsoft no tiene una "solución" para esto). Sin embargo, hay algunos sistemas operativos C# en los que los controladores están hechos en C#, bastante prolijo. –

+2

No todos los controladores de dispositivos en Windows requieren que se ejecute el modo kernel. Los controladores de video, y creo que los controladores de audio, ahora se ejecutan en modo de usuario tanto en Windows Vista como en Windows 7.También ahora hay un Framework de Controlador de Modo de Usuario disponible de Microsoft. Tenga en cuenta que si funciona con .NET, probablemente todavía esté basado en C/C++. http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx –

1

No puede escribir controladores en C#; los controladores deben funcionar con privilegios elevados para poder hablar con el hardware; el código administrado no se puede ejecutar en el entorno apropiado.

+0

De lo contrario, ¿hay alguna manera de manejar mi código anterior en C#? –

+0

Bueno, realmente no sabemos lo que hace tu código. ¿Estás hablando de escribir controladores de dispositivos en C#, que no es posible (como se mencionó) o estás hablando de abrir los dispositivos en C# y enviarles datos (lo cual debería ser posible ya que deberías poder abrirlos como un archivo y solo leer/escribir en el mango). –

10

No puede escribir controladores de modo kernel en C# (el tiempo de ejecución se ejecuta en modo de usuario, por lo tanto, no puede entrar en ring0). Este SO Q/A proporciona algunos enlaces le pueden resultar útiles:

C# driver development?

26

En realidad, se puede escribir algunos conductores en C# si utiliza UMDF ya que se ejecuta en modo de usuario (ver Getting Started with UMDF). Pero mi recomendación es usar C/C++.

+0

Ese enlace ya no va directamente a UMDF, y mi Google-fu no muestra nada que indique que pueda escribir controladores de modo de usuario en C# hoy. –

+0

@Oran: Gracias, he actualizado el enlace. Creo que C# no se usa para UMDF porque Microsoft no proporciona soporte inmediato y usted necesita hacer muchas cosas por su cuenta (declarando funciones, constantes, struct y etc.). –

8

No está claro a partir de su descripción si tiene la intención de desarrollar controladores de dispositivos de Windows o interactuar con el hardware a través de los controladores de dispositivos existentes.

Por ejemplo, para interactuar con dispositivos conectados a su puerto serie, no necesita escribir su propio controlador y, de hecho, puede acceder a él a través de la clase SerialPort de .NET.

Incluso los dispositivos USB se puede acceder desde el espacio de usuario (y, en última instancia, código administrado) a través de marcos como libusb-win32, etc. WinUSB

Cuestiones relacionadas