Метод IADsAccessControlList::CopyAccessList (iads.h)
Метод IADsAccessControlList::CopyAccessList копирует каждую запись управления доступом (ACE) в списке управления доступом (ACL) в пространство процессов вызывающей стороны.
Синтаксис
HRESULT CopyAccessList(
[out] IDispatch **ppAccessControlList
);
Параметры
[out] ppAccessControlList
Адрес интерфейса IDispatch , указывающий на список управления доступом в качестве копии исходного списка доступа. Если этот параметр имеет значение NULL при возврате, копии списка ACL не могут быть сделаны.
Возвращаемое значение
Этот метод возвращает стандартные возвращаемые значения.
Дополнительные сведения о других возвращаемых значениях см. в разделе Коды ошибок ADSI.
Комментарии
Вызывающий объект должен вызывать Release для копии ACE с помощью указателей IDispatch .
Примеры
В следующем примере кода показано, как скопировать список ACL из одного объекта ADSI в другой.
Dim x As IADs
Dim sd As IADsSecurityDescriptor
Dim Dacl As IADsAccessControlList
Dim CopyDacl As IADsAccessControlList
' Get the ACL from one object.
Set x = GetObject("LDAP://OU=Sales, DC=activeD,DC=mydomain,DC=fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
Set Dacl = sd.DiscretionaryAcl
Set CopyDacl = Dacl.CopyAccessList()
' Copy the ACL to another object in the Directory.
Set x = GetObject("LDAP://OU=Sales, DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
sd.DiscretionaryAcl = CopyDacl
x.Put "ntSecurityDescriptor", Array(sd)
x.SetInfo
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set x = Nothing
Set sd = Nothing
Set Dacl = Nothing
Set CopyDacl = Nothing
В следующем примере кода ACL копируется из исходного объекта в целевой объект.
HRESULT CopyACL(IADs *pSource, IADs *pTarget)
{
IADsSecurityDescriptor *pSourceSD = NULL;
IADsSecurityDescriptor *pTargetSD = NULL;
IDispatch *pDisp = NULL;
HRESULT hr = S_OK;
VARIANT varSource, varTarget;
VariantInit(&varSource);
VariantInit(&varTarget);
if((pSource==NULL) || (pTarget==NULL))
{
return E_FAIL;
}
hr = pSource->Get(CComBSTR("ntSecurityDescriptor"), &varSource);
if(FAILED(hr))
{
goto Cleanup;
}
hr = pTarget->Get(CComBSTR("ntSecurityDescriptor"), &varTarget);
if(FAILED(hr))
{
goto Cleanup;
}
hr = V_DISPATCH(&varSource)->QueryInterface(IID_IADsSecurityDescriptor,
(void**)&pSourceSD);
if(FAILED(hr))
{
goto Cleanup;
}
hr = V_DISPATCH(&varTarget)->QueryInterface(IID_IADsSecurityDescriptor,
(void**)&pTargetSD);
if(FAILED(hr))
{
goto Cleanup;
}
hr = pSourceSD->get_DiscretionaryAcl(&pDisp);
if(FAILED(hr))
{
goto Cleanup;
}
hr = pTargetSD->put_DiscretionaryAcl(pDisp);
if(FAILED(hr))
{
goto Cleanup;
}
hr = pTarget->SetInfo();
Cleanup:
VariantClear(&varSource);
VariantClear(&varTarget);
if(pSourceSD)
{
pSourceSD->Release();
}
if(pTargetSD)
{
pTargetSD->Release();
}
if(pDisp)
{
pDisp->Release();
}
return hr;
}
Требования
Минимальная версия клиента | Windows Vista |
Минимальная версия сервера | Windows Server 2008 |
Целевая платформа | Windows |
Header | iads.h |
DLL | Activeds.dll |