ExpGetNextCallback

__int64 __fastcall ExpGetNextCallback(PVOID Object){
  _ETHREAD *CurrentThread; 
  int v2; 
  __int64 *v3; 
  __int64 *v5; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v2 = 0;
  v3 = 0i64;
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockSharedEx((UINT64)&ExpCallbackListLock, 0i64);
  v5 = (__int64 *)ExpCallbackListHead;
  if( Object )
    v5 = (__int64 *)*((_QWORD *)Object + 5);
  while( v5 != &ExpCallbackListHead )
  {
    v3 = v5 - 5;
    if( ObReferenceObjectSafeWithTag(v5 - 5, 0x6E457845ui64) )
    {
      v2 = 1;
      break;
    }
    v5 = (__int64 *)*v5;
  }
  ExReleasePushLockEx((UINT64)&ExpCallbackListLock, 0i64);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( Object )
    ObfDereferenceObjectWithTag(Object, 0x6E457845ui64);
  return(unsigned __int64)v3 & -(__int64)(v2 != 0);
}

Referenced by:

No references.