Question

Est-ce que les pointeurs standard en .Net peuvent le faire? Ou faut-il recourir à P / invoke?

Notez que je ne parle pas de références d'objet; Je parle de pointeurs C # réels dans un code non sécurisé.

Était-ce utile?

La solution

C #, en tant que moteur d'exécution géré et protégé, n'autorise pas l'accès au matériel de bas niveau et les emplacements de mémoire associés au matériel réel ne sont pas disponibles.

Vous devez utiliser un pilote de port ou écrire le vôtre en C ++ ou C avec l'API Windows appropriée pour accéder aux régions d'intérêt d'E / S mappées en mémoire. Cela fonctionnera dans un anneau inférieur à celui que les programmes C # sont capables de faire.

C’est la raison pour laquelle vous ne voyez pas les pilotes écrits en C #, bien que je sache que beaucoup écrivent des routines d’accès en C ++, mais la logique de pilote principale en C #. C’est toutefois délicat, car les pannes et les redémarrages peuvent devenir délicats, sans parler des problèmes de synchronisation et de synchronisation (qui sont un peu plus concrets en C ++ à un anneau inférieur, même si Windows est loin d’un système en temps réel).

-Adam

Autres conseils

Pour approfondir réponse d'Adam , vous ne pouvez même pas effectuer d'E / S mappées en mémoire à partir d'une application Win32 sans la coopération d'un pilote du noyau. Toutes les adresses obtenues par une application Win32 sont des adresses virtuelles qui n’ont rien à voir avec des adresses physiques.

Vous devez soit écrire un pilote du noyau pour faire ce dont vous parlez, soit installer un pilote doté d’une API qui vous permettra de faire des requêtes d’E / S sur des adresses physiques particulières (et ce pilote serait j'imagine que c'est un trou de sécurité assez grand qui attend, Il me semble que je me souvenais de cette époque lorsque certaines entreprises avaient un tel pilote dans le cadre d’un kit de développement pour aider à porter le système DOS / Win16 hérité ou tout autre code de périphérique vers Win32. Je ne me souviens pas de son nom ni de savoir s'il est toujours là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top