The DsInheritSecurityIdentity function appends the
objectSid and sidHistory attributes of
SrcPrincipal to the sidHistory of DstPrincipal
and then deletes SrcPrincipal, all in a single transaction.
To ensure that this operation is atomic, SrcPrincipal and
DstPrincipal must be in the same domain and hDS must
be bound to a domain controller that the correct permissions within
that domain.
[in] Contains a directory service handle obtained using a call
to DSBind or DSBindWithCred.
Flags
[in] Reserved for future use. Must be zero.
SrcPrincipal
[in] Pointer to a null-terminated string that specifies the
name of a security principal (user or group) in the source domain.
This name is a domain-relative SAM name.
DstPrincipal
[in] Pointer to a null-terminated string that specifies the
name of a security principal (user or group) in the destination
domain. This domain-relative SAM name identifies the principal
whose sidHistory attribute will be updated with the SID of
SrcPrincipal.
Return Values
Returns a Win32 or RPC error code including the following.
Return Code
Description
NO_ERROR
The function was successful.
ERROR_INVALID_PARAMETER
One or more parameters are invalid.
ERROR_NOT_SUPPORTED
The operation is not supported.
Remarks
With an operating system upgrade, as from Windows NT® 4.0
to Windows® 2000, domain applications, which span both
upgraded and non-upgraded domains, may have security principals
inside and outside the forest for the same logical entity at the
same time.
When all upgraded domains have joined the same forest,
DsInheritSecurityIdentity eliminates the duplicate objects
while ensuring that the remaining objects have all the security
rights and privileges belonging to their respective deleted
object.
A DsInheritSecurityIdentity implementation:
Verifies that SrcPrincipal and DstPrincipal are
in the same domain.
Verifies that the domain is writable at the bind to the
server.
Verifies that auditing is enabled for the domain.
Verifies that the caller is a member of the domain admins for
the domain.
Verifies that the domain is in the native mode. This operation
is required because there may be Windows NT® 4.0 domain
controllers present in the domain. If this operation was not
required, it would be possible for the principals, with a populated
sidHistory, to obtain varying logon tokens and therefore
cause unpredictable behavior.
Verifies that SrcPrincipal exists, that it is a security
principal and has read its objectSid and sidHistory
properties.
Verifies that DstPrincipal exists, that it is a security
principal, and has read certain properties required for auditing
and verification.
Deletes SrcPrincipal in the database only if the entire
operation is committed at completion. This operation fails if the
caller does not have delete rights or if SrcPrincipal has
children.
Fails the operation if the objectSid of
SrcPrincipal or DstPrincipal is a well-known
SID.
Adds the objectSid and the sidHistory (if
present) of SrcPrincipal to the sidHistory of
DstPrincipal.
Forces an audit event and fails the operation if the audit
fails.
Enters events into the Directory Service Log. Do not confuse
this with the Security Audit Log.
Requirements
Client: Included in Windows XP and
Windows 2000 Professional. Server: Included in Windows Server 2003 and
Windows 2000 Server. Redistributable: Requires Active Directory Client Extension
on Windows NT 4.0 SP6a and Windows 95/98/Me. Unicode: Implemented as Unicode and ANSI versions on Windows
NT/2000/XP. Header: Declared in Ntdsapi.h. Library: Use Ntdsapi.lib.