CServiceModule::Run

呼び出された後、実行最初のサービスのスレッド ID を格納しますサービスでは、この ID を使用して自体、Win32 API 関数を使用して、 WM_QUITメッセージを送信することによって終了します PostThreadMessage

Win32 API 関数を呼び出す実行[ CoInitializeEx。既定では、実行COINIT_MULTITHREADEDフラグを関数に渡します。このフラグは、プログラムがフリー スレッド サーバーにあることを示します。

CSecurityDescriptorを使用してセキュリティを指定することができます。このクラスを設定するタスクを簡素し、変更、随意アクセス制御リスト (DACL) ? どこへのアクセスを Win32 のオブジェクトに定義各 ACE のアクセス制御エントリ (Ace) のリスト。

既定では、ATL COM AppWizard はCSecurityDescriptorInitializeFromThreadTokenメンバー関数への呼び出しを生成します。これは、オブジェクトのセキュリティ記述子をすべてのユーザー オブジェクトへのアクセスがあることを意味は null の DACL を初期化します。

ユーザー アクセスを変更する最も簡単な方法は拒否許可するメンバー関数のCSecurityDescriptorです。これらの機能を既存の DACL に ACE を追加します。ただし、許可最後に追加されますが拒否ACE、DACL の先頭に追加しますので拒否は常に優先されます。拒否および許可ユーザー名の最初のパラメーターとアクセス権 (通常、 COM_RIGHTS_EXECUTE) 2 番目渡す。

InitializeFromThreadTokenによって作成された、null DACL がすべてのユーザーを COM オブジェクトへのアクセス許可ことを思い出してください。ACE を追加するには、許可を呼び出すとすぐに、ただし、のみ、ユーザーはアクセス指定。次のコードの呼び出しを許可するを示しています。:

CSecurityDescriptor sd;qdlInitializeFromThreadToken ();場合 (bAllowOneUser){特価;qdl(「MYDOMAIN\\myuser」、COM_RIGHTS_EXECUTE) が可能です。}CoInitializeSecurity (sd、-1、NULL, NULL,RPC_C_AUTHN_LEVEL_PKT、RPC_C_IMP_LEVEL_IMPERSONATE,NULL、EOAC_NONE、NULL)(&N)

場合は、変数 bAllowOneUser TRUEだけで、ユーザー指定の DACL のみがユーザーの ACE であるためにアクセスします。場合 bAllowOneUser 、DACL が null であるためすべてのユーザー アクセスしてFALSEです。

独自のセキュリティを指定するには、サービスを実行しない場合は、Win32 API 関数の呼び出しを削除 CoInitializeSecurityと COM は、レジストリのセキュリティ設定を確認します。レジストリの設定を構成するのには、便利な方法については、この記事の後半で説明した、 DCOMCNFGユーティリティであります。

セキュリティを指定すると、新しいクライアント プログラムに接続できるように、オブジェクトを COM に登録です。最後に、プログラムが実行されている SCM に指示し、プログラム、メッセージ ループに入ります。サービスのシャット ダウン時に終了メッセージを出すまでプログラムが実行中に残る。

Windows NT のセキュリティの詳細については、MSDN の記事「Windows NT セキュリティの理論と実践」を参照してください。

Index