Windows эквивалентно inb(), outb(), низкий уровень ввода / вывода
У меня есть некоторый код Linux, который контролирует наше оборудование, собирая температуру, напряжение и скорость вращения вентилятора с материнской платы, используя функции низкоуровневого ввода-вывода inb(), outb(), inl() и т. Д.
Моя задача - перенести этот код для запуска под Windows в виде простого консольного приложения. Но я озадачен тем, какие функции Win32 (или.NET) предоставляют мне разрешение на доступ к портам с прямым отображением в памяти.
Я тоже не хочу кодировать системный драйвер.
Я предпочитаю инструмент Windows для VS2008. (FYI)
Это возможно?
3 ответа
Что ж, после долгих поисков с пробами и ошибками, два наиболее полезных фрагмента, которые я нашел полезными:
Они в основном делают одно и то же, разница в том, что примеры кода, которые вы найдете, помогут вам начать использовать их.
Надеюсь, что это помогает другим.
Уровень защиты по умолчанию для портов ввода / вывода в Windows не позволяет программе пользовательского режима использовать инструкции inp и out для любого порта. Ваша программа умрет с GPF. Существует несколько свободно доступных драйверов, которые изменяют этот уровень защиты, чтобы код кольца 3 мог получить доступ к портам. Что хорошо, если вы заинтересованы в убийственных ударах.
Канонический - inpout32.
Большинство аппаратных расположений отображаются в областях, недоступных из пользовательского пространства, поэтому вам понадобится драйвер устройства, который предоставляет желаемый API.
Вы также можете проверить Руководство по миграции приложений UNIX и MSDN.