IopIsFileOpenOrSection

bool __fastcall IopIsFileOpenOrSection(_EX_PUSH_LOCK *a1, volatile signed __int64 *a2, __int64 a3, __int64 *a4){
  __int64 v4; 
  bool v6; 
  unsigned __int64 v8; 
  _OBJECT_TYPE *v9; 
  int v11[10]; 

  v4 = *a4;
  v6 = 0;
  v8 = (*(__int64 *)a2 >> 16) & 0xFFFFFFFFFFFFFFF0ui64;
  v9 = (_OBJECT_TYPE *)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *(unsigned __int8 *)(v8 + 0x18) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)(WORD1(*a2) & 0xFFF0) >> 8)];
  if( v9 == (_OBJECT_TYPE *)IoFileObjectType )
  {
    if( v4 == v8 + 48 )
    {
      v6 = *((_BYTE *)a4 + 8) == 0;
    }
    else if( *(_QWORD *)(v4 + 24) == *(_QWORD *)(((*(__int64 *)a2 >> 16) & 0xFFFFFFFFFFFFFFF0ui64) + 0x48) )
    {
      v6 = 1;
    }
  }
  else if( v9 == MmSectionObjectType && *(_QWORD *)(v4 + 40) )
  {
    v6 = MmSectionToSectionObjectPointers((VOID *)(v8 + 48)) == *(_SECTION_OBJECT_POINTERS **)(v4 + 40);
  }
  _InterlockedExchangeAdd64(a2, 1ui64);
  _InterlockedOr(v11, 0);
  if( a1[6]._bf_0 )
    ExfUnblockPushLock(&a1[6]._bf_0, 0i64);
  return v6;
}

Referenced by:

No references.