KiMceDispatch

INT64 __fastcall KiMceDispatch(_QWORD *a1, UINT64 a2){
  __m128i *v3; 
  int v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  _QWORD *v8; 
  __m128i v9; 
  int v10; 
  int v11; 
  unsigned int v12; 
  unsigned __int64 *v13; 
  unsigned __int64 v14; 
  char v15; 
  unsigned __int64 v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  _QWORD *v19; 
  int v20; 
  _BYTE *v21; 
  char *v22; 
  __int64 v23; 
  char v24; 
  int v26[8]; 
  __int64 v27; 
  INT64 v28; 
  v3 = (__m128i *)*((_QWORD *)KeGetPcr() + 7);
  v4 = *((_DWORD *)KeGetPcr() + 105);
  v5 = *((_QWORD *)KeGetPcr() + 1);
  LODWORD(v27) = v3[4];
  HIDWORD(v27) = _mm_cvtsi128_si32(_mm_srli_si128(v3[4], 8));
  v6 = v27;
  v7 = *(_QWORD *)(v27 + 5120);
  v8 = *(_QWORD **)(v27 + 5128);
  v9 = _mm_srli_si128(*(__m128i *)(v27 + 16 * ((unsigned int)a2 + 32i64)), 8);
  LODWORD(v28) = *(_OWORD *)(v27 + 16 * ((unsigned int)a2 + 32i64));
  HIDWORD(v28) = _mm_cvtsi128_si32(v9);
  _InterlockedOr((volatile signed __int32 *)(v6 + 5168), 1u);
  v10 = *(_DWORD *)(v6 + 5172);
  if( v4 != v10 )
  {
    while( (*(_DWORD *)(v6 + 5168) & 2) != 0 )
      _mm_pause();
    _InterlockedOr(v26, 0);
    v10 = *(_DWORD *)(v6 + 5172);
  }
  v11 = 4096;
  if( v4 == v10 )
  {
    if( (*(_DWORD *)(v7 + 2452) & 0x20000) == 0 )
    {
      **(_QWORD **)(v7 + 1216) = 0xA3A03F5891C8B4E8ui64;
      **(_QWORD **)(v7 + 1224) = 0i64;
      **(_QWORD **)(v7 + 1232) = 0i64;
      **(_QWORD **)(v7 + 1240) = 0i64;
    }
    v12 = 1;
    v13 = (unsigned __int64 *)(v5 + 36);
    do
    {
      v14 = *v13;
      if( *v13 )
      {
        v15 = *(_BYTE *)(v7 + 2171);
        v16 = a1[3];
        v17 = *(unsigned int *)(v7 + 2228);
        if( (v15 & 8) != 0 )
          v17 = 464i64;
        if( v16 <= v14 && v16 > v14 - v17 )
          break;
        if( (v15 & 8) != 0 )
        {
          v18 = *(_QWORD *)(v14 + 8);
          if( v16 <= v18 && v16 > v18 - (unsigned int)(*(_DWORD *)(v7 + 2228) - 32) )
            break;
        }
      }
      ++v12;
      ++v13;
    }
    while( v12 < 8 );
    if( v12 == 8 && *a1 - (_QWORD)v8 < 0x1000ui64 )
    {
      v19 = (_QWORD *)a1[3];
      if( *v19 == v7 + 2201 )
      {
        *a1 = *v19;
        a1[3] = v19 + 1;
      }
    }
    v20 = 4;
    *(_QWORD *)(v7 + 2206) = 0xC3C3C3C3C3C3C3C3ui64;
    v21 = (_BYTE *)(v7 + 2214);
    do
    {
      *v21++ = -61;
      --v20;
    }
    while( v20 );
    _InterlockedAnd((volatile signed __int32 *)(v6 + 5168), 0xFFFFFFFD);
  }
  if( (*(_DWORD *)(v6 + 5168) & 4) == 0 )
  {
    v22 = (char *)(v6 + 1024);
    v23 = 512i64;
    do
    {
      v11 -= 8;
      *v8 = *(_QWORD *)v22;
      v22 += 8;
      ++v8;
      --v23;
    }
    while( v23 );
    for( ; v11; --v11 )
    {
      v24 = *v22++;
      *(_BYTE *)v8 = v24;
      v8 = (_QWORD *)((char *)v8 + 1);
    }
  }
  *(_QWORD *)(v6 + 5136) = v7 + 2170;
  return v28;
}

Referenced by:

KiMceLinkage