SetSecurityDescriptorDacl 関数 (securitybaseapi.h)

SetSecurityDescriptorDacl 関数は、随意アクセス制御リスト (DACL) の情報を設定します。 DACL が セキュリティ記述子に既に存在する場合は、DACL が置き換えられます。

構文

BOOL SetSecurityDescriptorDacl(
  [in, out]      PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]           BOOL                 bDaclPresent,
  [in, optional] PACL                 pDacl,
  [in]           BOOL                 bDaclDefaulted
);

パラメーター

[in, out] pSecurityDescriptor

関数が DACL を追加する SECURITY_DESCRIPTOR 構造体へのポインター。 このセキュリティ記述子は 絶対 形式である必要があります。つまり、そのメンバーは、連続するデータへのオフセットではなく、他の構造体へのポインターである必要があります。

[in] bDaclPresent

セキュリティ記述子に DACL が存在することを示すフラグ。 このパラメーターが TRUE の場合、関数は SECURITY_DESCRIPTOR_CONTROL 構造体に SE_DACL_PRESENT フラグを設定し、pDacl パラメーターと bDaclDefaulted パラメーターの値を使用します。 このパラメーターが FALSE の場合、関数は SE_DACL_PRESENT フラグをクリアし、 pDaclbDaclDefaulted は無視されます。

[in, optional] pDacl

セキュリティ記述子の DACL を指定する ACL 構造体へのポインター。 このパラメーターが NULL の場合、 NULL DACL がセキュリティ記述子に割り当てられ、オブジェクトへのすべてのアクセスが許可されます。 DACL は、セキュリティ記述子にコピーされずに参照されます。

[in] bDaclDefaulted

DACL のソースを示すフラグ。 このフラグが TRUE の場合、DACL は既定のメカニズムによって取得されています。 FALSE の場合、DACL はユーザーによって明示的に指定されています。 関数は、この値を SECURITY_DESCRIPTOR_CONTROL構造体の SE_DACL_DEFAULTED フラグに格納します。 このパラメーターが指定されていない場合は、SE_DACL_DEFAULTED フラグがクリアされます。

戻り値

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

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

解説

空の DACL と存在しない DACL には、重要な違いがあります。 DACL が空の場合、 アクセス制御エントリ (ACE) は含まれません。そのため、アクセス権は明示的に付与されません。 その結果、オブジェクトへのアクセスは暗黙的に拒否されます。

オブジェクトに DACL がない場合 ( pDacl パラメーターが NULL の場合)、オブジェクトに保護は割り当てられず、すべてのアクセス要求が許可されます。 セキュリティを維持するには、DACL を使用してアクセスを制限します。

bDaclPresent フラグと pDacl パラメーターの異なる構成には、次の 3 つの結果が考えられます。

  • pDacl パラメーターが DACL をポイントし、bDaclPresent フラグが TRUE の場合、DACL が指定され、オブジェクトへのアクセスを許可するアクセス許可 ACE が含まれている必要があります。
  • pDacl パラメーターが DACL を指せず、bDaclPresent フラグが TRUE の場合、NULL DACL が指定されます。 すべてのアクセスが許可されます。 すべてのユーザーが DACL とセキュリティ記述子の所有者を変更できるため、オブジェクトで NULL DACL を使用しないでください。 これにより、 オブジェクトの使用が妨げになります。
  • pDacl パラメーターが DACL を指せず、bDaclPresent フラグが FALSE の場合、継承または既定のメカニズムを使用してオブジェクトに DACL を指定できます。

この関数を使用する例については、「 新しいオブジェクトのセキュリティ記述子の作成」を参照してください。

要件

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

こちらもご覧ください

GetSecurityDescriptorDacl

InitializeSecurityDescriptor

IsValidSecurityDescriptor

低レベルのAccess Control

低レベルのAccess Control関数

SECURITY_DESCRIPTOR

SECURITY_DESCRIPTOR_CONTROL

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl