KiSwInterruptDispatch

CHAR __fastcall KiSwInterruptDispatch(INT64 a1){
  UINT8 *v1; 
  INT64 v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  char *PoolWithTag; 
  __int64 v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int128 v10; 
  char *v11; 
  int v12; 
  _QWORD *v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  char *v17; 
  __int64 v18; 
  __int64 v19; 
  unsigned int i; 
  __int64 v21; 
  __int64 v22; 
  unsigned __int64 v23; 
  unsigned int v24; 
  unsigned __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int64 v28; 
  unsigned int *v29; 
  unsigned int v30; 
  __int64 v31; 
  int v32; 
  int v33; 
  __int64 v34; 
  unsigned int v35; 
  int *v36; 
  __int64 v37; 
  int v38; 
  int v39; 
  int v40; 
  int v41; 
  __int64 v42; 
  int v43; 
  unsigned __int64 v44; 
  _QWORD *v45; 
  __int64 v46; 
  _QWORD *v47; 
  char *v48; 
  int v49; 
  __int64 v50; 
  unsigned __int64 v51; 
  unsigned int v52; 
  __int64 v53; 
  __int64 v54; 
  __int64 v55; 
  unsigned __int64 v56; 
  __int64 v57; 
  __int64 v58; 
  unsigned __int64 j; 
  unsigned int v60; 
  int v61; 
  __int64 v62; 
  __int64 v63; 
  unsigned __int8 v64; 
  unsigned __int64 v65; 
  unsigned __int64 v66; 
  int v67; 
  int v68; 
  __int64 v69; 
  __int64 v70; 
  __int64 v71; 
  unsigned __int8 v72; 
  __int64 v73; 
  unsigned int *v74; 
  unsigned int *v75; 
  char v76; 
  unsigned __int64 v77; 
  __int64 v78; 
  __int64 *v79; 
  unsigned int *v80; 
  __int64 v81; 
  __int64 v82; 
  bool v83; 
  __int64 v84; 
  __int64 v85; 
  unsigned __int8 v86; 
  unsigned __int64 v87; 
  unsigned int *v88; 
  unsigned int *v89; 
  unsigned __int64 v90; 
  unsigned __int64 v91; 
  unsigned __int64 v92; 
  __int64 v93; 
  __int64 v94; 
  unsigned __int8 CurrentIrql; 
  __int64 v96; 
  unsigned int *v97; 
  char v98; 
  unsigned __int64 v99; 
  __int64 v100; 
  __int64 *v101; 
  unsigned int *v102; 
  __int64 v103; 
  __int64 v104; 
  bool v105; 
  __int64 v106; 
  __int64 v107; 
  __int64 v108; 
  __int64 v109; 
  __int64 v110; 
  struct _KPRCB *CurrentPrcb; 
  void **v112; 
  __int64 v113; 
  unsigned __int64 v114; 
  unsigned __int64 v115; 
  unsigned __int64 v116; 
  unsigned int v117; 
  _QWORD *k; 
  unsigned __int64 v119; 
  unsigned __int64 v120; 
  __int64 v121; 
  _QWORD *v122; 
  char *v123; 
  int v124; 
  unsigned __int64 v125; 
  signed __int64 v126; 
  int v127; 
  _QWORD *v128; 
  char *v129; 
  int v130; 
  __int64 v131; 
  __int64 v132; 
  __int64 v133; 
  unsigned __int64 v134; 
  __int64 v135; 
  void(__fastcall *v136)(__int64, __int64, __int64, _QWORD *); 
  const signed __int32 *KernelDr7; 
  __int64 v138; 
  int v139; 
  int v140; 
  int v141; 
  int v142; 
  int v143; 
  volatile signed __int32 *v144; 
  __int64 v146; 
  unsigned int v147; 
  __int64 v148; 
  __int64 v149; 
  __int64 v150; 
  __int64 v151; 
  __int64 v152; 
  __int64 v153; 
  __int64 v154; 
  __int64 v155; 
  unsigned int v157; 
  __int64 v158; 
  char *v159; 
  __int64 v160; 
  unsigned __int64 v161; 
  __int64 v162; 
  v1 = (UINT8 *)Src;
  v2 = a1;
  if( (*((_DWORD *)Src + 613) & 0x100000) != 0 )
    KeExitRetpoline();
  else
    _mm_lfence();
  v3 = __rdtsc();
  v4 = __ROR8__(v3, 3) ^ v3;
  v151 = (v4 * (unsigned __int128)0x7010008004002001ui64) >> 64;
  PoolWithTag = (char *)ExAllocatePoolWithTag(
                          NonPagedPoolNx,
                          *((_QWORD *)v1 + 338) + 2807i64,
                          (unsigned int)dword_140C12EE0[((unsigned __int8)v4 ^ (unsigned __int8)v151) & 0xF]);
  v150 = (__int64)PoolWithTag;
  v6 = (__int64)PoolWithTag;
  if( PoolWithTag )
  {
    *(_QWORD *)PoolWithTag = 0i64;
    v7 = (__int64)(PoolWithTag + 32);
    *((_QWORD *)PoolWithTag + 3) = PoolWithTag;
    *((_QWORD *)PoolWithTag + 2) = sub_1403E90C0;
    v159 = PoolWithTag + 32;
    memmove((UINT8 *)PoolWithTag + 32, v1, 0xAA0ui64);
    *(_QWORD *)(v6 + 2712) = v1;
    *(_QWORD *)(v6 + 2720) = v6 + 2752;
    v8 = __rdtsc();
    v9 = *(unsigned int *)(v6 + 2092);
    v10 = (__ROR8__(v8, 3) ^ v8) * (unsigned __int128)0x7010008004002001ui64;
    v152 = *((_QWORD *)&v10 + 1);
    *(_DWORD *)(v6 + 2120) = 0;
    *(_DWORD *)(v6 + 2112) = (*((_QWORD *)&v10 + 1) ^ (unsigned __int64)v10) % v9;
    v11 = *(char **)(v6 + 2712);
    v12 = *(_DWORD *)(v6 + 2100);
    v13 = v11;
    v14 = __rdtsc();
    v15 = __ROR8__(v14, 3);
    v16 = *(_QWORD *)(v6 + 2104);
    v153 = ((v15 ^ v14) * (unsigned __int128)0x7010008004002001ui64) >> 64;
    *(_DWORD *)(v6 + 2128) = v153 ^ (67117057 * (v15 ^ v14));
    *(_QWORD *)(v6 + 2728) = (v6 + 2807) & 0xFFFFFFFFFFFFFFF8ui64;
    v17 = v11;
    v18 = *((unsigned int *)v11 + 505);
    if( v11 < &v11[v18] )
    {
      do
      {
        _mm_prefetchnta(v17);
        v17 += 64;
      }
      while( v17 < &v11[v18] );
    }
    v19 = v16;
    for( i = (unsigned int)v18 >> 7; i; --i )
    {
      v21 = 8i64;
      do
      {
        v22 = v13[1] ^ __ROL8__(*v13 ^ v19, v12);
        v13 += 2;
        v19 = __ROL8__(v22, v12);
        --v21;
      }
      while( v21 );
      v23 = __ROL8__(v16 ^ ((char *)v13 - v11), 17) ^ v16 ^ ((char *)v13 - v11);
      v154 = (v23 * (unsigned __int128)0x7010008004002001ui64) >> 64;
      v12 = ((unsigned __int8)(v154 ^ v23) ^ (unsigned __int8)v12) & 0x3F;
      if( !v12 )
        LOBYTE(v12) = 1;
    }
    v24 = v18 & 0x7F;
    if( v24 >= 8 )
    {
      v25 = (unsigned __int64)(v18 & 0x7F) >> 3;
      do
      {
        v19 = __ROL8__(*v13++ ^ v19, v12);
        v24 -= 8;
        --v25;
      }
      while( v25 );
    }
    for( ; v24; --v24 )
    {
      v26 = *(unsigned __int8 *)v13;
      v13 = (_QWORD *)((char *)v13 + 1);
      v19 = __ROL8__(v26 ^ v19, v12);
    }
    if( v19 != qword_140CFB3D0 )
    {
      v27 = *(_QWORD *)(v6 + 1456);
      *(_QWORD *)v27 = v11;
      *(_DWORD *)(v27 + 16) = v18;
      if( !*(_DWORD *)(v6 + 2328) )
      {
        *(_QWORD *)(*(_QWORD *)(v6 + 1456) + 24i64) = v19 ^ qword_140CFB3D0;
        if( !*(_DWORD *)(v6 + 2328) )
        {
          *(_QWORD *)(v6 + 2344) = 0i64;
          *(_QWORD *)(v6 + 2336) = v6 - 0x5C5FC0A76E374AF8i64;
          *(_QWORD *)(v6 + 2352) = 273i64;
          *(_QWORD *)(v6 + 2360) = v19;
          *(_DWORD *)(v6 + 2328) = 1;
          __b8(v6 + 32, 0i64);
        }
      }
    }
    v28 = 4i64;
    v146 = 0i64;
    v29 = &v147;
    v30 = 4;
    v31 = 1i64;
    do
    {
      *(_BYTE *)v29 = 0;
      v29 = (unsigned int *)((char *)v29 + 1);
      --v30;
    }
    while( v30 );
    v32 = 32;
    v157 = 0;
    v33 = 12;
    if( *(_DWORD *)(v6 + 2092) )
    {
      while( 1 )
      {
        v34 = v7;
        if( *(_QWORD *)(v7 + 2680) )
          v34 = *(_QWORD *)(v7 + 2680);
        v35 = 0;
        v36 = (int *)(v34 + *(unsigned int *)(v34 + 2056));
        if( (_DWORD)v146 && HIDWORD(v146) <= v30 )
        {
          v35 = HIDWORD(v146);
          v36 = (int *)(v34 + v147);
        }
        if( v35 != v30 )
        {
          v37 = v30 - v35;
          v35 = v30;
          while( 1 )
          {
            v38 = *v36;
            if( *v36 > 12 )
              break;
            if( v38 == 12 )
              goto LABEL_46;
            v39 = v38 - 1;
            if( !v39 )
              goto LABEL_46;
            v40 = v39 - 6;
            if( v40 )
            {
              v41 = v40 - 1;
              if( !v41 )
              {
                v43 = *((unsigned __int16 *)v36 + 16);
LABEL_51:
                v42 = (v43 + 55) & 0xFFFFFFF8;
                goto LABEL_52;
              }
              if( v41 != 2 )
                goto LABEL_48;
              v42 = (unsigned int)(16 * (v36[7] + 3));
            }
            else
            {
              v42 = (unsigned int)(24 * (v36[6] + 2));
            }
LABEL_52:
            v36 = (int *)((char *)v36 + v42);
            if( !--v37 )
            {
              v7 = (__int64)v159;
              v30 = v157;
              goto LABEL_54;
            }
          }
          if( v38 == 28 )
          {
            v43 = *((unsigned __int16 *)v36 + 20);
            goto LABEL_51;
          }
          if( v38 == 30 )
          {
            v31 = ((v36[9] != 0 ? v36[9] - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8;
            v42 = (unsigned int)v31 + 24 * (*((unsigned __int16 *)v36 + 20) + 2);
            goto LABEL_52;
          }
          if( v38 <= 32 )
          {
LABEL_48:
            v42 = 48i64;
            goto LABEL_52;
          }
          if( v38 <= 34 )
          {
            v31 = ((v36[8] & 0xFFF) + (unsigned __int64)(unsigned int)v36[10] + 4095) >> 12;
            v42 = (unsigned int)(20 * v31 + 48);
            goto LABEL_52;
          }
          if( v38 != 43 )
            goto LABEL_48;
LABEL_46:
          v31 = (unsigned int)v36[4] / 0xCui64;
          v42 = (unsigned int)(4 * v31 + 48);
          goto LABEL_52;
        }
LABEL_54:
        LODWORD(v146) = 1;
        HIDWORD(v146) = v35;
        v147 = (_DWORD)v36 - v34;
        v44 = *v36;
        if( (_DWORD)v44 == 36 )
          break;
        if( (unsigned int)v44 > 0x2B )
          goto LABEL_140;
        v31 = 0x80200000002i64;
        if( !_bittest64(&v31, v44) )
          goto LABEL_140;
        v94 = *(_QWORD *)(v7 + 1344);
        CurrentIrql = KeGetCurrentIrql();
        __writecr8(0xFui64);
        (*(void(__fastcall **)(__int64))(v7 + 336))(v94);
        v97 = **(unsigned int ***)(v7 + 1552);
        v89 = v97 + 4;
        v98 = *((_BYTE *)v97 + 12);
        v99 = (unsigned __int64)&v97[6 * *v97 + 4];
        while( 2 )
        {
          v100 = 24i64;
          v101 = (__int64 *)(v36 + 6);
          v102 = v89;
          while( 1 )
          {
            v103 = *(_QWORD *)v102;
            v102 += 2;
            v104 = *v101++;
            if( v103 != v104 )
              break;
            v100 = (unsigned int)(v100 - 8);
            if( (unsigned int)v100 < 8 )
            {
              v105 = (_DWORD)v100 == 0;
              while( !v105 )
              {
                v96 = *(unsigned __int8 *)v102;
                v102 = (unsigned int *)((char *)v102 + 1);
                v106 = *(unsigned __int8 *)v101;
                v101 = (__int64 *)((char *)v101 + 1);
                if( v96 != v106 )
                  goto LABEL_129;
                v105 = (_DWORD)v100 == 1;
                v100 = (unsigned int)(v100 - 1);
              }
              goto LABEL_130;
            }
          }
LABEL_129:
          v89 += 6;
          if( (unsigned __int64)v89 < v99 )
            continue;
          break;
        }
LABEL_130:
        (*(void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))(v7 + 400))(
          *(_QWORD *)(v7 + 1344),
          v96,
          v100,
          v101);
        __writecr8(CurrentIrql);
        if( !v98 )
          goto LABEL_208;
        if( (*(_DWORD *)(v7 + 2452) & 0x10) != 0 && !*(_DWORD *)(v7 + 2296) )
        {
          *(_QWORD *)(v7 + 2304) = v7 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v7 + 2312) = (char *)v36 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v7 + 2320) = *v36;
          *(_QWORD *)(v7 + 2328) = 1i64;
          *(_DWORD *)(v7 + 2296) = 1;
          __b8(v7, 0i64);
        }
        if( *((_QWORD *)v36 + 3) != 1i64 )
        {
LABEL_208:
          if( v89 == (unsigned int *)v99 && !*(_DWORD *)(v7 + 2296) )
          {
            v93 = v7 - 0x5C5FC0A76E374B18i64;
LABEL_138:
            *(_QWORD *)(v7 + 2304) = v93;
            *(_QWORD *)(v7 + 2312) = (char *)v36 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v7 + 2320) = *v36;
            *(_QWORD *)(v7 + 2328) = v89;
            *(_DWORD *)(v7 + 2296) = 1;
            __b8(v7, 0i64);
          }
        }
LABEL_139:
        v30 = v157;
        v32 = 32;
        v33 = 12;
LABEL_140:
        v157 = ++v30;
        if( v30 >= *(_DWORD *)(v7 + 2060) )
        {
          v6 = v150;
          v28 = 4i64;
          goto LABEL_142;
        }
      }
      v45 = (_QWORD *)*((_QWORD *)v36 + 1);
      v46 = (unsigned int)v36[4];
      v47 = v45;
      *(_DWORD *)(v7 + 2088) += v46;
      v48 = (char *)v45;
      v49 = *(_DWORD *)(v7 + 2068);
      v50 = *(_QWORD *)(v7 + 2072);
      if( v45 < (_QWORD *)((char *)v45 + v46) )
      {
        do
        {
          _mm_prefetchnta(v48);
          v48 += 64;
        }
        while( v48 < (char *)v45 + v46 );
      }
      v51 = *(_QWORD *)(v7 + 2072);
      v52 = (unsigned int)v46 >> 7;
      if( (unsigned int)v46 >> 7 )
      {
        do
        {
          v53 = 8i64;
          do
          {
            v54 = v51 ^ *v47;
            v55 = v47[1];
            v47 += 2;
            v51 = __ROL8__(__ROL8__(v54, v49) ^ v55, v49);
            --v53;
          }
          while( v53 );
          v56 = __ROL8__(v50 ^ ((char *)v47 - (char *)v45), 17) ^ v50 ^ ((char *)v47 - (char *)v45);
          v31 = (v56 * (unsigned __int128)0x7010008004002001ui64) >> 64;
          v155 = v31;
          v49 = ((unsigned __int8)(v31 ^ v56) ^ (unsigned __int8)v49) & 0x3F;
          if( !v49 )
            LOBYTE(v49) = 1;
          --v52;
        }
        while( v52 );
        v7 = (__int64)v159;
      }
      v57 = v46 & 0x7F;
      if( (unsigned int)v57 >= 8 )
      {
        v31 = (unsigned __int64)(unsigned int)v57 >> 3;
        do
        {
          v51 = __ROL8__(*v47++ ^ v51, v49);
          v57 = (unsigned int)(v57 - 8);
          --v31;
        }
        while( v31 );
      }
      if( (_DWORD)v57 )
      {
        do
        {
          v58 = *(unsigned __int8 *)v47;
          v47 = (_QWORD *)((char *)v47 + 1);
          v51 = __ROL8__(v58 ^ v51, v49);
          v83 = (_DWORD)v57 == 1;
          v57 = (unsigned int)(v57 - 1);
        }
        while( !v83 );
      }
      for( j = v51; ; LODWORD(v51) = j ^ v51 )
      {
        j >>= 31;
        if( !j )
          break;
      }
      v60 = v51 & 0x7FFFFFFF;
      v61 = 0;
      if( v60 != v36[5] )
      {
        if( !*v36 && v36[6] )
          v61 = 1;
        v62 = (unsigned int)v36[4];
        v63 = *((_QWORD *)v36 + 1);
        if( v36[4] && (*(_DWORD *)(v7 + 2452) & 0x40) != 0 )
        {
          v64 = KeGetCurrentIrql();
          __writecr8(2ui64);
          v65 = v63 & 0xFFFFFFFFFFFFF000ui64;
          v149 = (v63 + v62 - 1) | 0xFFF;
          v161 = (v63 & 0xFFFFFFFFFFFFF000ui64) - 1;
          while( 2 )
          {
            v66 = v64;
            while( 1 )
            {
              v67 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v7 + 1128))(
                      v65,
                      0i64,
                      v57,
                      v47);
              if( v67 != -1073741267 )
                break;
              if( v61 )
                goto LABEL_87;
              if( v64 > 1u )
                goto LABEL_85;
              v66 = v64;
              __writecr8(v64);
              KeGetCurrentIrql();
              __writecr8(2ui64);
            }
            if( v67 < 0 )
            {
LABEL_87:
              __writecr8(v66);
              goto LABEL_88;
            }
LABEL_85:
            v65 += 4096i64;
            v161 += 4096i64;
            if( v161 != v149 )
              continue;
            break;
          }
          __writecr8(v66);
        }
        else
        {
LABEL_88:
          v68 = *(_DWORD *)(v7 + 2296);
          v31 = (unsigned int)v36[5];
          if( !v68 )
          {
            *(_QWORD *)(*(_QWORD *)(v7 + 1424) + 24i64) = v31 ^ v60;
            v68 = *(_DWORD *)(v7 + 2296);
          }
          v69 = *((_QWORD *)v36 + 1);
          if( !v68 )
          {
            *(_QWORD *)(v7 + 2304) = v7 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v7 + 2312) = (char *)v36 - 0x4C48B4211BBACBEBi64;
            v70 = *v36;
            *(_QWORD *)(v7 + 2328) = v69;
            *(_QWORD *)(v7 + 2320) = v70;
            *(_DWORD *)(v7 + 2296) = 1;
            __b8(v7, 0i64);
          }
        }
      }
      v71 = *(_QWORD *)(v7 + 1344);
      v72 = KeGetCurrentIrql();
      __writecr8(0xFui64);
      (*(void(__fastcall **)(__int64, __int64, __int64, _QWORD *))(v7 + 336))(v71, v31, v57, v47);
      v74 = **(unsigned int ***)(v7 + 1552);
      v75 = v74 + 4;
      v76 = *((_BYTE *)v74 + 12);
      v77 = (unsigned __int64)&v74[6 * *v74 + 4];
      while( 2 )
      {
        v78 = 24i64;
        v79 = (__int64 *)(v36 + 6);
        v80 = v75;
        while( 1 )
        {
          v81 = *(_QWORD *)v80;
          v80 += 2;
          v82 = *v79++;
          if( v81 != v82 )
            break;
          v78 = (unsigned int)(v78 - 8);
          if( (unsigned int)v78 < 8 )
          {
            v83 = (_DWORD)v78 == 0;
            while( !v83 )
            {
              v73 = *(unsigned __int8 *)v80;
              v80 = (unsigned int *)((char *)v80 + 1);
              v84 = *(unsigned __int8 *)v79;
              v79 = (__int64 *)((char *)v79 + 1);
              if( v73 != v84 )
                goto LABEL_100;
              v83 = (_DWORD)v78 == 1;
              v78 = (unsigned int)(v78 - 1);
            }
            goto LABEL_101;
          }
        }
LABEL_100:
        v75 += 6;
        if( (unsigned __int64)v75 < v77 )
          continue;
        break;
      }
