ExLockHandleTableEntry
UINT8 __stdcall ExLockHandleTableEntry(_HANDLE_TABLE *HandleTable, _HANDLE_TABLE_ENTRY *HandleTableEntry){
__int64 LowValue;
while( 1 )
{
while( 1 )
{
_m_prefetchw(HandleTableEntry);
LowValue = HandleTableEntry->LowValue;
if( (HandleTableEntry->LowValue & 1) == 0 )
break;
if( LowValue == _InterlockedCompareExchange64(&HandleTableEntry->VolatileLowValue, LowValue - 1, LowValue) )
return 1;
}
if( !LowValue )
break;
ExpBlockOnLockedHandleEntry(HandleTable, HandleTableEntry, LowValue);
}
return 0;
}Referenced by:
ExDupHandleTable
ExQueryProcessHandleInformation
ExpSnapShotHandleTables
NtClose
ObReferenceFileObjectForWrite
ObWaitForMultipleObjects
ObpAuditObjectAccess
ObpReferenceProcessObjectByHandle
PspReferenceCidTableEntry