KiOp_SGDTSIDT
INT64 __fastcall KiOp_SGDTSIDT(INT64 a1){
int v2;
char v3;
__int64 v4;
__int64 v5;
__int16 v6;
__int64 v7;
char v8;
UINT8 *v9;
_TBYTE Src;
BYTE v12;
UINT8 *dst;
__int64 v14;
dst = 0i64;
v12 = 0;
*(_QWORD *)((char *)&Src + 2) = 0i64;
if( (KiBugCheckActive & 3) != 0 )
{
v2 = 1;
if( VslVsmEnabled )
goto LABEL_9;
}
else
{
v2 = 0;
}
if( !KiNPIEPEnabled && (KeFeatureBits2 & 4) == 0 || *(_BYTE *)(a1 + 81) != 1 && !v2 )
return 0i64;
LABEL_9:
v3 = *(_BYTE *)(a1 + 81);
if( (*(_BYTE *)(a1 + 65) & 0x38) != 0 )
{
if( v3 )
{
v4 = KiOpIdtr;
goto LABEL_15;
}
v5 = *((_QWORD *)KeGetPcr() + 7);
v6 = 4095;
LABEL_17:
LOWORD(Src) = v6;
*(_QWORD *)((char *)&Src + 2) = v5;
goto LABEL_18;
}
if( !v3 )
{
v5 = *(_QWORD *)KeGetPcr();
v6 = 87;
goto LABEL_17;
}
v4 = KiOpGdtr;
LABEL_15:
*(_QWORD *)&Src = v4;
HIWORD(Src) = -1;
LABEL_18:
v7 = *(_QWORD *)(a1 + 32);
v14 = v7;
*(_DWORD *)v7 = -1073741819;
if( (int)KiOpRetrieveRegMemAddress(a1, (INT64 *)&dst, &v12, 0i64) < 0 )
{
dst = (UINT8 *)-1i64;
}
else
{
v8 = *(_BYTE *)(a1 + 58);
if( v12 == 1 )
{
v9 = &dst[(-(__int64)(v8 != 0) & 0xFFFFFFFFFFFFFFFCui64) + 10];
if( (unsigned __int64)v9 > 0x7FFFFFFF0000i64 || v9 < dst )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(dst, (UINT8 *)&Src, (-(__int64)(v8 != 0) & 0xFFFFFFFFFFFFFFFCui64) + 10);
*(_QWORD *)(*(_QWORD *)(a1 + 24) + 248i64) += (unsigned int)(*(_DWORD *)(a1 + 16) - *(_DWORD *)a1);
++KiOpDescriptorTableStoreSkip;
*(_BYTE *)(a1 + 96) = 1;
}
if( !*(_BYTE *)(a1 + 96) )
{
*(_DWORD *)v7 = -1073741819;
*(_QWORD *)(v7 + 32) = 1i64;
*(_QWORD *)(v7 + 40) = dst;
*(_BYTE *)(a1 + 97) = 1;
}
return 0i64;
}Referenced by:
No references.