LABEL_101:
      (*(void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))(v7 + 400))(*(_QWORD *)(v7 + 1344), v73, v78, v79);
      __writecr8(v72);
      if( !v76 )
        goto LABEL_209;
      if( (*(_DWORD *)(v7 + 2452) & 0x10) != 0 && !*(_DWORD *)(v7 + 2296) )
      {
        *(_QWORD *)(v7 + 2304) = v7 - 0x5C5FC0A76E374B18i64;
        *(_QWORD *)(v7 + 2312) = (char *)v36 - 0x4C48B4211BBACBEBi64;
        *(_QWORD *)(v7 + 2320) = *v36;
        *(_QWORD *)(v7 + 2328) = 1i64;
        *(_DWORD *)(v7 + 2296) = 1;
        __b8(v7, 0i64);
      }
      if( *((_QWORD *)v36 + 3) != 1i64 )
      {
LABEL_209:
        if( v75 == (unsigned int *)v77 && !*(_DWORD *)(v7 + 2296) )
        {
          *(_QWORD *)(v7 + 2304) = v7 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v7 + 2312) = (char *)v36 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v7 + 2320) = *v36;
          *(_QWORD *)(v7 + 2328) = v75;
          *(_DWORD *)(v7 + 2296) = 1;
          __b8(v7, 0i64);
        }
      }
      v85 = *(_QWORD *)(v7 + 1344);
      v86 = KeGetCurrentIrql();
      __writecr8(0xFui64);
      (*(void(__fastcall **)(__int64))(v7 + 336))(v85);
      v87 = 0i64;
      v88 = **(unsigned int ***)(v7 + 1552);
      v89 = v88 + 4;
      v90 = (unsigned __int64)&v88[6 * *v88 + 4];
      while( 1 )
      {
        v89 += 6;
        if( (unsigned __int64)v89 >= v90 )
          break;
        v91 = *((_QWORD *)v89 + 1);
        if( v91 < v87 )
          break;
        if( (v91 & 0xFFFFFFFFFFFFF000ui64) != v91 )
          break;
        v92 = v91 + v89[4];
        if( v92 <= v91 || v92 == v87 )
          break;
        v87 = v91 + v89[4];
      }
      (*(void(__fastcall **)(_QWORD))(v7 + 400))(*(_QWORD *)(v7 + 1344));
      __writecr8(v86);
      if( v89 == (unsigned int *)v90 || *(_DWORD *)(v7 + 2296) )
        goto LABEL_139;
      v93 = v7 - 0x5C5FC0A76E374B18i64;
      goto LABEL_138;
    }
