ObUnRegisterCallbacks
VOID __stdcall ObUnRegisterCallbacks(VOID *RegistrationHandle){
unsigned int i;
EX_RUNDOWN_REF *v3;
_ETHREAD *CurrentThread;
unsigned __int64 Count;
EX_RUNDOWN_REF **v6;
for( i = 0; i < *((unsigned __int16 *)RegistrationHandle + 1); ++i )
{
v3 = (EX_RUNDOWN_REF *)((char *)RegistrationHandle + 64 * (unsigned __int64)i + 32);
ExWaitForRundownProtectionRelease(v3 + 7);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx(v3[4].Count + 184, 0i64);
Count = v3->Count;
if( *(EX_RUNDOWN_REF **)(v3->Count + 8) != v3 || (v6 = (EX_RUNDOWN_REF **)v3[1].Count, *v6 != v3) )
__fastfail(3u);
*v6 = (EX_RUNDOWN_REF *)Count;
*(_QWORD *)(Count + 8) = v6;
ExReleasePushLockEx(v3[4].Count + 184, 0i64);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
ExFreePoolWithTag(RegistrationHandle, 0x6C46624Fu);
}Referenced by:
No references.