IopCheckHandleForRevocation

UINT8 __stdcall IopCheckHandleForRevocation(
        _HANDLE_TABLE *ObjectTable,
        _HANDLE_TABLE_ENTRY *ObjectTableEntry,
        VOID *HandleId,
        _IOP_REVOCATION_CONTEXT *RevocationContext){
  int v7[10]; 

  if( (POBJECT_TYPE *)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *(unsigned __int8 *)(((ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64)
                                                                                             + 0x18) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)(WORD1(ObjectTableEntry->LowValue) & 0xFFF0) >> 8)] == IoFileObjectType
    && *(_QWORD *)(((ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64) + 0x38) == *(_QWORD *)RevocationContext )
  {
    IopRevokeFileObjectForProcess(
      (_FILE_OBJECT *)(((ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64) + 48),
      *((_EPROCESS **)RevocationContext + 1));
  }
  _InterlockedExchangeAdd64(&ObjectTableEntry->VolatileLowValue, 1ui64);
  _InterlockedOr(v7, 0);
  if( ObjectTable->HandleContentionEvent._bf_0 )
    ExpUnblockPushLock(&ObjectTable->HandleContentionEvent, 0i64, 0);
  return 0;
}

Referenced by:

No references.