return(STATUS_SUCCESS);
}
+/*
+ * @implemented
+ */
ULONG STDCALL
RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor)
{
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PBOOLEAN DaclPresent,
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
BOOLEAN DaclPresent,
}
+/*
+ * @implemented
+ */
BOOLEAN STDCALL
RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor)
{
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSID Owner,
return(STATUS_SUCCESS);
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSID* Owner,
return(STATUS_SUCCESS);
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSID Group,
return(STATUS_SUCCESS);
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSID* Group,
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR AbsSD,
PSECURITY_DESCRIPTOR RelSD,
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlAbsoluteToSelfRelativeSD(PSECURITY_DESCRIPTOR AbsSD,
PSECURITY_DESCRIPTOR RelSD,
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSECURITY_DESCRIPTOR_CONTROL Control,
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PBOOLEAN SaclPresent,
return(STATUS_SUCCESS);
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
BOOLEAN SaclPresent,
return(STATUS_SUCCESS);
}
+
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR RelSD,
PSECURITY_DESCRIPTOR AbsSD,
PSID Group,
PDWORD GroupSize)
{
- UNIMPLEMENTED;
+ ULONG OwnerLength;
+ ULONG GroupLength;
+ ULONG DaclLength;
+ ULONG SaclLength;
+ PSID pOwner;
+ PSID pGroup;
+ PACL pDacl;
+ PACL pSacl;
+
+ if (!(RelSD->Control & SE_SELF_RELATIVE))
+ return STATUS_BAD_DESCRIPTOR_FORMAT;
+
+ RtlpQuerySecurityDescriptor (RelSD,
+ &pOwner,
+ &OwnerLength,
+ &pGroup,
+ &GroupLength,
+ &pDacl,
+ &DaclLength,
+ &pSacl,
+ &SaclLength);
+
+ if (OwnerLength > *OwnerSize ||
+ GroupLength > *GroupSize ||
+ DaclLength > *DaclSize ||
+ SaclLength > *SaclSize)
+ return STATUS_BUFFER_TOO_SMALL;
+
+ memmove (Owner, pOwner, OwnerLength);
+ memmove (Group, pGroup, GroupLength);
+ memmove (Dacl, pDacl, DaclLength);
+ memmove (Sacl, pSacl, SaclLength);
+
+ memmove (AbsSD, RelSD, sizeof (SECURITY_DESCRIPTOR));
+
+ AbsSD->Control &= ~SE_SELF_RELATIVE;
+ AbsSD->Owner = Owner;
+ AbsSD->Group = Group;
+ AbsSD->Dacl = Dacl;
+ AbsSD->Sacl = Sacl;
+
+ *OwnerSize = OwnerLength;
+ *GroupSize = GroupLength;
+ *DaclSize = DaclLength;
+ *SaclSize = SaclLength;
+
+ return STATUS_SUCCESS;
}
/* EOF */