WmipEnableCollectOrEvent

__int64 __fastcall WmipEnableCollectOrEvent(ULONG_PTR BugCheckParameter2, int a2, _BYTE *a3){
  int v5; 
  int v6; 
  char v7; 
  __int64 *i; 
  int v9; 
  *a3 = 0;
  v5 = a2 - 2244924;
  if( !v5 )
  {
    v6 = 0;
    v7 = 0;
    KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
    for( i = *(__int64 **)(BugCheckParameter2 + 56); i != (__int64 *)(BugCheckParameter2 + 56); i = (__int64 *)*i )
    {
      v9 = *((_DWORD *)i + 4);
      if( (v9 & 0x1000) == 0 && ((v9 & 0x8000) == 0 || !v6) && (v6 || (v9 & 4) != 0) )
        v6 = 1;
    }
    KeReleaseMutex(&WmipSMMutex, 0);
    if( !v6 )
      return(unsigned int)v6;
LABEL_14:
    KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
    v6 = WmipSendEnableRequest(BugCheckParameter2, v7);
    KeReleaseMutex(&WmipSMMutex, 0);
    if( v6 >= 0 )
      *a3 = 1;
    return(unsigned int)v6;
  }
  if( v5 == 4 )
  {
    v7 = 1;
    goto LABEL_14;
  }
  return 3221225647i64;
}

Referenced by:

WmipOpenBlock