KeCopyContextToUch
INT64 __fastcall KeCopyContextToUch(INT64 a1, INT64 a2){
int v2;
INT64 result;
__int64 v6;
_OWORD *v7;
__int64 v8;
int v9;
__int128 v10;
UINT64 ContextFlags;
v2 = *(_DWORD *)(a2 + 48);
LODWORD(ContextFlags) = v2 & 0x100013;
RtlpSanitizeContextFlags(&ContextFlags, 1);
KeContextToKframes(
*(_KTRAP_FRAME **)(a1 + 80),
*(_KEXCEPTION_FRAME **)(a1 + 88),
(_CONTEXT *)a2,
(unsigned int)ContextFlags,
1);
if( (v2 & 0x100040) == 1048640 && KUSER_SHARED_DATA.XState.EnabledFeatures && (*(_BYTE *)(a1 + 72) & 1) != 0 )
KiCopyXStateArea(
*(_QWORD *)(a1 + 64),
KUSER_SHARED_DATA.XState.EnabledFeatures & 0xFFFFFFFFFFFFFFFCui64,
*(int *)(a2 + 1248) + a2 + 720);
result = 1048584i64;
if( (v2 & 0x100008) == 1048584 )
{
if( (*(_BYTE *)(a1 + 72) & 1) != 0 )
{
v6 = *(_QWORD *)(a1 + 64);
v7 = (_OWORD *)(a2 + 256);
v8 = 4i64;
v9 = *(_DWORD *)(v6 + 24);
do
{
*(_OWORD *)v6 = *v7;
*(_OWORD *)(v6 + 16) = v7[1];
*(_OWORD *)(v6 + 32) = v7[2];
*(_OWORD *)(v6 + 48) = v7[3];
*(_OWORD *)(v6 + 64) = v7[4];
*(_OWORD *)(v6 + 80) = v7[5];
*(_OWORD *)(v6 + 96) = v7[6];
v6 += 128i64;
v10 = v7[7];
v7 += 8;
*(_OWORD *)(v6 - 16) = v10;
--v8;
}
while( v8 );
*(_DWORD *)(*(_QWORD *)(a1 + 64) + 24i64) = v9;
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 112i64) = *(_OWORD *)(a2 + 416);
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 128i64) = *(_OWORD *)(a2 + 432);
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 144i64) = *(_OWORD *)(a2 + 448);
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 160i64) = *(_OWORD *)(a2 + 464);
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 176i64) = *(_OWORD *)(a2 + 480);
*(_OWORD *)(*(_QWORD *)(a1 + 80) + 192i64) = *(_OWORD *)(a2 + 496);
}
**(_WORD **)(a1 + 64) = *(_WORD *)(a2 + 256) & 0x1F3F;
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 48i64) = *(_OWORD *)(a2 + 512);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 64i64) = *(_OWORD *)(a2 + 528);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 80i64) = *(_OWORD *)(a2 + 544);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 96i64) = *(_OWORD *)(a2 + 560);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 112i64) = *(_OWORD *)(a2 + 576);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 128i64) = *(_OWORD *)(a2 + 592);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 144i64) = *(_OWORD *)(a2 + 608);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 160i64) = *(_OWORD *)(a2 + 624);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 176i64) = *(_OWORD *)(a2 + 640);
*(_OWORD *)(*(_QWORD *)(a1 + 88) + 192i64) = *(_OWORD *)(a2 + 656);
result = *(_QWORD *)(a1 + 80);
*(_DWORD *)(result + 44) = KiMxCsrMask & *(_DWORD *)(a2 + 52);
}
return result;
}Referenced by:
PspSetUmsThreadContext