LABEL_142:
    if( *(_DWORD *)(v7 + 2296) )
    {
      v107 = *(_QWORD *)(v7 + 2328);
      v108 = *(_QWORD *)(v7 + 2312);
      v109 = *(_QWORD *)(v7 + 2304);
      v110 = *(_QWORD *)(v7 + 2320);
      v158 = v107;
      v160 = v108;
      v162 = v109;
      v148 = v7;
      if( KeGetCurrentIrql() < 2u )
      {
        KeGetCurrentIrql();
        __writecr8(2ui64);
      }
      CurrentPrcb = KeGetCurrentPrcb();
      v112 = *(void ***)((char *)CurrentPrcb + *(_QWORD *)(v7 + 1592));
      v113 = *(_QWORD *)((char *)CurrentPrcb + *(_QWORD *)(v7 + 1608));
      if( !*((_BYTE *)CurrentPrcb + *(_QWORD *)(v7 + 1600))
        || &v148 > (__int64 *)v112
        || &v148 < (__int64 *)v112 - 3072 )
      {
        v112 = *(void ***)(v113 + *(_QWORD *)(v7 + 1656));
      }
      if( (*(_DWORD *)(v7 + 2448) & 0x8000000) == 0 )
      {
        v114 = __readcr0();
        __writecr0(v114 & 0xFFFFFFFFFFFEFFFFui64);
        v115 = v7 + 2728;
        v116 = 16i64 * *(unsigned int *)(v7 + 2720) + v7 + 2728;
        v117 = 0;
        for( k = (_QWORD *)v116; v117 < *(_DWORD *)(v7 + 2724); ++v117 )
        {
          *(_QWORD *)*k = k[1];
          v119 = __readcr4();
          if( (v119 & 0x20080) != 0 )
          {
            __writecr4(v119 ^ 0x80);
            __writecr4(v119);
          }
          else
          {
            v120 = __readcr3();
            __writecr3(v120);
          }
          k += 2;
        }
        if( v115 < v116 )
        {
          do
          {
            v121 = *(unsigned int *)(v115 + 8);
            v122 = k;
            v123 = *(char **)v115;
            v124 = v121;
            if( (unsigned int)v121 >= 8 )
            {
              v125 = (unsigned __int64)(unsigned int)v121 >> 3;
              do
              {
                v124 -= 8;
                *(_QWORD *)v123 = *v122++;
                v123 += 8;
                --v125;
              }
              while( v125 );
            }
            if( v124 )
            {
              v126 = v123 - (char *)v122;
              do
              {
                *((_BYTE *)v122 + v126) = *(_BYTE *)v122;
                v122 = (_QWORD *)((char *)v122 + 1);
                --v124;
              }
              while( v124 );
            }
            k = (_QWORD *)((char *)k + v121);
            v115 += 16i64;
          }
          while( v115 < v116 );
          v107 = v158;
        }
        **(_BYTE **)(v7 + 536) = -61;
        __writecr0(v114);
        v108 = v160;
        v109 = v162;
      }
      v139 = *(_DWORD *)(v7 + 2344);
      if( v139 )
      {
        if( KeGetCurrentIrql() < 2u )
        {
          KeGetCurrentIrql();
          __writecr8(2ui64);
          v139 = *(_DWORD *)(v7 + 2344);
        }
        if( v139 )
        {
          v140 = v139 - 1;
          if( v140 )
          {
            v141 = v140 - 1;
            if( v141 )
            {
              v142 = v141 - 1;
              if( v142 )
              {
                v143 = v142 - 1;
                if( v143 )
                {
                  if( v143 == 1 )
                    _interlockedbittestandset(
                      *(volatile signed __int32 **)((char *)KeGetCurrentPrcb() + *(_QWORD *)(v7 + 1608)),
                      (*(_DWORD *)(v7 + 2448) >> 10) & 0x1F);
                  else
                    _InterlockedOr64((volatile signed __int64 *)(*(_QWORD *)(v7 + 1464) + 832i64), 1ui64);
                }
                else
                {
                  _interlockedbittestandset(
                    *(volatile signed __int32 **)(*(_QWORD *)(v7 + 1704)
                                                + *(_QWORD *)((char *)KeGetCurrentPrcb() + *(_QWORD *)(v7 + 1608))
                                                + *(_QWORD *)(v7 + 1672)),
                    (*(_DWORD *)(v7 + 2448) >> 10) & 0x1F);
                }
                goto LABEL_203;
              }
              v144 = *(volatile signed __int32 **)(v7 + 1376);
            }
            else
            {
              v144 = *(volatile signed __int32 **)(v7 + 1368);
            }
          }
          else
          {
            v144 = *(volatile signed __int32 **)(v7 + 1352);
          }
          _interlockedbittestandset64(v144, 0i64);
        }
      }
LABEL_203:
      *(_QWORD *)(v113 + *(_QWORD *)(v7 + 1680)) = 0i64;
      *(_QWORD *)(v113 + *(_QWORD *)(v7 + 1696)) = 0i64;
      SdbpCheckDll(265i64, v109, v108, v107, v110, *(__int64(__fastcall **)(__int64))(v7 + 344), v112);
      JUMPOUT(0x1403DC93Fi64);
    }
    v127 = *(_DWORD *)(v7 + 196);
    *(_DWORD *)(v7 + 196) = 0;
    v128 = (_QWORD *)v7;
    *(_DWORD *)(v7 + 2088) += 1568;
    v129 = (char *)v7;
    v130 = *(_DWORD *)(v7 + 2068);
    if( v7 < (unsigned __int64)(v7 + 1568) )
    {
      do
      {
        _mm_prefetchnta(v129);
        v129 += 64;
      }
      while( (unsigned __int64)v129 < v7 + 1568 );
    }
    v131 = *(_QWORD *)(v7 + 2072);
    do
    {
      v132 = 8i64;
      do
      {
        v133 = v128[1] ^ __ROL8__(*v128 ^ v131, v130);
        v128 += 2;
        v131 = __ROL8__(v133, v130);
        --v132;
      }
      while( v132 );
      v134 = __ROL8__(*(_QWORD *)(v7 + 2072) ^ ((unsigned __int64)v128 - v7), 17) ^ *(_QWORD *)(v7 + 2072) ^ ((unsigned __int64)v128 - v7);
      v130 = ((unsigned __int8)(((v134 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v134) ^ (unsigned __int8)v130) & 0x3F;
      if( !v130 )
        LOBYTE(v130) = 1;
      --v33;
    }
    while( v33 );
    v2 = a1;
    do
    {
      v131 = __ROL8__(*v128++ ^ v131, v130);
      v32 -= 8;
      --v28;
    }
    while( v28 );
    for( ; v32; --v32 )
    {
      v135 = *(unsigned __int8 *)v128;
      v128 = (_QWORD *)((char *)v128 + 1);
      v131 = __ROL8__(v135 ^ v131, v130);
    }
    v136 = *(void(__fastcall **)(__int64, __int64, __int64, _QWORD *))(v7 + 272);
    *(_DWORD *)(v7 + 196) = v127;
    *(_QWORD *)(v7 + 2592) = v131;
    v136(v6, 1i64, v131, v128);
  }
  LOBYTE(KernelDr7) = KiGetTrapFrameMode(v2);
  v138 = (_BYTE)KernelDr7 != 0;
  if( (_BYTE)KernelDr7 )
  {
    _disable();
    KernelDr7 = *(const signed __int32 **)((char *)KeGetCurrentPrcb() + *((_QWORD *)Src + 201));
    _enable();
    LODWORD(v138) = _bittest(KernelDr7, 0x18u);
  }
  if( !KdpBootedNodebug && !(_BYTE)KdDebuggerNotPresent && !(_DWORD)v138 )
  {
    KernelDr7 = (const signed __int32 *)KiReadKernelDr7();
    if( KernelDr7 )
      __writedr(7u, (unsigned __int64)KernelDr7);
  }
  return(char)KernelDr7;
}

Referenced by:

KiSwInterrupt