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.