LookupSidInTable

_STRSD_SID_LOOKUP *__stdcall LookupSidInTable(
        WCHAR *String,
        VOID *Sid,
        VOID *RootDomainSid,
        UINT8 DefaultToDomain,
        VOID **pSASid,
        UINT8 DefaultToDomaina){
  _STRSD_SID_LOOKUP *v6; 
  int v9; 
  unsigned int v10; 
  unsigned __int8 *v11; 
  int v12; 
  int *v13; 
  int v14; 
  unsigned int v15; 
  PVOID *v16; 
  __int64 v17; 
  __int64 v19; 
  INT64 v20; 
  NTSTATUS v21; 
  UINT8 v22; 
  UINT64 v23; 
  VOID *v24; 
  unsigned __int8 *v25; 
  _DWORD *v26; 
  int v27; 
  char v29; 
  VOID **pSASida; 
  VOID **v31; 

  v6 = 0i64;
  v29 = 0;
  v27 = 0;
  if( __PAIR128__((unsigned __int64)String, (unsigned __int64)Sid) == 0 )
    return 0i64;
  v9 = 0;
  v10 = 63;
  *v31 = 0i64;
  if( !String )
  {
    v29 = 1;
    LODWORD(v11) = RtlSubAuthorityCountSid((INT64)Sid);
    v12 = *v11;
    if( !(_BYTE)v12 )
      goto LABEL_7;
    LODWORD(v13) = RtlSubAuthoritySid((INT64)Sid, (unsigned int)(v12 - 1));
    v14 = *v13;
    if( *v13 != 498 && (unsigned int)(v14 - 518) > 1 )
      goto LABEL_7;
    v9 = 1;
    if( v14 != 518 )
      goto LABEL_7;
    goto LABEL_29;
  }
  if( wcsnicmp(String, L"EA", 2u) )
  {
    if( wcsnicmp(String, L"SA", 2u) )
    {
      if( !wcsnicmp(String, L"RO", 2u) )
        v9 = 1;
      goto LABEL_7;
    }
    v9 = 1;
LABEL_29:
    v27 = 1;
    goto LABEL_7;
  }
  v9 = 1;
LABEL_7:
  v15 = 0;
  v16 = (PVOID *)&unk_140C0F420;
  do
  {
    if( v29 )
    {
      if( RtlEqualSid(Sid, *v16) )
        break;
      goto LABEL_10;
    }
    pSASida = (VOID **)((char *)&unk_140C0F410 + 104 * v15 + 2);
    if( !wcsnicmp(String, (const wchar_t *)pSASida, *((_DWORD *)v16 - 1)) )
      break;
    if( v9
      && DefaultToDomaina
      && !RootDomainSid
      && *((_BYTE *)v16 - 16)
      && *v16
      && !wcsnicmp(L"DA", (const wchar_t *)pSASida, *((_DWORD *)v16 - 1)) )
    {
      v10 = v15;
    }
LABEL_10:
    ++v15;
    v16 += 13;
  }
  while( v15 < 0x3F );
  if( v15 < 0x3F )
  {
    v17 = v15;
    return(_STRSD_SID_LOOKUP *)((char *)&unk_140C0F410 + 104 * v17);
  }
  if( v9 && DefaultToDomaina && !RootDomainSid && v10 < 0x3F )
  {
    if( v27 )
    {
      if( v29 )
      {
        *v31 = Sid;
      }
      else
      {
        v19 = 104i64 * v10;
        v20 = *(_QWORD *)((char *)&unk_140C0F410 + v19 + 16);
        if( v20 )
        {
          v21 = RtlLengthSid(v20);
          v24 = SddlpAlloc((unsigned int)(v21 + 1), v22, v23);
          *v31 = v24;
          if( v24 )
          {
            _mm_lfence();
            memmove(v24, *(const VOID **)((char *)&unk_140C0F410 + v19 + 16), v21);
            LODWORD(v25) = RtlSubAuthorityCountSid(*(_QWORD *)((char *)&unk_140C0F410 + v19 + 16));
            LODWORD(v26) = RtlSubAuthoritySid((INT64)v24, (unsigned int)*v25 - 1);
            *v26 = 518;
          }
        }
      }
    }
    else
    {
      v17 = v10;
      return(_STRSD_SID_LOOKUP *)((char *)&unk_140C0F410 + 104 * v17);
    }
  }
  return v6;
}

Referenced by:

LocalConvertAclToString
LocalGetSidForString
LocalGetStringForSid
SeConvertStringSidToSid