sub_14095F834

__int64 __fastcall sub_14095F834(__int64 a1, __int64 a2, __int64 a3, __int64 a4){
  __int64 v6; 
  signed int v7; 
  __int64 *v8; 
  int v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  int v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  int v16; 
  unsigned int v17; 
  int v18; 
  unsigned int v19; 
  unsigned int v20; 
  unsigned int v21; 
  VOID **PoolWithTag; 
  unsigned int v23; 
  __int64 v24; 
  unsigned int v25; 
  unsigned int v26; 
  int v27; 
  char *v28; 
  int v29; 
  char *v30; 
  char *v31; 
  __int64 v32; 
  __int64 v33; 
  unsigned int v34; 
  __int64 v35; 
  unsigned int v36; 
  unsigned int v37; 
  char *v38; 
  int v39; 
  char *v40; 
  char *v41; 
  char *v42; 
  __int64 v43; 

  v6 = 0i64;
  if( !a1 || !a2 || !a4 )
    return(unsigned int)-1073741811;
  v8 = 0i64;
  v9 = 0;
  v10 = *(_QWORD *)(a1 + 8);
  if( v10 && *(_DWORD *)a1 > 3u )
  {
    v12 = 0;
    v11 = -1i64;
    while( 1 )
    {
      v13 = -1i64;
      if( v10 + 4 >= v10 )
        v13 = v10 + 4;
      v7 = v10 + 4 < v10 ? 0xC0000095 : 0;
      if( v10 + 4 < v10 )
        break;
      v14 = v13 + *(unsigned int *)v10;
      v10 = -1i64;
      if( v14 >= v13 )
        v10 = v14;
      v7 = v14 < v13 ? 0xC0000095 : 0;
      if( v14 < v13 )
        break;
      if( (unsigned int)++v12 >= 3 )
      {
        v15 = -1i64;
        if( v10 + 4 >= v10 )
          v15 = v10 + 4;
        v7 = v10 + 4 < v10 ? 0xC0000095 : 0;
        if( v10 + 4 >= v10 )
        {
          v9 = *(_DWORD *)v10;
          if( *(_DWORD *)v10 )
            v8 = (__int64 *)v15;
        }
        break;
      }
    }
  }
  else
  {
    v7 = -1073741811;
    v11 = -1i64;
  }
  if( v7 >= 0 )
  {
    if( v9 == 8 )
      v6 = *v8;
    else
      v7 = -1073741789;
    if( v7 >= 0 )
    {
      KeReleaseMutex((_KMUTANT *)((char *)&SbiVmbusArrivalEvent + 2848), 0);
      v16 = *(_DWORD *)(a2 + 32);
      v17 = *(_DWORD *)(a2 + 16) + 48;
      v18 = -1;
      v19 = -1;
      if( v17 >= 0x30 )
        v19 = v17;
      v7 = v17 < 0x30 ? 0xC0000095 : 0;
      if( v17 >= 0x30 )
      {
        v20 = v19 + 4;
        v21 = -1;
        if( v19 + 4 >= v19 )
          v21 = v19 + 4;
        v7 = v20 < v19 ? 0xC0000095 : 0;
        if( v20 >= v19 )
          v7 = v21 + v16 < v21 ? 0xC0000095 : 0;
      }
      if( v7 >= 0 )
      {
        *(_DWORD *)(a4 + 4) = 20;
        v7 = 0;
        PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x14ui64, 542329939i64);
        if( PoolWithTag )
        {
          *(_QWORD *)(a4 + 8) = PoolWithTag;
          *(_DWORD *)a4 = 0;
        }
        else
        {
          v7 = -1073741801;
        }
        if( v7 >= 0 )
        {
          v23 = 0;
          v24 = *(_QWORD *)(a4 + 8);
          if( !v24 )
          {
            v25 = *(_DWORD *)(a4 + 4);
            v26 = v25 + 8;
            v27 = -1;
            if( v25 + 8 >= v25 )
              v27 = v25 + 8;
            *(_DWORD *)(a4 + 4) = v27;
            v7 = v26 < v25 ? 0xC0000095 : 0;
            if( v26 >= v25 )
            {
              ++*(_DWORD *)a4;
              v7 = 0;
            }
            goto LABEL_58;
          }
          v28 = *(char **)(a4 + 8);
          v29 = 0;
          if( !*(_DWORD *)a4 )
          {
LABEL_52:
            v33 = -1i64;
            if( v28 + 4 >= v28 )
              v33 = (__int64)(v28 + 4);
            v7 = v28 + 4 < v28 ? 0xC0000095 : 0;
            if( v28 + 4 >= v28 )
            {
              if( (unsigned __int64)(v28 + 8) <= v24 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
              {
                *(_DWORD *)v28 = 4;
                *(_DWORD *)v33 = 0;
                ++*(_DWORD *)a4;
              }
              else
              {
                v7 = -1073741789;
              }
            }
LABEL_58:
            if( v7 >= 0 )
            {
              v34 = 0;
              v35 = *(_QWORD *)(a4 + 8);
              if( v35 )
              {
                v38 = *(char **)(a4 + 8);
                v39 = 0;
                if( *(_DWORD *)a4 )
                {
                  while( 1 )
                  {
                    v40 = v38;
                    v41 = v38;
                    if( *(_DWORD *)v38 >= 0xFFFFFFFC )
                    {
                      v7 = -1073741675;
                    }
                    else
                    {
                      v34 = *(_DWORD *)v38 + 4;
                      v7 = 0;
                    }
                    if( v7 < 0 )
                      break;
                    v42 = &v38[v34];
                    v43 = -1i64;
                    if( v42 >= v38 )
                      v43 = (__int64)&v38[v34];
                    v38 = (char *)v43;
                    v7 = v42 < v41 ? 0xC0000095 : 0;
                    if( v42 < v40 )
                      break;
                    if( (unsigned int)++v39 >= *(_DWORD *)a4 )
                      goto LABEL_73;
                  }
                }
                else
                {
LABEL_73:
                  if( v38 + 4 >= v38 )
                    v11 = (__int64)(v38 + 4);
                  v7 = v38 + 4 < v38 ? 0xC0000095 : 0;
                  if( v38 + 4 >= v38 )
                  {
                    if( (unsigned __int64)(v38 + 12) <= v35 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
                    {
                      *(_DWORD *)v38 = 8;
                      *(_QWORD *)v11 = v6;
                      ++*(_DWORD *)a4;
                    }
                    else
                    {
                      return(unsigned int)-1073741789;
                    }
                  }
                }
              }
              else
              {
                v36 = *(_DWORD *)(a4 + 4);
                v37 = v36 + 12;
                if( v36 + 12 >= v36 )
                  v18 = v36 + 12;
                *(_DWORD *)(a4 + 4) = v18;
                v7 = v37 < v36 ? 0xC0000095 : 0;
                if( v37 >= v36 )
                {
                  ++*(_DWORD *)a4;
                  return 0;
                }
              }
            }
            return(unsigned int)v7;
          }
          while( 1 )
          {
            v30 = v28;
            if( *(_DWORD *)v28 >= 0xFFFFFFFC )
            {
              v7 = -1073741675;
            }
            else
            {
              v23 = *(_DWORD *)v28 + 4;
              v7 = 0;
            }
            if( v7 < 0 )
              break;
            v31 = &v28[v23];
            v32 = -1i64;
            if( v31 >= v28 )
              v32 = (__int64)&v28[v23];
            v28 = (char *)v32;
            v7 = v31 < v30 ? 0xC0000095 : 0;
            if( v31 < v30 )
              goto LABEL_58;
            if( (unsigned int)++v29 >= *(_DWORD *)a4 )
              goto LABEL_52;
          }
        }
      }
    }
  }
  return(unsigned int)v7;
}

Referenced by:

sub_1405F50F8