CAtlServiceModuleT::Run 関数
Run には PreMessageLoop、RunMessageLoop、および PostMessageLoop の呼び出しが含まれます。 PreMessageLoop は、呼び出されると、最初にサービスのスレッド ID を格納します。 サービスは、終了時に Win32 API 関数 PostThreadMessage で WM_QUIT メッセージを送信しますが、そのときにこのスレッド ID が使用されます。
次に、PreMessageLoop は InitializeSecurity を呼び出します。 既定では、InitializeSecurity は CoInitializeSecurity を呼び出してセキュリティ記述子を NULL に設定します。つまり、どのユーザーでもオブジェクトにアクセスできるようにします。
サービスでセキュリティの設定をしない場合は、PreMessageLoop をオーバーライドして InitializeSecurity を呼び出しません。そうすると、COM がレジストリからセキュリティの設定を行います。 レジストリの設定を行うには、後で説明する DCOMCNFG ユーティリティを使用すると便利です。
セキュリティを指定すると、新しいクライアントがプログラムにアクセスできるようにオブジェクトが COM に登録されます。 最後に、プログラムは、実行中であることをサービス コントロール マネージャー (SCM: Service Control Manager) に通知し、メッセージ ループに入ります。 プログラムは、サービスをシャットダウンするときに終了メッセージを出すまで、実行を継続します。