ObpEnumFindHandleProcedure

UINT8 __stdcall ObpEnumFindHandleProcedure(
        _HANDLE_TABLE *ObjectTable,
        _HANDLE_TABLE_ENTRY *ObjectTableEntry,
        VOID *HandleId,
        VOID *EnumParameter){
  UINT8 v5; 
  __int64 v7; 
  _DWORD *v8; 
  __int64 v9; 
  int v10[10]; 

  if( !*(_QWORD *)EnumParameter
    || *(_QWORD *)EnumParameter == ((ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64) )
  {
    v7 = *((_QWORD *)EnumParameter + 1);
    if( !v7
      || v7 == ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *(unsigned __int8 *)(((ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64)
                                                                                     + 0x18) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)(WORD1(ObjectTableEntry->LowValue) & 0xFFF0) >> 8)] )
    {
      v8 = (_DWORD *)*((_QWORD *)EnumParameter + 2);
      if( !v8 )
        goto LABEL_11;
      v9 = (ObjectTableEntry->LowValue >> 17) & 7;
      if( (ObjectTableEntry->LeafHandleValue.$E5B3C52FE72490EE6A49ADBB8529F30E::_bf_0 & 0x2000000) != 0 )
        LOBYTE(v9) = v9 | 8;
      if( *v8 == (v9 & 7)
        && v8[1] == (ObjectTableEntry->LeafHandleValue.$E5B3C52FE72490EE6A49ADBB8529F30E::_bf_0 & 0x1FFFFFF) )
      {
LABEL_11:
        v5 = 1;
      }
      else
      {
        v5 = 0;
      }
    }
    else
    {
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  _InterlockedExchangeAdd64(&ObjectTableEntry->VolatileLowValue, 1ui64);
  _InterlockedOr(v10, 0);
  if( ObjectTable->HandleContentionEvent._bf_0 )
    ExfUnblockPushLock(&ObjectTable->HandleContentionEvent._bf_0, 0i64);
  return v5;
}

Referenced by:

No references.