Platform SDK: Active Directory, ADSI, and Directory Services |
The IADsSecurityDescriptor::CopySecurityDescriptor method copies an ADSI security descriptor object that holds security information about an object.
HRESULT CopySecurityDescriptor( IDispatch ** ppSecurityDescriptor );
This method returns the standard return values, including E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED, and E_FAIL, as well as S_OK. For other return values, see ADSI Error Codes.
Dim sd As IADsSecurityDescriptor Dim sdNew As IADsSecurityDescriptor Set ou = GetObject("LDAP://OU=Sales,DC=Fabrikam,DC=com") Set sd = ou.Get("ntSecurityDescriptor") Set sdNew = sd.CopySecurityDescriptor ou.Put "ouSD", sdNew ou.SetInfo
The following C++ code snippet creates a private security descriptor by copying from an existing one, using IADsSecurityDescriptor::CopySecurityDescriptor.
IADsSecurityDescriptor *getSD(IADs*); // See IADsSecurityDescriptor HRESULT copySD(IADs *pADsFrom, IADs *pADsTo) { IADsSecurityDescriptor *psdFrom = NULL; // get the security descriptor from the source object psdFrom = getSD(pADsFrom); if(!psdFrom) return E_FAIL; // copy the source SD to the destination object. IDispatch *pDisp=NULL; HRESULT hr; hr = psdFrom->CopySecurityDescriptor(&pDisp); if(FAILED(hr)) { psd->Release(); return hr; } VARIANT var; VariantInit(&var); V_DISPATCH(&var)=pDisp; V_VT(&var)=VT_DISPATCH; pADsTo->Put(L"privateSD",var); VariantClear(&var); if(psdFrom) psdFrom->Release(); // commit the change to the directory pADsTo->SetInfo(); return S_OK; }
Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with DSClient).
Windows 95/98: Requires Windows 95 or later (with DSClient).
Header: Declared in Iads.h.