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