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.