今日のデジタル時代では、高速起動と効率的なシステム操作がユーザーにとって非常に重要です。 Windows システムは、短時間で多数のサービスを開始できます。その背後には、サービス コントロール マネージャー (SCM) と呼ばれるシステム プロセスがあります。システムの起動速度を向上させるには、SCM の動作が重要です。このプロセスがどのように機能するかを詳しく見てみましょう。
SCM は、Windows NT シリーズのオペレーティング システムにおける特別なシステム プロセスです。Windows サービス プロセスの開始、停止、管理を担当します。
SCM の実行可能ファイルは %SystemRoot%\System32\services.exe にあり、その主なタスクは自動的に開始するように構成されているすべてのサービスを開始することです。システムが起動すると、Wininit プロセスは SCM を早期に起動し、一連の初期化タスクを開始します。
起動プロセス中に、SCM はまずレジストリからサービスに関する情報を読み取ります。これには、2 つの重要なレジストリ エントリが関係します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List - サービス グループの名前と起動順序が含まれます。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - サービスとデバイス ドライバーの実際のデータベース。 この情報は、SCM が各サービスの起動順序と相互依存関係を判断するのに役立ちます。 SCM は、ブート プロセス中に起動する必要があるデバイス ドライバーが正常に読み込まれたかどうかも確認し、失敗したドライバーを ScFailedDrivers というリストに保存します。
すべての非遅延自動起動サービスが処理された後、SCM は遅延自動起動サービスの読み込みを開始します。これは、システムの起動を高速化するために Windows Vista 以降に導入された新機能です。通常、これらの遅延サービスは、システムの起動後約 120 秒後に初期化されます。自動的に開始される各サービスを処理する際、SCM は循環依存関係の発生を回避するためにロード順序の依存関係も考慮します。
開始する各サービスについて、SCM は ScStartService() 関数を呼び出して、そのプロセスが実行されているアカウントがサービスによって指定されたアカウントと一致することを確認します。このプロセス中に、サービスがシステム アカウントで実行されていない場合、SCM は LSASS 関数 LogonUserEx() を呼び出して、必要なユーザー ログイン情報を取得します。この情報は HKLM\SECURITY\Policy\Secrets\ レジストリ キーに保存され、フル アクセス権を持つサービスのみがこれらの「秘密」パスワードを取得できます。
サービス プロセスは作成時に中断状態になり、パイプライン接続が確立されるまで実行は再開されません。
サービス プロセスが正常に開始されると、SCM は名前付きパイプを作成してサービス プロセスとの通信チャネルを確立します。サービス プロセスは StartServiceCtrlDispatcher() 関数を呼び出してこのチャネルに参加し、SCM はサービスに「開始」コマンドを送信します。
遅延自動起動サービスの存在により、システム起動のバランスが大幅に向上します。これらのサービスは技術的には通常自動起動サービスとあまり変わりませんが、スムーズなシステム操作を確保するために、システム起動のさまざまな段階で初期化されるように設計されています。
SCM はデバイス ドライバーも管理します。これらのサービスのサービス タイプは、レジストリで SERVICE_KERNEL_DRIVER または SERVICE_FILE_SYSTEM_DRIVER としてマークされます。このような場合、SCM は ScLoadDeviceDriver() 関数を呼び出して対応するドライバーをシステムにロードします。これには通常、NtLoadDriver システム コールを呼び出す必要があります。
SCM は、Windows エクスプローラーなどの GUI アプリケーションにメッセージを送信して、ネットワーク ドライブ文字接続の変更を通知することもできます。
簡単に言うと、Windows システムのサービス コントロール マネージャーは、システムの起動プロセスにおいて不可欠な役割を果たします。これは、必要なサービスとデバイス ドライバーを効率的に読み込み、システム全体の迅速な応答と安定した動作を維持します。これらのテクノロジーを使用する際、その背後にある動作原理や技術的課題を考慮したことがありますか?