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