KiInsertNewDpcRuntime

CHAR *__stdcall KiInsertNewDpcRuntime(INT64 a1, INT64 a2, INT64 a3){
  __int64 v3; 
  char *v7; 
  char v8; 
  unsigned __int64 v9; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 
  _QWORD *v13; 
  __int64 v14; 
  _PRIVILEGE_SET *v15; 
  int v16; 
  CHAR *result; 
  CHAR *v18; 
  unsigned int v19; 
  __int64 v20; 
  __int64 v21; 
  __int64 v22; 
  INT64 v23; 

  v3 = (unsigned int)(2 * (*(_DWORD *)(a1 + 4) >> 5));
  if( *(_DWORD *)a1 >= (unsigned int)v3 )
  {
    if( (unsigned int)v3 < 4 )
      v3 = 4i64;
    LODWORD(v7) = KiDpcRuntimeHistoryHashTableAllocate(8 * v3);
    if( v7 )
    {
      if( (((_DWORD)v3 - 1) & (unsigned int)v3) != 0 )
      {
        v8 = -1;
        do
        {
          ++v8;
          LODWORD(v3) = (unsigned int)v3 >> 1;
        }
        while( (_DWORD)v3 );
        v3 = (unsigned int)(1 << v8);
      }
      if( (unsigned int)v3 > 0x4000000 )
        v3 = 0x4000000i64;
      v9 = (unsigned int)v3;
      if( v7 > &v7[8 * v3] )
        v9 = 0i64;
      if( v9 )
        memset64(v7, a1 | 1, v9);
      v10 = 0;
      v11 = -1i64 << (*(_BYTE *)(a1 + 4) & 0x1F);
      if( (*(_DWORD *)(a1 + 4) & 0xFFFFFFE0) != 0 )
      {
        do
        {
          v12 = *(_QWORD *)(a1 + 8);
          while( 1 )
          {
            v13 = *(_QWORD **)(v12 + 8i64 * v10);
            if( ((unsigned __int8)v13 & 1) != 0 )
              break;
            *(_QWORD *)(v12 + 8i64 * v10) = *v13;
            v22 = v11 & v13[1];
            v14 = (37
                 * (BYTE6(v22)
                  + 37
                  * (BYTE5(v22)
                   + 37
                   * (BYTE4(v22)
                    + 37 * (BYTE3(v22) + 37 * (BYTE2(v22) + 37 * (BYTE1(v22) + 37 * ((unsigned __int8)v22 + 11623883)))))))
                 + HIBYTE(v22)) & (unsigned int)(v3 - 1);
            *v13 = *(_QWORD *)&v7[8 * v14];
            *(_QWORD *)&v7[8 * v14] = v13;
          }
          ++v10;
        }
        while( v10 < *(_DWORD *)(a1 + 4) >> 5 );
      }
      v15 = *(_PRIVILEGE_SET **)(a1 + 8);
      v16 = *(_DWORD *)(a1 + 4) & 0x1F | (32 * v3);
      *(_QWORD *)(a1 + 8) = v7;
      *(_DWORD *)(a1 + 4) = v16;
      if( v15 )
        CmSiFreeMemory(v15);
    }
  }
  result = (CHAR *)ExAllocatePoolWithTag(0x200ui64, 0x20ui64, 1953002052i64);
  v18 = result;
  if( result )
  {
    *((_QWORD *)result + 1) = a2;
    *((_QWORD *)result + 2) = a3;
    result[24] = 1;
    v19 = *(_DWORD *)(a1 + 4);
    v23 = a2 & (-1i64 << (v19 & 0x1F));
    v20 = *(_QWORD *)(a1 + 8);
    v21 = (37
         * (BYTE6(v23)
          + 37
          * (BYTE5(v23)
           + 37
           * (BYTE4(v23)
            + 37 * (BYTE3(v23) + 37 * (BYTE2(v23) + 37 * (BYTE1(v23) + 37 * ((unsigned __int8)v23 + 11623883)))))))
         + HIBYTE(v23)) & ((v19 >> 5) - 1);
    result = *(CHAR **)(v20 + 8 * v21);
    *(_QWORD *)v18 = result;
    *(_QWORD *)(v20 + 8 * v21) = v18;
    ++*(_DWORD *)a1;
  }
  return result;
}

Referenced by:

KiExecuteAllDpcs