RtlpWow64GetContextOnAmd64

NTSTATUS __stdcall RtlpWow64GetContextOnAmd64(INT64 a1, INT64 a2, INT64 a3){
  int v3; 
  NTSTATUS result; 

  v3 = *(_DWORD *)a3;
  if( (*(_DWORD *)a3 & 0x27FFFF80) != 0x10000 )
    return -1073741811;
  if( !a2 )
    goto LABEL_5;
  result = RtlpWow64CtxFromAmd64(v3, (_DWORD *)a2, (int *)a3);
  if( result < 0 )
    return result;
  if( *(_WORD *)(a2 + 56) != 35 )
  {
LABEL_5:
    if( (v3 & 0x100000) == 0 )
    {
      if( (v3 & 0x10001) == 65537 )
      {
        *(_DWORD *)(a3 + 180) = *(_DWORD *)(a1 + 180);
        *(_DWORD *)(a3 + 184) = *(_DWORD *)(a1 + 184);
        *(_DWORD *)(a3 + 188) = 35;
        *(_DWORD *)(a3 + 192) = *(_DWORD *)(a1 + 192) & 0x3F0DD5 | 0x202;
        *(_DWORD *)(a3 + 196) = *(_DWORD *)(a1 + 196);
        *(_DWORD *)(a3 + 200) = 43;
      }
      if( (v3 & 0x10002) == 65538 )
      {
        *(_DWORD *)(a3 + 156) = *(_DWORD *)(a1 + 156);
        *(_DWORD *)(a3 + 160) = *(_DWORD *)(a1 + 160);
        *(_DWORD *)(a3 + 164) = *(_DWORD *)(a1 + 164);
        *(_DWORD *)(a3 + 168) = *(_DWORD *)(a1 + 168);
        *(_DWORD *)(a3 + 172) = *(_DWORD *)(a1 + 172);
        *(_DWORD *)(a3 + 176) = *(_DWORD *)(a1 + 176);
      }
      if( (v3 & 0x10004) == 65540 )
      {
        *(_DWORD *)(a3 + 152) = 43;
        *(_DWORD *)(a3 + 148) = 43;
        *(_DWORD *)(a3 + 144) = 83;
        *(_DWORD *)(a3 + 140) = 43;
      }
      if( (v3 & 0x10020) == 65568 )
      {
        *(_OWORD *)(a3 + 364) = *(_OWORD *)(a1 + 364);
        *(_OWORD *)(a3 + 380) = *(_OWORD *)(a1 + 380);
        *(_OWORD *)(a3 + 396) = *(_OWORD *)(a1 + 396);
        *(_OWORD *)(a3 + 412) = *(_OWORD *)(a1 + 412);
        *(_OWORD *)(a3 + 428) = *(_OWORD *)(a1 + 428);
        *(_OWORD *)(a3 + 444) = *(_OWORD *)(a1 + 444);
      }
      if( (v3 & 0x40000000) != 0 && (*(_DWORD *)a3 & 0x18000000) == 0 )
        *(_DWORD *)a3 |= 0x88000000;
      return 0;
    }
    return -1073741811;
  }
  return 0;
}

Referenced by:

PspWow64GetContextThread