XmEmulateStream

NTSTATUS __stdcall XmEmulateStream(INT64 a1, INT16 a2, UINT16 a3, INT64 a4){
  unsigned int v4; 
  VOID *v5; 
  INT64 v6; 
  unsigned __int8 CodeByte; 
  __int16 v8; 

  dword_140CED138 = *(_DWORD *)a4;
  dword_140CED13C = *(_DWORD *)(a4 + 4);
  dword_140CED140 = *(_DWORD *)(a4 + 8);
  dword_140CED144 = *(_DWORD *)(a4 + 12);
  dword_140CED14C = *(_DWORD *)(a4 + 16);
  dword_140CED150 = *(_DWORD *)(a4 + 20);
  dword_140CED154 = *(_DWORD *)(a4 + 24);
  word_140CED15E = *(_WORD *)(a4 + 28);
  word_140CED158 = *(_WORD *)(a4 + 30);
  word_140CED15A = a2;
  dword_140CED134 = a3;
  v4 = setjmp((_JBTYPE *)unk_140CED1C0);
  v6 = v4;
  for( dword_140C50470 = v4; !dword_140C50470; v6 = dword_140C50470 )
  {
    *((_DWORD *)&unk_140CED120 + 29) = 3;
    *((_QWORD *)&unk_140CED120 + 17) = 0i64;
    unk_140CED120 = XmOpcodeControlTable1;
    do
    {
      CodeByte = XmGetCodeByte((INT64)&unk_140CED120, v6, v5);
      *((_DWORD *)&unk_140CED120 + 28) = CodeByte;
      v8 = *(_WORD *)(unk_140CED120 + 2i64 * CodeByte);
      *((_WORD *)&unk_140CED120 + 40) = v8;
      *((_DWORD *)&unk_140CED120 + 31) = (unsigned __int8)v8;
    }
    while( !((unsigned int(__fastcall *)(void *))XmOperandDecodeTable[*((unsigned __int8 *)&unk_140CED120 + 81)])(&unk_140CED120) );
    ((void(__fastcall *)(void *))XmOpcodeFunctionTable[*((unsigned int *)&unk_140CED120 + 31)])(&unk_140CED120);
  }
  *(_DWORD *)a4 = *((_DWORD *)&unk_140CED120 + 6);
  *(_DWORD *)(a4 + 4) = *((_DWORD *)&unk_140CED120 + 7);
  *(_DWORD *)(a4 + 8) = *((_DWORD *)&unk_140CED120 + 8);
  *(_DWORD *)(a4 + 12) = *((_DWORD *)&unk_140CED120 + 9);
  *(_DWORD *)(a4 + 16) = *((_DWORD *)&unk_140CED120 + 11);
  *(_DWORD *)(a4 + 20) = *((_DWORD *)&unk_140CED120 + 12);
  *(_DWORD *)(a4 + 24) = *((_DWORD *)&unk_140CED120 + 13);
  return v6;
}

Referenced by:

XmEmulateInterrupt