Pregunta

¿Pueden los punteros estándar en .Net hacer esto? ¿O es necesario recurrir a P / invocar?

Tenga en cuenta que no estoy hablando de referencias a objetos; Estoy hablando de punteros C # reales en código inseguro.

¿Fue útil?

Solución

C #, como motor de tiempo de ejecución administrado y protegido, no permite el acceso de hardware de bajo nivel y las ubicaciones de memoria asociadas con el hardware real no están disponibles.

Necesitará usar un controlador de puerto o escribir el suyo en C ++ o C con la API de Windows adecuada para acceder a las regiones de E / S de memoria asignadas. Esto se ejecutará en un anillo más bajo del que los programas de C # son capaces de hacer.

Es por esto que no ve los controladores escritos en C #, aunque entiendo que muchos están escribiendo rutinas de acceso con C ++, pero la lógica del controlador principal en C #. Sin embargo, es complicado, ya que los bloqueos y el reinicio pueden volverse complicados, por no mencionar los problemas de sincronización y sincronización (que son algo más concretos en C ++ con un anillo inferior, aunque Windows está lejos de ser un sistema en tiempo real).

-Adam

Otros consejos

Para expandir en la respuesta de Adam , ni siquiera puede realizar E / S asignadas en memoria desde una aplicación Win32 sin la cooperación de un controlador de kernel. Todas las direcciones que obtiene una aplicación Win32 son direcciones virtuales que no tienen nada que ver con direcciones físicas.

O bien necesita escribir un controlador de kernel para hacer lo que está hablando o tener instalado un controlador que tenga una API que le permita realizar solicitudes de E / S en direcciones físicas particulares (y ese controlador sería un agujero de seguridad bastante grande esperando a suceder, me imagino). Me parece recordar de esa manera cuando algún equipo tenía un controlador de este tipo como parte de un kit de desarrollo para ayudar a portar DOS / Win16 heredados o cualquier otro código de dispositivo a Win32. No recuerdo su nombre ni sé si todavía está cerca.

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