EmClientRuleDeregisterNotification
VOID __stdcall EmClientRuleDeregisterNotification(VOID *NotificationHandle){
__int64 i;
_QWORD *v3;
__int64 v4;
_QWORD *v5;
if( NotificationHandle )
{
ExAcquirePushLockExclusiveEx(&EmpDatabaseLock, 0i64);
for( i = 0i64; (unsigned int)i < *((_DWORD *)NotificationHandle + 4); *(_QWORD *)(v4 + 8) = v5 )
{
_InterlockedAdd(*(volatile signed __int32 **)(*((_QWORD *)NotificationHandle + 1) + 40 * i), 0xFFFFFFFF);
v3 = (_QWORD *)(*((_QWORD *)NotificationHandle + 1) + 8 * (5 * i + 3));
v4 = *v3;
if( *(_QWORD **)(*v3 + 8i64) != v3 || (v5 = (_QWORD *)v3[1], (_QWORD *)*v5 != v3) )
__fastfail(3u);
*v5 = v4;
i = (unsigned int)(i + 1);
}
if( *(_QWORD *)NotificationHandle )
HalPutDmaAdapter(*(PADAPTER_OBJECT *)NotificationHandle);
ExFreePoolWithTag(*((PVOID *)NotificationHandle + 1), 0x6C634D45u);
ExFreePoolWithTag(NotificationHandle, 0x6C634D45u);
if( (_InterlockedExchangeAdd64(&EmpDatabaseLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&EmpDatabaseLock);
KeAbPostRelease(&EmpDatabaseLock);
}
}Referenced by:
No references.