Wineがコンテナでカーネルモード(リング0)ドライバを実行できないのはなぜですか?

Wineがコンテナでカーネルモード(リング0)ドライバを実行できないのはなぜですか?

私はシステムプログラミングやオペレーティングシステムに精通していないので、愚かな質問かもしれません。しかし、最近はチート防止システムを実装したゲームをWineで実行しようとしました。多くのイライラの終わりに、私はチート防止システムをカーネルモード(「リング0」?)で実行しなければならず、Wineはユーザーモード(「リング3」?)で実行する必要があるため、これは不可能であることがわかりました。

リング0とリング3の違い、またはなぜワインがリング0とリング3では実行されますが、リング3では実行されないのかに関する多くの投稿があります.たとえば、ワインがカーネルモードドライバをサポートしていないのはなぜですか?

しかし、考えると、この問題はDockerのようなコンテナソリューションが解決する問題とは妙に馴染みがあるという感じです。 Docker内で実行されているWineがRing 0アクセスを安全に提供することは不可能ですか?それともDockerはユーザーモードプログラムのみを実行できますか?悪意のあるプログラムがコンピュータ上で実行されるのを防ぐためにコンテナを利用する可能性があります。なぜCPU全体をエミュレートするのですか?

ベストアンサー1

  • x86 リング 0 = 管理モード = カーネルモード
  • x86 リング 3 = ユーザーモード

DockerコンテナとDockerデーモンはユーザーモードで実行されます。コンテナはホストシステムとカーネルを共有します。 Dockerは、他のプログラムがカーネルの以前の機能を使用しているかのように、カーネルの新機能を使用します。

スーパーバイザモードでコードを実行すると、カーネルで実行され、すべてのプロセスとデータに対して強力なパフォーマンスを発揮します。

ただし、ハイパーバイザーモード(Virtual Boxまたは他のビジュアライゼーションツールを使用)でコードを実行できます。これを行うには、ユーザーモード部分だけでなくシステム全体を仮想マシンに配置する必要があります。したがって、カーネルモードコードを追加できます。

注:カーネルモードコードをインストールすると、システムを完全に制御できます。これにより、ユーザーが実行するすべてのタスクを確認し、必要なタスクを実行するようにマシンを制御できます。

おすすめ記事