ExpCrossVmIntHostCallback

VOID __fastcall ExpCrossVmIntHostCallback(INT64 a1, struct EX_RUNDOWN_REF **a2){
  struct EX_RUNDOWN_REF *v2; 
  int(__fastcall **ExtensionTable)(_QWORD, _QWORD, _QWORD); 
  int(__fastcall **v4)(_QWORD, _QWORD, _QWORD); 
  void(__fastcall *v5)(INT64(__fastcall *)(INT64, INT64, INT64 *, INT64, const VOID *, UINT64), _QWORD); 
  void(__fastcall *v6)(INT64(__fastcall *)(INT64, INT64, INT64 *, INT64, const VOID *, UINT64), __int64); 
  if( (_DWORD)a1 == 1 )
  {
    v2 = *a2;
    ExtensionTable = (int(__fastcall **)(_QWORD, _QWORD, _QWORD))ExGetExtensionTable(*a2);
    v4 = ExtensionTable;
    if( ExtensionTable )
    {
      if( (*ExtensionTable)(ExpObCloseCrossVmEvent, ExpObDeleteCrossVmEvent, &ExCrossVmEventObjectType) >= 0
        && ((int(__fastcall **)(VOID(__fastcall *)(INT64, INT64, INT64, INT64), VOID(__fastcall *)(INT64), POBJECT_TYPE *))v4)[8](
             ExpObCloseCrossVmMutant,
             ExpObDeleteCrossVmMutant,
             &ExCrossVmMutantObjectType) >= 0 )
      {
        if( v2 == ExpCrossVmIntExtensionHostGuest )
        {
          v5 = (void(__fastcall *)(INT64(__fastcall *)(INT64, INT64, INT64 *, INT64, const VOID *, UINT64), _QWORD))v4[16];
          if( v5 )
            v5(ExWnfCrossVmCallback, 0i64);
        }
        if( v2 == ExpCrossVmIntExtensionHostRoot )
        {
          v6 = (void(__fastcall *)(INT64(__fastcall *)(INT64, INT64, INT64 *, INT64, const VOID *, UINT64), __int64))v4[16];
          if( v6 )
            v6(ExWnfCrossVmCallback, 1i64);
        }
      }
      ExReleaseExtensionTable(v2);
    }
  }
}

Referenced by:

No references.