RtlpWow64SetContextOnAmd64
INT64 __fastcall RtlpWow64SetContextOnAmd64(INT64 a1, INT64 a2, INT64 a3, BYTE *a4){
INT64 v6;
unsigned int v8;
__int16 v9;
int v10;
int v11;
int v12;
*a4 = 0;
v6 = a2;
v8 = *(_DWORD *)a3;
if( a2 )
{
v9 = *(_WORD *)(a2 + 56);
RtlpWow64CtxToAmd64(v8, (_DWORD *)a3, a2);
if( v9 == 35 )
goto LABEL_18;
}
if( (v8 & 0x10001) == 65537 )
{
*(_DWORD *)(a1 + 180) = *(_DWORD *)(a3 + 180);
*(_DWORD *)(a1 + 184) = *(_DWORD *)(a3 + 184);
*(_DWORD *)(a1 + 188) = 35;
*(_DWORD *)(a1 + 192) = *(_DWORD *)(a3 + 192) & 0x3F0DD5 | 0x202;
*(_DWORD *)(a1 + 196) = *(_DWORD *)(a3 + 196);
*(_DWORD *)(a1 + 200) = *(_DWORD *)(a3 + 200);
}
if( (v8 & 0x10002) == 65538 )
{
*(_DWORD *)(a1 + 156) = *(_DWORD *)(a3 + 156);
*(_DWORD *)(a1 + 160) = *(_DWORD *)(a3 + 160);
*(_DWORD *)(a1 + 164) = *(_DWORD *)(a3 + 164);
*(_DWORD *)(a1 + 168) = *(_DWORD *)(a3 + 168);
*(_DWORD *)(a1 + 172) = *(_DWORD *)(a3 + 172);
*(_DWORD *)(a1 + 176) = *(_DWORD *)(a3 + 176);
}
v10 = 1048584;
if( (v8 & 0x10008) != 65544 )
v10 = 0;
v11 = v10 | 0x100010;
if( (v8 & 0x10010) != 65552 )
v11 = v10;
if( (v8 & 0x10020) == 65568 )
{
v11 |= 0x100008u;
*(_OWORD *)(a1 + 364) = *(_OWORD *)(a3 + 364);
*(_OWORD *)(a1 + 380) = *(_OWORD *)(a3 + 380);
*(_OWORD *)(a1 + 396) = *(_OWORD *)(a3 + 396);
*(_OWORD *)(a1 + 412) = *(_OWORD *)(a3 + 412);
*(_OWORD *)(a1 + 428) = *(_OWORD *)(a3 + 428);
*(_OWORD *)(a1 + 444) = *(_OWORD *)(a3 + 444);
}
v12 = v11 | 0x100040;
if( (v8 & 0x10040) != 65600 )
v12 = v11;
if( v12 && v6 )
{
*(_DWORD *)(v6 + 48) = v12;
LABEL_18:
*a4 = 1;
}
return 0i64;
}Referenced by:
PspWow64SetContextThread