WmipOpenBlock

__int64 __fastcall WmipOpenBlock(int a1, __int64 a2, __int64 a3, DWORD a4, PADAPTER_OBJECT *a5){
  unsigned __int64 v5; 
  char v6; 
  __int64 v8; 
  int v9; 
  char *v10; 
  _QWORD *GEByGuid; 
  _QWORD *v12; 
  _QWORD *v13; 
  _QWORD *v15; 
  _QWORD *v16; 
  __int64 v17; 
  _QWORD *v18; 
  _QWORD *v19; 
  void *DmaAdapter[5]; 
  DmaAdapter[0] = 0i64;
  v5 = (unsigned int)(a1 - 2244872);
  v6 = a2;
  if( (unsigned int)v5 > 0x38 )
    return(unsigned int)-1073741649;
  v8 = 0x110000000000001i64;
  if( !_bittest64(&v8, v5) )
    return(unsigned int)-1073741649;
  v9 = WmipOpenGuidObject(a3, a2, a4, DmaAdapter);
  if( v9 >= 0 )
  {
    v10 = (char *)DmaAdapter[0];
    *((_DWORD *)DmaAdapter[0] + 16) = a1;
    if( a1 == 2244872 )
    {
      *((_DWORD *)v10 + 41) |= 1u;
    }
    else
    {
      GEByGuid = WmipFindGEByGuid((_QWORD *)v10 + 3, 0);
      KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
      if( GEByGuid )
      {
        v12 = (_QWORD *)GEByGuid[6];
        v13 = v10 + 40;
        if( (_QWORD *)*v12 != GEByGuid + 5 )
          goto LABEL_28;
        *v13 = GEByGuid + 5;
        *((_QWORD *)v10 + 6) = v12;
        *v12 = v13;
        GEByGuid[6] = v13;
      }
      *((_QWORD *)v10 + 7) = GEByGuid;
      KeReleaseMutex(&WmipSMMutex, 0);
      if( a1 == 2244924 )
      {
        if( !GEByGuid || *((_DWORD *)GEByGuid + 9) == a1 - 2244924 || !WmipIsQuerySetGuid((__int64)GEByGuid) )
        {
          v9 = -1073741163;
          goto LABEL_17;
        }
LABEL_12:
        if( !v6 )
          *((_DWORD *)v10 + 41) |= 2u;
        if( GEByGuid )
        {
LABEL_15:
          v9 = WmipEnableCollectOrEvent((ULONG_PTR)GEByGuid, a1, v10 + 160);
          if( v9 < 0 )
            goto LABEL_17;
          goto LABEL_16;
        }
        KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
        v15 = WmipAllocGuidEntry();
        GEByGuid = v15;
        if( v15 )
        {
          *(_OWORD *)(v15 + 9) = *(_OWORD *)(v10 + 24);
          v16 = (_QWORD *)WmipGEHeadPtr;
          v17 = *(_QWORD *)WmipGEHeadPtr;
          if( *(_QWORD *)(*(_QWORD *)WmipGEHeadPtr + 8i64) == WmipGEHeadPtr )
          {
            *GEByGuid = v17;
            GEByGuid[1] = v16;
            *(_QWORD *)(v17 + 8) = GEByGuid;
            *v16 = GEByGuid;
            v18 = v10 + 40;
            v19 = (_QWORD *)GEByGuid[6];
            if( (_QWORD *)*v19 == GEByGuid + 5 )
            {
              *v18 = GEByGuid + 5;
              *((_QWORD *)v10 + 6) = v19;
              *v19 = v18;
              GEByGuid[6] = v18;
              *((_QWORD *)v10 + 7) = GEByGuid;
              KeReleaseMutex(&WmipSMMutex, 0);
              goto LABEL_15;
            }
          }
LABEL_28:
          __fastfail(3u);
        }
        KeReleaseMutex(&WmipSMMutex, 0);
        v9 = -1073741670;
LABEL_17:
        if( v10 )
          HalPutDmaAdapter((PADAPTER_OBJECT)v10);
        return(unsigned int)v9;
      }
      if( a1 == 2244928 )
        goto LABEL_12;
    }
LABEL_16:
    *a5 = (PADAPTER_OBJECT)v10;
    v10 = 0i64;
    v9 = 0;
    goto LABEL_17;
  }
  return(unsigned int)v9;
}

Referenced by:

IoWMIOpenBlock
WmipIoControl