Windows эквивалентно inb(), outb(), низкий уровень ввода / вывода

У меня есть некоторый код Linux, который контролирует наше оборудование, собирая температуру, напряжение и скорость вращения вентилятора с материнской платы, используя функции низкоуровневого ввода-вывода inb(), outb(), inl() и т. Д.

Моя задача - перенести этот код для запуска под Windows в виде простого консольного приложения. Но я озадачен тем, какие функции Win32 (или.NET) предоставляют мне разрешение на доступ к портам с прямым отображением в памяти.

Я тоже не хочу кодировать системный драйвер.

Я предпочитаю инструмент Windows для VS2008. (FYI)

Это возможно?

3 ответа

Решение

Что ж, после долгих поисков с пробами и ошибками, два наиболее полезных фрагмента, которые я нашел полезными:

WinRing0 и IO.DLL.

Они в основном делают одно и то же, разница в том, что примеры кода, которые вы найдете, помогут вам начать использовать их.

Надеюсь, что это помогает другим.

Уровень защиты по умолчанию для портов ввода / вывода в Windows не позволяет программе пользовательского режима использовать инструкции inp и out для любого порта. Ваша программа умрет с GPF. Существует несколько свободно доступных драйверов, которые изменяют этот уровень защиты, чтобы код кольца 3 мог получить доступ к портам. Что хорошо, если вы заинтересованы в убийственных ударах.

Канонический - inpout32.

Большинство аппаратных расположений отображаются в областях, недоступных из пользовательского пространства, поэтому вам понадобится драйвер устройства, который предоставляет желаемый API.

Вы также можете проверить Руководство по миграции приложений UNIX и MSDN.

Другие вопросы по тегам