21

C/C++ から「ファンを起動する」、「速度を下げる」などの Windows 標準の方法はありますか?

ACPI ではないかと疑っていますが、私は虚弱な人間であり、その種のドキュメントを読むことはできません。

編集: たとえば、Windows 7 では、「パッシブ冷却」(熱くなったときのみ?) と「アクティブ冷却」(CPU を積極的に冷却する?) などの電源プラン オプションを選択できます。OSにはファンを一般的に制御する方法があるようです。

4

5 に答える 5

27

私は現在、特にコンピューターのファンを制御するプロジェクトに取り組んでいます。基本的に、ファンはコンピュータの superIO チップによって制御されます。ポートにマップされた IO を使用してチップに直接アクセスし、そこから論理ファン デバイスにアクセスできます。ポート マップ IO を使用するには、コードをカーネル モードで実行する必要がありますが、Windows は汎用ポート IO 用のドライバーを提供していません (これは非常に強力なツールであるため、正当な理由があります)。そのため、独自のドライバーを作成し、それを使用しました。

このルートをたどりたい場合は、基本的に、ドライバー開発と、superIO チップ情報にアクセスして解釈する方法の 2 つの分野に関する知識が必要です。プロジェクトを開始したとき、私たちはこれらの領域のどちらについても何も知らなかったので、ブラウジング、読書、そして最終的に実行することによって学習してきました。知識を得るために、次のリンクを参照することで特に助けられました。

  1. Windows Driver Kit であるWDK これは、windows 用に作成したドライバーをコンパイルするために必要です。portio と呼ばれる一般的なポート マップ IO 用のドライバーを含む、サンプル ドライバーのソース コードが大量に含まれています。
  2. WinIOには、C のドライバーのソース コード、そのドライバーをプログラムでインストールしてロードする C の dll、および dll をロードしてポートへの読み取り/書き込みを行う GUI 用の C# コードがあります。ドライバーはポルチオのものとよく似ています。
  3. lm-sensorsは Linux プロジェクトで、とりわけ、superIO チップを検出します。/prog/detect/sensors-detect は検出を行う perl プログラムであり、superIO チップとのインターフェース方法を確認するためにコードを調べるのに時間を費やしました。
  4. lm-sensors コードを調べていたとき、 RapidDriverRW-everythingなどのツールがあると非常に便利でした。これらのツールを使用すると、センサー検出の実行をシミュレートできたからです。後者はより強力で、IO スペースを視覚化するのに非常に役立ちますが、前者は、センサー検出 (ポートへのバイトの読み取り/書き込み) の操作によりよくマップされるいくつかの操作に簡単にアクセスできます。
  5. 最後に、superIO チップのデータシートを見つける必要があります。私が見た例から、各チップの環境コントローラーは同様の機能 (r/w ファン速度、読み取り温度、読み取りチップ電圧) を提供しますが、この機能に到達するためにどのレジスターに書き込む必要があるかが異なります。 . この場所には、これまでに必要だったすべてのデータシートがありました。
于 2010-06-02T22:44:32.627 に答える
4

過熱しないことがわかっているレベルまでファンを下げるだけの非常に迅速な方法が必要な場合は、それを行うための speedfan プログラムがあります。コンピュータの起動時にファンを自動的に 50% に下げるように初期のバージョンで構成する方法を理解するのは非常に苦痛だったので、最初のアプローチは単純にバイトパッチを適用して、superio で管理されている唯一のファンを低速で起動することでした。新しいバージョンはまだ少し難しいですが、実行可能です。x 軸が温度で、y 軸がファン速度であることを除いて、オーディオ イコライザーのように見えるグラフィカル スライダー システムがあります。それらを 1 つずつ下にドラッグします。必要なファンを手動で制御する方法を理解したら、これが次のステップです。

C# でハードウェア (ファンなど) を監視するプロジェクトがあります: http://code.google.com/p/open-hardware-monitor/

私はそれを詳しく見ていませんが、少なくともソースコードと WinRing0.sys の使用は、あなたが持っているファンコントローラーを知っていて、データシートを持っているなら、値を取得するだけでなく値を設定するように変更できるはずだという印象を与えます. データシートを見ていろいろ試してみるよりも、スピードファンを詮索して模倣したいのであれば、どのツールが (カーネル デバッガーのほかに) Speedfan の機能を調べるのに適しているかわかりません。

于 2014-01-21T21:53:30.183 に答える
2

はい、それはACPIであり、私の知る限り、ウィンドウはユーザー空間からそれをほとんど/まったく制御しません。そのため、ドライバーをいじり始める必要がありますが、これは Windows ではほぼ不可能です。

そうは言っても、Google は、特定のハードウェア用のオープン ソース Windows ライブラリがいくつかあることを明らかにしています。そのため、ハードウェアによっては、何かを見つけることができる場合があります。

于 2009-01-27T21:52:40.517 に答える
0

ACPI では、ファンの設定を調整できる場合とできない場合があります。一部の BIOS 実装では、その制御が許可されていない場合があります。BIOS/CMOS 設定に応じて強制的に制御される場合があります。BIOS 制御 (たとえカスタマイズされていても) が不十分である場合、適切な使用例を求めるのは難しいかもしれません。BIOS 制御が実際には不十分である状況に遭遇しましたが、考えられるすべてのマザーボード プラットフォームではそうではありませんでした。

于 2009-01-27T22:47:10.657 に答える
0

Windows Management Instrumentation ライブラリ (WMI) は、Win32_Fan クラスと SetSpeed メソッドを提供します。残念ながら、これは実装されていないとドキュメントに書かれているので、あまり役に立たないと思います。ただし、電源状態を設定することで制御できる場合があります。

于 2009-01-27T23:01:28.960 に答える