SeConvertStringSidToSid

NTSTATUS __stdcall SeConvertStringSidToSid(PWCHAR Str1){
  VOID **v1; 
  PVOID *v2; 
  NTSTATUS v4; 
  INT64 v5; 
  INT64 v6; 
  void *v7; 
  INT64 v8; 
  __int64 v10; 
  __int64 v11; 
  UINT64 v12; 
  __int64 v13; 
  int v14; 
  ULONG v15; 
  void *v16; 
  WCHAR *v17; 
  const WCHAR *v18; 
  INT64 a7; 
  v2 = v1;
  v18 = 0i64;
  a7 = 0i64;
  if( !Str1 || !v1 )
    return -1073741811;
  v4 = LocalpConvertStringSidToSid(Str1, v1, &v18);
  if( v4 < 0 )
  {
    v10 = -1i64;
    do
      ++v10;
    while( Str1[v10] );
    if( (unsigned int)(v18 - Str1) != v10 )
    {
      v4 = -1073741704;
      SddlpFree(*v2);
      *v2 = 0i64;
      return v4;
    }
    return 0;
  }
  v6 = LookupSidInTable(Str1, 0i64, 0i64, v5, v17, 0, (INT64)&a7);
  v7 = (void *)a7;
  v8 = v6;
  if( v6 )
  {
    v12 = *(_QWORD *)(v6 + 16);
    if( v12 )
    {
      v13 = -1i64;
      do
        ++v13;
      while( Str1[v13] );
      if( v13 == *(_DWORD *)(v6 + 12) )
      {
        v14 = *(unsigned __int8 *)(v12 + 1);
        v15 = 4 * v14 + 8;
        SddlpAlloc(4 * v14 + 8, v12);
        *v2 = v16;
        if( v16 )
        {
          v4 = RtlCopySid(v15, v16, *(PSID *)(v8 + 16));
          if( v4 < 0 )
          {
            SddlpFree(*v2);
            *v2 = 0i64;
          }
        }
        else
        {
          v4 = -1073741801;
        }
      }
      else
      {
        v4 = -1073741704;
      }
      goto LABEL_26;
    }
  }
  if( !a7 )
    return v4;
  v11 = -1i64;
  do
    ++v11;
  while( Str1[v11] );
  if( v11 == 2 )
  {
    *v2 = (PVOID)a7;
    return 0;
  }
LABEL_26:
  if( v7 )
    SddlpFree(v7);
  return v4;
}

Referenced by:

No references.