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.