2009-09-13 3 views
8

Windows 7(またはVista)のプロセスでリング0の動作モードをどのように取得できますか?C++でリング0モードを取得する(Windows)

+3

自分自身に質問してください:私は本当にリング0カーネルプロセスを書いていますか? –

+0

実際、あなたがリング0で走りたい理由を教えてください。それが良い解決策であるかどうかを教えてくれます。 – Artelius

+0

@Mitch:WikipediaでKERNALを検索してください。スペルミスです。 – Artelius

答えて

16

リング0で任意のコードを実行できるようにすると、基本的なOSのセキュリティ原則に違反します。

OSカーネルとデバイスドライバのみがリング0で動作します。リング0コードを書きたい場合は、Windowsデバイスドライバを作成します。 Thisが役に立ちます。

特定のセキュリティホールは、あなたのコードはまた、リング0で実行できるようにするかもしれませんが、穴がパッチで修正される可能性があるため、これはポータブルではありません:P

+0

Windowsデバイスドライバの作成方法は? –

+0

私の答えを編集しました。 – Artelius

+0

ありがとう、これは非常に良いと有用です! –

2

あなたはユーザーモードプロセスからカーネルモードを設定することはできません。それがセキュリティの仕組みです。

7

技術的に言えば、すべてのプロセスでは、カーネルモード(リング0)で時間の一部を費やしているスレッドがあります。ユーザーモードのプロセスがOSにシステムコールを行うたびに、スレッドが 'ゲート'を介してリング0に入る遷移があります。プロセスがデバイスと対話し、プロセス全体のメモリを割り当てたり、新しいスレッドを生成したりする必要がある場合は、OSにこのサービスを提供するように尋ねるためにシステムコールが使用されます。

したがって、プロセスにリング0でコードを実行させたい場合は、ドライバを作成してから、このドライバといくつかのシステムコールを介して通信する必要があります。これに最も一般的なシステムコールは、ioctl(I/O Controlの略)と呼ばれます。

Windowsプラットフォームで見るもう1つのことは、UMDF(ユーザーモードドライバフレームワーク)です。これにより、ドライバをユーザーモード(リング3で実行中)で書き込み、デバッグ、テストすることができますが、システム内の他のドライバや他のプロセスが引き続きアクセスすることができます。

関連する問題