ユーザー モードとカーネル モード
Windows を実行しているコンピューターのプロセッサは、ユーザー モードとカーネル モードという 2 つの異なるモードで動作します。 プロセッサは、実行しているコードの種類に応じて、これらのモードを切り替えます。 アプリケーションはユーザー モードで動作し、コア オペレーティング システム コンポーネントはカーネル モードで機能します。 多くのドライバーはカーネル モードで動作しますが、ユーザー モードで機能するドライバーもあります。
ユーザー モード
アプリケーションをユーザー モードで起動すると、Windows によってそのプロセスが作成されます。 このプロセスは、アプリケーションにプライベート仮想アドレス空間とプライベート ハンドル テーブルを提供します。 各アプリケーションの仮想アドレス空間はプライベートであるため、あるアプリケーションが別のアプリケーションのデータを変更することはできません。 各アプリケーションは分離して実行されるため、1 つのアプリケーションがクラッシュしても他のアプリケーションやオペレーティング システムに影響が及ぶことはありません。
ユーザーモード アプリケーションの仮想アドレス空間も制限されています。 ユーザー モードで実行されているプロセスは、オペレーティング システム用に予約されている仮想アドレスにアクセスできません。 ユーザーモード アプリケーションの仮想アドレス空間を制限することで、アプリケーションが重要なオペレーティング システム データを変更または損傷するのを防ぐことができます。
カーネル モード
カーネル モードで実行されているすべてのコードは、1 つの仮想アドレス空間を共有します。 その結果、カーネルモード ドライバーは、他のドライバーやオペレーティング システムから分離されません。 カーネルモード ドライバーが誤って不適切な仮想アドレスに書き込んだ場合、オペレーティング システムまたは別のドライバーに属するデータが侵害される可能性があります。 カーネルモード ドライバーがクラッシュすると、オペレーティング システム全体がクラッシュします。
次の図は、ユーザー モード コンポーネントとカーネル モード コンポーネント間の通信を示しています。