Windows эквивалентно inb (), outb (), низкий уровень ввода / вывода - PullRequest
1 голос
/ 09 апреля 2010

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

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

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

Мой инструмент Windows предпочтителен VS2008. (FYI)

Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010

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

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

0 голосов
/ 15 апреля 2010

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

WinRing0 и IO.DLL .

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

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

0 голосов
/ 09 апреля 2010

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

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

...