WmipUnreferenceEntry

__int64 __fastcall WmipUnreferenceEntry(__int64 a1, volatile signed __int64 *a2){
  __int64 v4; 
  volatile signed __int64 v6; 
  int v7; 
  void(__fastcall *v8)(volatile signed __int64 *); 
  volatile signed __int64 **v9; 
  KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
  v4 = _InterlockedDecrement64(a2 + 3);
  if( v4 )
  {
    if( v4 < 0 )
      KeBugCheckEx(0x14Au, 2ui64, (ULONG_PTR)a2, 0i64, 0i64);
    KeReleaseMutex(&WmipSMMutex, 0);
  }
  else
  {
    v6 = *a2;
    v7 = *((_DWORD *)a2 + 4) | 0x20000000;
    *((_DWORD *)a2 + 4) = v7;
    if( v6 && (v7 & 0x10000000) != 0 )
    {
      if( *(volatile signed __int64 **)(v6 + 8) != a2
        || (v9 = (volatile signed __int64 **)*((_QWORD *)a2 + 1), *v9 != a2) )
      {
        __fastfail(3u);
      }
      *v9 = (volatile signed __int64 *)v6;
      *(_QWORD *)(v6 + 8) = v9;
    }
    KeReleaseMutex(&WmipSMMutex, 0);
    v8 = *(void(__fastcall **)(volatile signed __int64 *))(a1 + 16);
    if( v8 )
      v8(a2);
    ExFreeToNPagedLookasideList(*(NPAGED_LOOKASIDE_LIST **)a1, (PVOID)a2);
  }
  return v4;
}

Referenced by:

WmipAddDataSource
WmipAddMofResource
WmipAddProviderIdToPIList
WmipDSCleanup
WmipDereferenceEvent
WmipDetermineInstanceBaseIndex
WmipDisableCollectionForRemovedGuid
WmipEnableCollectionForNewGuid
WmipGenerateRegistrationNotification
WmipIncludeStaticNames
WmipLegacyEtwWorker
WmipMangleInstanceName
WmipPrepareWnodeSI
WmipProcessEvent
WmipProcessLegacyEtwCallback
WmipQueryAllData
WmipQuerySetExecuteSI
WmipRemoveDS
WmipSendEnableDisableRequest
WmipSendEnableRequest
WmipUpdateAddGuid
WmipUpdateDataSource
WmipUpdateModifyGuid