SetSecurityInfo 関数 (aclapi.h)

SetSecurityInfo 関数は、指定したオブジェクトのセキュリティ記述子に指定されたセキュリティ情報を設定します。 呼び出し元は、ハンドルによってオブジェクトを識別します。

オブジェクトの SACL を設定するには、呼び出し元で SE_SECURITY_NAME 特権が有効になっている必要があります。

構文

DWORD SetSecurityInfo(
  [in]           HANDLE               handle,
  [in]           SE_OBJECT_TYPE       ObjectType,
  [in]           SECURITY_INFORMATION SecurityInfo,
  [in, optional] PSID                 psidOwner,
  [in, optional] PSID                 psidGroup,
  [in, optional] PACL                 pDacl,
  [in, optional] PACL                 pSacl
);

パラメーター

[in] handle

セキュリティ情報を設定するオブジェクトへのハンドル。

[in] ObjectType

handle パラメーターによって識別されるオブジェクトの型を示すSE_OBJECT_TYPE列挙体のメンバー。

[in] SecurityInfo

設定するセキュリティ情報の種類を示すビット フラグのセット。 このパラメーターには、 SECURITY_INFORMATION ビット フラグの組み合わせを指定できます。

[in, optional] psidOwner

オブジェクトの所有者を識別する SID へのポインター。 SID は、セキュリティ記述子の所有者 SID として割り当てることができる SID である必要があります。 SecurityInfo パラメーターには、OWNER_SECURITY_INFORMATION フラグを含める必要があります。 所有者 SID を設定していない場合、このパラメーターは NULL にすることができます。

[in, optional] psidGroup

オブジェクトのプライマリ グループを識別する SID へのポインター。 SecurityInfo パラメーターには、GROUP_SECURITY_INFORMATION フラグを含める必要があります。 プライマリ グループ SID を設定していない場合、このパラメーターは NULL にすることができます。

[in, optional] pDacl

オブジェクトの新しい DACL へのポインター。 SecurityInfo パラメーターの値に DACL_SECURITY_INFORMATION フラグが含まれている場合を除き、このパラメーターは無視されます。 SecurityInfo パラメーターの値に DACL_SECURITY_INFORMATION フラグが含まれており、このパラメーターの値が NULL に設定されている場合、オブジェクトへのフル アクセスがすべてのユーザーに付与されます。 null DACL の詳細については、「DACL の作成」を参照してください。

[in, optional] pSacl

オブジェクトの新しい SACL へのポインター。 SecurityInfo パラメーターには、SACL_SECURITY_INFORMATION、LABEL_SECURITY_INFORMATION、ATTRIBUTE_SECURITY_INFORMATION、SCOPE_SECURITY_INFORMATION、またはBACKUP_SECURITY_INFORMATIONのいずれかのフラグを含める必要があります。 SACL_SECURITY_INFORMATIONまたはSCOPE_SECURITY_INFORMATIONを設定する場合、呼び出し元はSE_SECURITY_NAME特権を有効にする必要があります。 SACL を設定しない場合、このパラメーターは NULL にすることができます。

戻り値

関数が成功した場合、関数はERROR_SUCCESSを返します。

関数が失敗した場合、WinError.h で定義されている 0 以外のエラー コードが返されます。

注釈

オブジェクトの随意アクセス制御リスト (DACL) またはシステム アクセス制御リスト (SACL) 内の要素を設定する場合、ACE 継承規則に従って、継承可能なアクセス制御エントリ (ACE) が既存の子オブジェクトに自動的に伝達されます。

SetSecurityInfo 関数は、次の種類のオブジェクトで使用できます。

  • NTFS 上のローカル ファイルまたはリモート ファイルまたはディレクトリ
  • 名前付きパイプ
  • ローカル プリンターまたはリモート プリンター
  • ローカルまたはリモートの Windows サービス
  • ネットワーク共有
  • レジストリ キー
  • セマフォ、イベント、ミューテックス、および待機可能タイマー
  • プロセス、スレッド、ジョブ、およびファイル マッピング オブジェクト
  • ウィンドウ ステーションとデスクトップ
  • ディレクトリ サービス オブジェクト

SetSecurityInfo 関数は、優先順序に基づいてアクセス許可またはアクセス拒否 ACE の順序を変更しません。 継承可能な ACE を既存の子オブジェクトに伝達する場合、 SetSecurityInfo は継承された ACE を子オブジェクトの DACL 内のすべての非継承 ACE の後に順番に配置します。

メモ オブジェクトの子への共有アクセスが使用できない場合、この関数は保護されていない ACE を子に伝達しません。 たとえば、ディレクトリが排他アクセスで開かれた場合、ディレクトリのセキュリティが変更されても、オペレーティング システムは保護されていない ACE をそのディレクトリのサブディレクトリまたはファイルに伝達しません。
 
警告指定したハンドルMAXIMUM_ALLOWED のACCESS_MASK値で開かれた場合、SetSecurityInfo 関数は ACE を子に伝達しません。
 

要件

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

こちらもご覧ください

ACL

アクセス制御

基本的なAccess Control関数

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetNamedSecurityInfo