SeConvertSecurityDescriptorToStringSecurityDescriptor

NTSTATUS __stdcall SeConvertSecurityDescriptorToStringSecurityDescriptor(
        VOID *SecurityDescriptor,
        VOID *SecurityInformation,
        WCHAR **StringSecurityDescriptor,
        WCHAR **StringSecurityDescriptorLen,
        UINT64 *StringSecurityDescriptorLena){
  NTSTATUS v6; 
  NTSTATUS result; 
  WCHAR *v8; 
  UINT64 StringSecurityDescriptora; 

  v6 = 0;
  if( SecurityDescriptor && (_DWORD)StringSecurityDescriptor || !StringSecurityDescriptorLen )
  {
    if( SecurityDescriptor && StringSecurityDescriptorLen && (_DWORD)StringSecurityDescriptor )
    {
      if( (_DWORD)SecurityInformation != 1 )
      {
        LOWORD(result) = 1305;
        return(unsigned __int16)result | 0xC0070000;
      }
      LODWORD(StringSecurityDescriptora) = (_DWORD)StringSecurityDescriptor;
      result = LocalConvertSDToStringSD_Rev1(
                 SecurityDescriptor,
                 SecurityInformation,
                 StringSecurityDescriptor,
                 SecurityDescriptor,
                 StringSecurityDescriptora,
                 StringSecurityDescriptorLen,
                 StringSecurityDescriptorLena);
    }
    else
    {
      result = 87;
    }
    if( result <= 0 )
      return result;
    return(unsigned __int16)result | 0xC0070000;
  }
  v8 = (WCHAR *)SddlpAlloc(2ui64, (UINT8)SecurityInformation, (UINT64)StringSecurityDescriptor);
  *StringSecurityDescriptorLen = v8;
  if( v8 )
  {
    *v8 = 0;
    if( StringSecurityDescriptorLena )
      *(_DWORD *)StringSecurityDescriptorLena = 0;
  }
  else
  {
    v6 = 8;
  }
  if( v6 )
    return v6 | 0xC0070000;
  return v6;
}

Referenced by:

AdtpBuildAccessReasonAuditStringInternal
AdtpBuildSecurityDescriptorUnicodeString
CmpLogHiveFileInaccessible