DbgEnumerateCallback

LIST_ENTRY *__fastcall DbgEnumerateCallback(VOID **EnumerationContext){
  void **v2; 
  unsigned __int64 v3; 
  struct _EX_RUNDOWN_REF *v4; 
  LIST_ENTRY *Count; 
  ExAcquireSpinLockSharedAtDpcLevel(&RtlpDebugPrintCallbackLock);
  v2 = &RtlpDebugPrintCallbackList;
  if( *EnumerationContext )
    v2 = (void **)*EnumerationContext;
  v3 = (unsigned __int64)*EnumerationContext & -(__int64)(*EnumerationContext != 0i64);
  v4 = (struct _EX_RUNDOWN_REF *)*v2;
  Count = 0i64;
  while( v4 != (struct _EX_RUNDOWN_REF *)&RtlpDebugPrintCallbackList )
  {
    if( ExAcquireRundownProtection(v4 - 2) )
    {
      Count = (LIST_ENTRY *)v4[-1].Count;
      *EnumerationContext = v4;
      break;
    }
    v4 = (struct _EX_RUNDOWN_REF *)v4->Count;
  }
  ExReleaseSpinLockSharedFromDpcLevel(&RtlpDebugPrintCallbackLock);
  if( v3 )
    ExReleaseRundownProtection((PEX_RUNDOWN_REF)(v3 - 16));
  return Count;
}

Referenced by:

No references.