KiEnumerateCallback

NTSTATUS __stdcall KiEnumerateCallback(INT64 a1, VOID ***a2, UINT8 *a3, UINT64 *a4){
  _EX_RUNDOWN_REF *v6; 
  _EX_RUNDOWN_REF *v7; 
  signed __int64 v9; 
  signed __int64 v10; 

  if( !(_DWORD)a1 )
    return KiEnumerateNmiSxCallback(a2, a3, a4);
  if( (_DWORD)a1 != 1 )
    return 0;
  v6 = (_EX_RUNDOWN_REF *)*a2;
  if( *a2 )
  {
    _m_prefetchw(&KiBoundsCallback);
    v9 = KiBoundsCallback;
    if( ((unsigned __int64)v6 ^ KiBoundsCallback) >= 0xF )
    {
LABEL_11:
      ExReleaseRundownProtection(v6);
    }
    else
    {
      while( 1 )
      {
        v10 = v9;
        v9 = _InterlockedCompareExchange64(&KiBoundsCallback, v9 + 1, v9);
        if( v10 == v9 )
          break;
        if( ((unsigned __int64)v6 ^ v9) >= 0xF )
          goto LABEL_11;
      }
    }
    *a2 = 0i64;
    return 0;
  }
  v7 = ExReferenceCallBackBlock(&KiBoundsCallback);
  if( !v7 )
    return 0;
  *a2 = (VOID **)v7;
  *a4 = v7[1].Count;
  return 1;
}

Referenced by:

No references.