ExMapHandleToPointer
_HANDLE_TABLE_ENTRY *__stdcall ExMapHandleToPointer(
_HANDLE_TABLE *HandleTable,
VOID *Handle,
VOID *orig,
INT64 orig_size,
const VOID *decode_size,
INT64 comp_size,
PVOID comp){
_HANDLE_TABLE_ENTRY *v8;
INT64 LowValue;
if( ((unsigned __int16)Handle & 0x3FC) == 0 )
return 0i64;
v8 = ExpLookupHandleTableEntry(HandleTable, (_EXHANDLE)Handle);
if( !v8 )
return 0i64;
do
{
while( 1 )
{
_m_prefetchw(v8);
LowValue = v8->LowValue;
if( (v8->LowValue & 1) != 0 )
break;
if( !LowValue )
return 0i64;
ExpBlockOnLockedHandleEntry(HandleTable, v8, LowValue);
}
}
while( LowValue != _InterlockedCompareExchange64(&v8->VolatileLowValue, LowValue - 1, LowValue) );
return v8;
}Referenced by:
ObQueryObjectAuditingByHandle
ObSetHandleAttributes
ObpCloseHandle
PspClearProcessThreadCidRefs
PspJobDelete
PspThreadDelete
RtlpInsertStringAtom