IADsAccessControlList::AddAce メソッド (iads.h)
IADsAccessControlList::AddAce メソッドは、IADsAccessControlEntry オブジェクトを IADsAccessControlList オブジェクトに追加します。
構文
HRESULT AddAce(
[in] IDispatch *pAccessControlEntry
);
パラメーター
[in] pAccessControlEntry
追加する IADsAccessControlEntry オブジェクトの IDispatch インターフェイスへのポインター。 このパラメーターを NULL にすることはできません。
戻り値
次を含む標準 の HRESULT 値を返します。
解説
アクセス制御エントリは、セキュリティ記述子のアクセス制御リストに次の順序で表示する必要があります。
- オブジェクト自体に適用されるアクセス拒否 ACE
- プロパティ セットやプロパティなど、オブジェクトの子に適用されるアクセス拒否 ACE
- オブジェクト自体に適用されるアクセス許可 ACE
- プロパティ セットやプロパティなど、オブジェクトの子に適用されるアクセス許可 ACE
- 継承されたすべての ACE
例
次の Visual Basic コード例は、 IADsAccessControlList::AddAce メソッドを使用して 2 つの ACE を ACL に追加する方法を示しています。
Const ACL_REVISION_DS = &H4
Dim x as IADs
Dim sd as IADsSecurityDescriptor
Dim Ace1 As new IADsAccessControlEntry
Dim Ace2 As new IADsAccessControlEntry
Dim Dacl As new IADsAccessControlList
On Error GoTo Cleanup
Set x = GetObject("LDAP://OU=Sales,DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
' Add the ACEs to the Discretionary ACL.
Dacl.AclRevision = ACL_REVISION_DS 'DS ACL Revision
' Set up the first ACE.
Ace1.AccessMask = -1 'Full Permission (Allowed)
Ace1.AceType = ADS_ACETYPE_ACCESS_ALLOWED
Ace1.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace1.Trustee = "myMachine\Administrator"
' Set up the 2nd ACE.
Ace2.AccessMask = -1 'Full Permission (Denied)
Ace2.AceType = ADS_ACETYPE_ACCESS_DENIED
Ace2.AceFlags = ADS_ACEFLAG_INHERIT_ACE
Ace2.Trustee = "aDomain\aUser"
' Add the ACEs to the Discretionary ACL.
Dacl.AddAce Ace1
Dacl.AddAce Ace2
'Commit the changes.
sd.DiscretionaryAcl = Dacl
x.Put "ntSecurityDescriptor", Array(sd)
x.SetInfo
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set Ace1 = Nothing
Set Ace2 = Nothing
Set Dacl = Nothing
Set x = Nothing
Set sd = Nothing
次の C++ コード例では、 IADsAccessControlList::AddAce メソッドを使用して ACE を ACL に追加します。 追加された ACE では、完全なアクセス許可を持つアクセス権が許可されています。
HRESULT addAceTo(IADsAccessControlList *pAcl)
{
if(!pAcl)
{
return E_FAIL;
}
HRESULT hr = pAcl->put_AclRevision(ACL_REVISION_DS);
if(FAILED(hr))
{
return hr;
}
IADsAccessControlEntry *pAce = NULL;
pAce = createAce(-1, // Full permissions.
ADS_ACETYPE_ACCESS_ALLOWED,
ADS_ACEFLAG_INHERIT_ACE,
CComBSTR("aDomain\\aUser"));
if(!pAce)
{
return E_FAIL;
}
IDispatch *pDisp;
hr = pAce->QueryInterface(IID_IDispatch,(void**)&pDisp);
if(FAILED(hr))
{
pAce->Release();
return hr;
}
hr = pAcl->AddAce(pDisp);
pDisp->Release();
if(pAce) pAce->Release();
if(FAILED(hr))
{
return hr;
}
printf("Ace has been added to ACL.\n");
return hr;
}
////////////////////////////////////
// function to create an allowed ACE
////////////////////////////////////
IADsAccessControlEntry *createAce(
long mask,
long type,
long flag,
BSTR trustee)
{
HRESULT hr;
IADsAccessControlEntry *pAce;
hr = CoCreateInstance(CLSID_AccessControlEntry,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsAccessControlEntry,
(void**)&pAce);
if(FAILED(hr))
{
if(pAce)
{
pAce->Release();
}
return NULL;
}
hr = pAce->put_AccessMask(mask);
hr = pAce->put_AceType(type);
hr = pAce->put_AceFlags(flag);
hr = pAce->put_Trustee(trustee);
return pAce;
}
要件
サポートされている最小のクライアント | Windows Vista |
サポートされている最小のサーバー | Windows Server 2008 |
対象プラットフォーム | Windows |
ヘッダー | iads.h |
[DLL] | Activeds.dll |