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