WmipDSCleanup
void __fastcall WmipDSCleanup(ULONG_PTR BugCheckParameter2){
UINT64 *v2;
_QWORD *v3;
volatile signed __int64 *v4;
__int64 v5;
__int64 v6;
__int64 i;
volatile signed __int64 *v8;
void *v9;
if( (*(_DWORD *)(BugCheckParameter2 + 16) & 1) == 0 )
KeBugCheckEx(0x14Au, 1ui64, BugCheckParameter2, 0i64, 0i64);
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
v3 = *(_QWORD **)(BugCheckParameter2 + 40);
while( v3 != (_QWORD *)(BugCheckParameter2 + 40) )
{
v4 = v3 - 5;
if( *(v3 - 5) )
{
WmipUnlinkInstanceSetFromGuidEntry((__int64)(v3 - 5), v2);
*((_QWORD *)v4 + 8) = 0i64;
}
v5 = *((_QWORD *)v4 + 7);
if( v5 && (v4[2] & 8) == 0 )
{
v6 = *(_QWORD *)(v5 + 72) - WmipBinaryMofGuid;
if( !v6 )
v6 = *(_QWORD *)(v5 + 80) - 0x102906C9A000F0B2i64;
if( !v6 )
{
KeReleaseMutex(&WmipSMMutex, 0);
WmipGenerateBinaryMofNotification((__int64)(v3 - 5), &GUID_MOF_RESOURCE_REMOVED_NOTIFICATION);
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
v5 = *((_QWORD *)v4 + 7);
}
WmipUnreferenceEntry((__int64)&WmipGEChunkInfo, (volatile signed __int64 *)v5);
}
*((_QWORD *)v4 + 7) = 0i64;
v3 = (_QWORD *)*v3;
WmipUnreferenceEntry((__int64)&WmipISChunkInfo, v4);
}
KeReleaseMutex(&WmipSMMutex, 0);
for( i = 0i64; (unsigned int)i < *(_DWORD *)(BugCheckParameter2 + 64); i = (unsigned int)(i + 1) )
{
v8 = *(volatile signed __int64 **)(*(_QWORD *)(BugCheckParameter2 + 72) + 8 * i);
if( v8 )
WmipUnreferenceEntry((__int64)&WmipMRChunkInfo, v8);
}
v9 = *(void **)(BugCheckParameter2 + 72);
if( v9 != (void *)(BugCheckParameter2 + 80) )
{
ExFreePoolWithTag(v9, 0);
*(_QWORD *)(BugCheckParameter2 + 72) = 0i64;
}
}Referenced by:
No references.