SetServiceObjectSecurity 関数 (winsvc.h)

[SetServiceObjectSecurity は、[要件] セクションで指定したオペレーティング システムで使用できます。 今後のバージョンでは変更されるか、利用できなくなる場合もあります。 代わりに、 SetNamedSecurityInfo 関数を使用します。

SetServiceObjectSecurity 関数は、サービス オブジェクトのセキュリティ記述子を設定します。

構文

BOOL SetServiceObjectSecurity(
  [in] SC_HANDLE            hService,
  [in] SECURITY_INFORMATION dwSecurityInformation,
  [in] PSECURITY_DESCRIPTOR lpSecurityDescriptor
);

パラメーター

[in] hService

サービスへのハンドル。 このハンドルは、 OpenService または CreateService 関数によって返されます。 このハンドルに必要なアクセス権は、 dwSecurityInformation パラメーターで指定されたセキュリティ情報によって異なります。

[in] dwSecurityInformation

設定するセキュリティ記述子の構成要素を指定します。 このパラメーターは、次の値と組み合わせて使用できます。 SetServiceObjectSecurity によって処理されないフラグは、自動的に無視されることに注意してください。

説明
DACL_SECURITY_INFORMATION
オブジェクトの 随意アクセス制御リスト (DACL) を設定します。 hService で指定されるハンドルには、WRITE_DACアクセス権が必要です。または、呼び出し元のプロセスが オブジェクトの所有者である必要があります。
GROUP_SECURITY_INFORMATION
オブジェクトのプライマリ グループ セキュリティ識別子 (SID) を設定します。 hService で指定されたハンドルにはWRITE_OWNERアクセス権が必要です。または、呼び出し元のプロセスが オブジェクトの所有者である必要があります。
OWNER_SECURITY_INFORMATION
オブジェクトの所有者の SID を設定します。 hService で指定するハンドルにはWRITE_OWNERアクセス権が必要です。または、呼び出し元のプロセスがオブジェクトの所有者であるか、SE_TAKE_OWNERSHIP_NAME特権が有効になっている必要があります。
SACL_SECURITY_INFORMATION
オブジェクトの システム アクセス制御リスト (SACL) を設定します。 hService で指定されたハンドルには、ACCESS_SYSTEM_SECURITYアクセス権が必要です。

ACCESS_SYSTEM_SECURITY アクセス権を取得するには

  1. 呼び出し元の現在のアクセス トークンでSE_SECURITY_NAME特権を有効にします。
  2. ACCESS_SYSTEM_SECURITY アクセス用のハンドルを開きます。
  3. 特権を無効にします。

[in] lpSecurityDescriptor

新しいセキュリティ情報を含む SECURITY_DESCRIPTOR 構造体へのポインター。

戻り値

関数が成功した場合、関数は 0 以外の値を返します。

関数が失敗すると、0 が返されます。 詳細なエラー情報を得るには、GetLastError を呼び出します。

サービス コントロール マネージャーでは、次のエラー コードを設定できます。 その他のエラー コードは、サービス コントロール マネージャーによって呼び出されるレジストリ関数によって設定できます。

リターン コード 説明
ERROR_ACCESS_DENIED
指定したハンドルが必要なアクセス権で開かれていたか、呼び出し元のプロセスがオブジェクトの所有者ではありません。
ERROR_INVALID_HANDLE
指定されたハンドルが無効です。
ERROR_INVALID_PARAMETER
指定されたセキュリティ情報またはセキュリティ記述子が無効です。
ERROR_SERVICE_MARKED_FOR_DELETE
指定されたサービスは、削除対象としてマークされています。

解説

SetServiceObjectSecurity 関数は、lpSecurityDescriptor バッファーで指定された情報に基づいて、サービス オブジェクトのセキュリティ記述子の指定された部分を設定します。 この関数は、 dwSecurityInformation パラメーターに設定されているフラグに従って、サービス オブジェクトに関連付けられているセキュリティ情報の一部またはすべてを置き換え、呼び出し 元プロセスのアクセス権に従います。

サービスが作成されると、サービス 制御マネージャーはサービス オブジェクトに既定のセキュリティ記述子を割り当てます。 サービス オブジェクトのセキュリティ記述子のコピーを取得するには、 QueryServiceObjectSecurity 関数を呼び出します。 サービス オブジェクトの既定のセキュリティ記述子の説明については、「 サービス セキュリティとアクセス権」を参照してください。

信頼されていないユーザー (SERVICE_CHANGE_CONFIGやSERVICE_STOPなど) に特定のアクセス権を付与すると、サービスの実行に干渉し、LocalSystem アカウントでアプリケーションを実行できる場合があることに注意してください。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winsvc.h (Windows.h を含む)
Library Advapi32.lib
[DLL] Advapi32.dll

関連項目

CreateService

低レベルのAccess Control

低レベルのAccess Control関数

OpenService

QueryServiceObjectSecurity

SECURITY_DESCRIPTOR