CcSetAdditionalCacheAttributesEx

VOID __stdcall CcSetAdditionalCacheAttributesEx(_FILE_OBJECT *FileObject, _BYTE *Flags){
  int v2; 
  _SECTION_OBJECT_POINTERS *SectionObjectPointer; 
  _DWORD *SharedCacheMap; 
  unsigned int v5; 
  INT64 Partition; 
  int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v2 = (int)Flags;
  SectionObjectPointer = FileObject->SectionObjectPointer;
  memset(&LockHandle, 0, sizeof(LockHandle));
  SharedCacheMap = SectionObjectPointer->SharedCacheMap;
  if( !SharedCacheMap[1] )
    KeBugCheckEx(0x34u, 0xC6ui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
  v5 = (unsigned int)Flags >> 1;
  LOBYTE(v5) = v5 & 1;
  if( (SharedCacheMap[38] & 0x2000) == 0 )
    CcSetAdditionalCacheAttributes(FileObject, v5, (v2 & 4) != 0);
  Partition = CcGetPartition(SharedCacheMap);
  KeAcquireInStackQueuedSpinLock((UINT64 *)(Partition + 128), &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.