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.