CcSetAdditionalCacheAttributesEx

VOID __stdcall CcSetAdditionalCacheAttributesEx(_FILE_OBJECT *FileObject, UINT64 Flags){
  int v2; 
  _SECTION_OBJECT_POINTERS *SectionObjectPointer; 
  _DWORD *SharedCacheMap; 
  bool v5; 
  unsigned __int64 *Partition; 
  int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v2 = Flags;
  SectionObjectPointer = FileObject->SectionObjectPointer;
  memset(&LockHandle, 0, sizeof(LockHandle));
  SharedCacheMap = SectionObjectPointer->SharedCacheMap;
  if( !SharedCacheMap[1] )
    KeBugCheckEx(0x34u, (PVOID)0xC6, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
  v5 = (Flags & 2) != 0;
  if( (SharedCacheMap[38] & 0x2000) == 0 )
    CcSetAdditionalCacheAttributes(FileObject, v5, (v2 & 4) != 0);
  Partition = (unsigned __int64 *)CcGetPartition(SharedCacheMap);
  KeAcquireInStackQueuedSpinLock(Partition + 16, &LockHandle);
  v7 = SharedCacheMap[38];
  if( (v2 & 1) != 0 )
    v8 = v7 | 0x800000;
  else
    v8 = v7 & 0xFF7FFFFF;
  SharedCacheMap[38] = v8;
  if( (v2 & 8) != 0 )
  {
    v9 = v8 | 0x4000000;
  }
  else
  {
    if( (v8 & 0x4000000) != 0 )
      v8 |= 0x20000u;
    v9 = v8 & 0xFBFFFFFF;
  }
  if( (v2 & 0x10) != 0 )
    v10 = v9 | 0x10000000;
  else
    v10 = v9 & 0xEFFFFFFF;
  SharedCacheMap[38] = v10;
  if( (v2 & 0x20) != 0 )
    v11 = v10 | 0x8000000;
  else
    v11 = v10 & 0xF7FFFFFF;
  SharedCacheMap[38] = v11;
  if( (v2 & 0x10000000) != 0 )
    v12 = v11 | 0x1000;
  else
    v12 = v11 & 0xFFFFEFFF;
  SharedCacheMap[38] = v12;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

No references.