Как читать из подключенного к памяти порта ввода / вывода в .Net? - PullRequest
3 голосов
/ 16 октября 2008

Могут ли стандартные указатели в .Net сделать это? Или нужно прибегнуть к P / invoke?

Обратите внимание, что я не говорю о ссылках на объекты; Я говорю о реальных C # указателях в небезопасном коде.

Ответы [ 2 ]

5 голосов
/ 16 октября 2008

C #, как управляемый и защищенный механизм времени выполнения, не разрешает низкоуровневый доступ к оборудованию, а области памяти, связанные с фактическим оборудованием, недоступны.

Вам потребуется использовать драйвер порта или написать свой собственный на C ++ или C с соответствующим Windows API для доступа к интересующим областям ввода-вывода с отображением в памяти. Это будет работать в более низком кольце, чем способны программы на C #.

Вот почему вы не видите драйверов, написанных на C #, хотя я понимаю, что многие пишут подпрограммы доступа на C ++, но основная логика драйверов в C #. Однако это сложно, так как сбои и перезапуск могут стать хитрыми, не говоря уже о проблемах синхронизации и синхронизации (которые несколько более конкретны в C ++ на более низком уровне, даже если Windows далека от системы реального времени).

-Adam

3 голосов
/ 16 октября 2008

Чтобы расширить ответ Адама , вы даже не можете выполнить отображение ввода-вывода с отображением в памяти из приложения Win32 без сотрудничества с драйвером ядра. Все адреса, которые получает приложение Win32, являются виртуальными адресами, которые не имеют ничего общего с физическими адресами.

Вам либо нужно написать драйвер ядра, чтобы делать то, о чем вы говорите, либо установить драйвер, который имеет API, который позволит вам делать запросы на ввод / вывод по определенным физическим адресам (и такой драйвер будет я бы вообразил довольно большую дыру в безопасности) Кажется, я вспоминал об этом, когда в каком-то наряде такой драйвер входил в состав комплекта для разработки, чтобы помочь переносить устаревшую версию DOS / Win16 или любой другой код устройства на Win32. Я не помню его имени и не знаю, все ли еще вокруг.

...