CmpMachineHiveLoadedWorkItem

void __fastcall CmpMachineHiveLoadedWorkItem(__int64 a1){
  ULONG_PTR v2; 
  _EX_PUSH_LOCK *v3; 
  _QWORD *v4; 
  __int64 *v5; 
  __int64 v6; 

  v2 = a1 + 144;
  v3 = (_EX_PUSH_LOCK *)(a1 + 144);
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 144), 0i64);
  do
  {
    while( 1 )
    {
      v4 = (_QWORD *)(a1 + 152);
      v5 = *(__int64 **)(a1 + 152);
      if( v5 == (__int64 *)(a1 + 152) )
        break;
      v6 = *v5;
      if( (_QWORD *)v5[1] != v4 || *(__int64 **)(v6 + 8) != v5 )
        __fastfail(3u);
      *v4 = v6;
      *(_QWORD *)(v6 + 8) = v4;
      *((_WORD *)v5 + 18) = 1;
      ExReleasePushLockEx(v2, 0);
      ((void(__fastcall *)(__int64))v5[2])(v5[3]);
      ExAcquirePushLockExclusiveEx(v3, 0i64);
      *((_BYTE *)v5 + 36) = 0;
      if( *((_BYTE *)v5 + 38) )
        KeSetEvent((PRKEVENT)((char *)&CmpDummyThreadEvent + 1984), 0, 0);
    }
  }
  while( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 176), 0xFFFFFFFF) > 1 );
  ExReleasePushLockEx((ULONG_PTR)v3, 0);
}

Referenced by:

No references.