Подтвердить что ты не робот

Программный доступ к вентиляторам ЦП на ноутбуке? (Windows)

Есть ли стандартный способ Windows для выполнения таких действий, как "запуск вентилятора", "снижение скорости" или тому подобное, из C/С++?

У меня есть подозрение, что это может быть ACPI, но я хрупкий смертный и не могу прочитать такую ​​документацию.

Изменить: например. Windows 7 позволяет вам выбирать параметры вашего плана питания, такие как "пассивное охлаждение" (только когда что-то становится горячим?) Против "активного охлаждения" (держать процессор проактивно прохладным?). Кажется, что у ОС есть способ контролировать вентилятор в целом.

4b9b3361

Ответ 1

В настоящий момент я работаю над проектом, который, среди прочего, контролирует вентиляторы компьютера. В основном, вентиляторы контролируются микросхемой SuperIO вашего компьютера. Мы обращаемся к чипу напрямую, используя порт ввода-вывода с отображением портов, и оттуда мы можем добраться до устройства логического вентилятора. Использование IO с отображением портов требует, чтобы код запускался в режиме ядра, но в Windows не приводятся какие-либо драйверы для универсального порта ввода-вывода (без уважительной причины, так как это очень мощный инструмент), поэтому мы написали наш собственный драйвер и использовали его.

Если вы хотите спуститься по этому маршруту, вам понадобятся знания в двух областях: разработка драйверов и способы доступа и интерпретации информации чипа SuperIO. Когда мы начали проект, мы ничего не знали ни в одной из этих областей, поэтому он учился, просматривая, читал и, наконец, делал. Чтобы получить знания, нам особенно помогли посмотреть на эти ссылки:

  • WDK, который является набором драйверов для Windows. Вам нужно это, чтобы скомпилировать любой драйвер, который вы пишете для Windows. В него входит множество исходных кодов, например драйверов, в том числе драйвер для общего ввода-вывода с открытым портом, называемый portio.
  • WinIO имеет исходный код для драйвера на C, dll в C, который программно устанавливает и загружает этот драйвер, а также некоторый код С# для GUI, который загружает DLL и читает/записывает в порты. Драйвер очень похож на тот, что находится в portio.
  • lm-sensors - это проект linux, который, среди прочего, обнаруживает ваш чип superIO./prog/detect/sensors-detect - это программа perl, которая выполняет обнаружение, и мы потратили некоторое время на анализ кода, чтобы увидеть, как взаимодействовать с микросхемой superIO.
  • Когда мы проходили код lm-sensor, было очень приятно иметь такие инструменты, как RapidDriver и RW-все, поскольку они позволили нам моделировать запуск датчиков. Последнее является более мощным и очень полезно для визуализации пространства ввода-вывода, в то время как первое обеспечивает более легкий доступ к некоторым операциям, которые лучше отображают те, которые обнаруживаются датчиками (чтение/запись байта на порт).
  • Наконец, вам нужно найти техническое описание вашего чипа superIO. Из примеров, которые я видел, контроллеры среды каждого чипа обеспечивают аналогичную функциональность (скорость вращения вентилятора, температура чтения, считывание напряжения на кристалле), но меняются в том, какие регистры вы должны писать, чтобы перейти к этой функциональности, В этом месте были все таблицы данных, которые нам нужны до сих пор.

Ответ 2

Если вам нужно что-то реальное быстро, чтобы просто снизить поклонников до уровня, где вы знаете, что вещи не перегреваются, там программа speedfan для этого. Выяснение того, как настроить его в ранних версиях, чтобы автоматически снизить вентиляторы до 50% при запуске компьютера, было настолько болезненным, что мой первый подход состоял в том, чтобы просто байт-патч, чтобы запустить только управляемый вентилятор superio, который у меня был на более низкой скорости. Новейшие версии по-прежнему жесткие, но это вполне возможно - есть графическая слайдерная система, которая выглядит как звуковой эквалайзер, за исключением того, что ось x является temp, а y - скоростью вращения вентилятора. Вы перетаскиваете их один за другим. После того, как вы выясните, как получить ручное управление для вентилятора, который вы хотите, это следующий шаг.

Есть проект для мониторинга оборудования (например, вентиляторов) с помощью С#: http://code.google.com/p/open-hardware-monitor/

Я не очень внимательно смотрел на него, но исходный код и использование WinRing0.sys atleast создают впечатление, что, если вы знаете, какой контроллер вентилятора у вас есть, и у вас есть таблиц данных, он должен быть модифицирован, чтобы также устанавливать значения вместо просто получая их. Я не знаю, какой инструмент подходит (помимо отладчика ядра), чтобы посмотреть, что делает Speedfan, если вы предпочитаете обходить вокруг и имитировать speedfan вместо того, чтобы смотреть на таблицы данных и пробовать вещи.

Ответ 3

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

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

Ответ 4

ACPI может или не позволяет вам настроить настройки вентилятора. Некоторые реализации BIOS могут не допускать этого управления - они могут принудительно управлять в зависимости от настроек BIOS/CMOS. Один из них может быть затруднен для хорошего использования, когда контроль BIOS (даже настроенный) недостаточен. Я столкнулся с ситуациями, когда контроль BIOS действительно был недостаточным, но не для всех возможных платформ материнских плат.

Ответ 5

Библиотека инструментов управления WIndows (WMI) предоставляет класс Win32_Fan и даже метод SetSpeed. Увы, документы говорят, что это не реализовано, поэтому я думаю, что это не очень полезно. Но вы можете контролировать ситуацию, установив состояние питания.