ExpFindEmptyEntry
_OWNER_ENTRY *__stdcall ExpFindEmptyEntry(_ERESOURCE *Resource, _KLOCK_QUEUE_HANDLE *LockHandle){
_OWNER_ENTRY *OwnerTable;
_OWNER_ENTRY *result;
OwnerTable = Resource->OwnerTable;
if( OwnerTable )
{
result = OwnerTable + 1;
while( result->OwnerThread )
{
if( ++result == &OwnerTable[OwnerTable->TableSize] )
goto LABEL_5;
}
KeGetCurrentThread()->SchedulerApc.SpareByte0 = result - OwnerTable;
}
else
{
LABEL_5:
ExpExpandResourceOwnerTable(Resource, LockHandle);
return 0i64;
}
return result;
}Referenced by:
ExAcquireSharedWaitForExclusive
ExpAcquireSharedStarveExclusive