NTSTATUS
RtlpGenerateInheritAcl(
  IN  PACL Acl,
  IN  BOOLEAN IsDirectoryObject,
  IN  PSID ClientOwnerSid,
  IN  PSID ClientGroupSid,
  IN  PSID ServerOwnerSid OPTIONAL,
  IN  PSID ServerGroupSid OPTIONAL,
  IN  PGENERIC_MAPPING GenericMapping,
  OUT PACL NewAcl
  );

Routine Description:

    This is a private routine that produces an inheritable ACL.
    It is expected that RtlpLengthInheritAcl() has already been
    called to validate the inheritance and to indicate the length
    of buffer needed to perform the inheritance.

Arguments:

    Acl - Supplies the acl being inherited.

    IsDirectoryObject - Specifies if the new acl is for a directory.

    OwnerSid - Specifies the owner Sid to use.

    GroupSid - Specifies the group SID to use.

    GenericMapping - Specifies the generic mapping to use.

    NewAcl - Provides a pointer to the buffer to receive the new
        (inherited) acl.  This ACL must already be initialized.


Return Value:

    STATUS_SUCCESS - An inheritable ACL has been generated.

    STATUS_NO_INHERITANCE - An inheritable ACL was not successfully generated.
        This is a warning completion status.

    STATUS_BAD_INHERITANCE_ACL - Indicates the acl built was not a valid ACL.
        This can becaused by a number of things.  One of the more probable
        causes is the replacement of a CreatorId with an SID that didn't fit
        into the ACE or ACL.