CcInitializeCacheMapEx
VOID __stdcall CcInitializeCacheMapEx(
FILE_OBJECT *FileObject,
CC_FILE_SIZES *FileSizes,
UINT8 PinAccess,
CACHE_MANAGER_CALLBACKS *Callbacks,
PVOID LazyWriteContext,
UINT64 Flags){
_ETHREAD *CurrentThread;
char *Context;
_LIST_ENTRY *Partition;
__int128 v10;
LARGE_INTEGER AllocationSize;
int v12;
ULONG v13;
WORK_QUEUE_TYPE v14;
void *v15;
char *SharedCacheMap;
_LIST_ENTRY **FileObjectExtension;
_LIST_ENTRY *v18;
void *v19;
int v20;
int v21;
UINT64 *v22;
unsigned int v23;
__int16 v24;
int v25;
unsigned __int64 v26;
_QWORD *v27;
int v28;
void *IoObject;
int PagePriorityThread;
_QWORD *v31;
int v32;
void **v33;
int v34;
int v35;
__int64 v36;
NTSTATUS v37;
char *v38;
unsigned int Routine;
NTSTATUS CacheManagerSection;
__int64 v41;
LARGE_INTEGER v42;
_QWORD *v43;
_LIST_ENTRY *v44;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v46;
_LIST_ENTRY *v47;
_SECTION_OBJECT_POINTERS *SectionObjectPointer;
__int64 v49;
bool v50;
_BYTE *FsContext;
WORK_QUEUE_TYPE v52;
PVOID v53;
struct _KEVENT *v54;
WORK_QUEUE_TYPE v55;
PVOID v56;
int v57;
unsigned __int64 OldIrql;
_QWORD *v59;
WORK_QUEUE_TYPE v60;
PVOID v61;
int Parameter_high;
char *PoolWithTag;
_QWORD *v64;
int v65;
int v66;
char v67;
unsigned int v68;
int Parameter;
char v70;
int v71;
struct _KEVENT *v72;
unsigned __int64 v73;
__int64 v74;
struct _KLOCK_QUEUE_HANDLE LockHandle;
struct _IO_WORKITEM v76;
LARGE_INTEGER ValidDataLength;
__int64 v78;
char v79;
NTSTATUS Status;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
Context = 0i64;
Partition = 0i64;
v78 = *((_QWORD *)CurrentThread + 23);
v79 = 0;
memset(&v76.IoObject, 0, 20);
Status = 0;
*(_QWORD *)&v76.Type = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
memset(&v76, 0, 36);
if( CcDbgDisableDAX )
HIDWORD(v76.Routine) = Flags & 0xFFFFFFFE;
else
HIDWORD(v76.Routine) = Flags;
v10 = *(_OWORD *)&FileSizes->AllocationSize.LowPart;
AllocationSize = FileSizes->AllocationSize;
ValidDataLength = FileSizes->ValidDataLength;
*(_OWORD *)&v76.ActivityId.Data2 = __PAIR128__(*((unsigned __int64 *)&v10 + 1), AllocationSize.QuadPart);
if( !AllocationSize.QuadPart )
{
*(_DWORD *)&v76.ActivityId.Data2 = 1;
AllocationSize.QuadPart = 1i64;
}
v12 = *((_DWORD *)CurrentThread + 29) & 0x400;
if( FileObject->WriteAccess )
{
*(_QWORD *)&v76.ActivityId.Data2 = AllocationSize.QuadPart + 0xFFFFF;
v13 = (AllocationSize.LowPart + 0xFFFFF) & 0xFFF00000;
}
else
{
*(_QWORD *)&v76.ActivityId.Data2 = AllocationSize.QuadPart + 0x3FFFF;
v13 = (AllocationSize.LowPart + 0x3FFFF) & 0xFFFC0000;
}
*(_DWORD *)&v76.ActivityId.Data2 = v13;
if( !FileObject->SectionObjectPointer->SharedCacheMap )
goto LABEL_56;
while( 1 )
{
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
if( FileObject->PrivateCacheMap )
break;
SharedCacheMap = (char *)FileObject->SectionObjectPointer->SharedCacheMap;
if( SharedCacheMap )
{
Partition = (_LIST_ENTRY *)CcGetPartition((_QWORD *)FileObject->SectionObjectPointer->SharedCacheMap);
FileObjectExtension = (_LIST_ENTRY **)IopGetFileObjectExtension(FileObject, FoExtTypeMemoryPartitionInfo, 0i64);
if( FileObjectExtension && *FileObjectExtension != Partition->Blink )
{
v76.WorkItem.List.Flink = v18;
v76.WorkItem.List.Blink = Partition + 8;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)&Partition[8], (WORK_QUEUE_TYPE)v18, v19);
v57 = *((_DWORD *)SharedCacheMap + 1);
if( !v57 || v57 == *((_DWORD *)SharedCacheMap + 134) )
{
Status = -1073741608;
CcScheduleLazyWriteScan((UINT8)Partition, 1u);
v79 = 1;
}
else
{
Status = -1073740277;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
OldIrql = LockHandle.OldIrql;
goto LABEL_127;
}
v76.WorkItem.List.Flink = v18;
v76.WorkItem.List.Blink = Partition + 8;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)&Partition[8], (WORK_QUEUE_TYPE)v18, v19);
if( (FileObject->Flags & 0x20) == 0 )
*((_DWORD *)SharedCacheMap + 38) &= ~0x40u;
v20 = *((_DWORD *)SharedCacheMap + 38);
if( (v20 & 0x200000) != 0 && v12 )
*((_DWORD *)SharedCacheMap + 38) = v20 & 0xFFDFFFFF;
v21 = *(_DWORD *)(v78 + 1524);
if( v21 )
*((_DWORD *)SharedCacheMap + 128) = v21;
LABEL_18:
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
Partition = (_LIST_ENTRY *)CcGetPartition(SharedCacheMap);
v22 = (UINT64 *)&Partition[8];
KeAcquireInStackQueuedSpinLock((UINT64 *)&Partition[8], (KLOCK_QUEUE_HANDLE *)&v76);
if( (_BYTE)KdDebuggerEnabled && !(_BYTE)KdDebuggerNotPresent && (*((_DWORD *)SharedCacheMap + 38) & 0x80000) != 0 )
{
DbgPrint("CC: Reusing shared cache map that is already marked for deletion!\n");
__debugbreak();
}
v23 = *((_DWORD *)SharedCacheMap + 38) & 0xFFFFFFEF;
v24 = *((_WORD *)SharedCacheMap + 76) & 0xFFEF;
*((_DWORD *)SharedCacheMap + 38) = v23;
v25 = v24 & 0x100;
if( *((_QWORD *)SharedCacheMap + 11) )
{
if( !v25 )
{
++*((_DWORD *)SharedCacheMap + 1);
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
v26 = LockHandle.OldIrql;
goto LABEL_22;
}
LABEL_108:
if( !*((_QWORD *)SharedCacheMap + 22) )
{
PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x18ui64, 0x76456343ui64);
*((_QWORD *)SharedCacheMap + 22) = PoolWithTag;
if( !PoolWithTag )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
v37 = -1073741670;
Status = -1073741670;
goto LABEL_128;
}
*(_WORD *)PoolWithTag = 0;
PoolWithTag[2] = 6;
*((_DWORD *)PoolWithTag + 1) = 0;
v64 = PoolWithTag + 8;
v64[1] = v64;
*v64 = v64;
}
++*((_DWORD *)SharedCacheMap + 1);
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
KeWaitForSingleObject(*((PVOID *)SharedCacheMap + 22), Executive, 0, 0, 0i64);
v65 = *((_DWORD *)SharedCacheMap + 39);
if( v65 < 0 )
{
FsRtlIsNtstatusExpected((unsigned int)v65);
Parameter_high = HIDWORD(v76.WorkItem.Parameter);
v66 = -1073741590;
if( v67 )
v66 = v65;
v37 = v66;
LABEL_131:
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
KeAcquireInStackQueuedSpinLock((UINT64 *)&Partition[8], (KLOCK_QUEUE_HANDLE *)&v76);
if( Parameter_high )
{
v72 = (struct _KEVENT *)*((_QWORD *)SharedCacheMap + 22);
if( v72 )
KeSetEvent(v72, 0);
*((_DWORD *)SharedCacheMap + 38) &= ~0x100u;
}
v50 = (*((_DWORD *)SharedCacheMap + 1))-- == 1;
if( !v50 || (*((_DWORD *)SharedCacheMap + 38) & 0x20) != 0 || *((_DWORD *)SharedCacheMap + 28) )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
IoObject = v76.IoObject;
}
else
{
CcDeleteSharedCacheMap(SharedCacheMap, &LockHandle, (KLOCK_QUEUE_HANDLE *)&v76, 0i64, 0i64);
IoObject = v76.IoObject;
}
goto LABEL_48;
}
LABEL_23:
if( Context )
{
ExFreePoolWithTag(Context, 0x63536343u);
v76.Context = 0i64;
}
v27 = SharedCacheMap + 376;
if( *((_WORD *)SharedCacheMap + 188) )
goto LABEL_88;
while( 1 )
{
v28 = 1;
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
KeAcquireInStackQueuedSpinLock(v22, (KLOCK_QUEUE_HANDLE *)&v76);
if( FileObject->PrivateCacheMap )
break;
if( !*(_WORD *)v27 )
{
IoObject = v76.IoObject;
goto LABEL_29;
}
if( v76.IoObject )
{
v27 = v76.IoObject;
IoObject = 0i64;
LABEL_29:
memset((INT64)v27, 0i64);
v27[1] = FileObject;
*(_WORD *)v27 = 766;
*((_DWORD *)v27 + 1) = 4095;
PagePriorityThread = (unsigned __int8)PsGetPagePriorityThread((__int64)CurrentThread);
v31 = v27 + 12;
v32 = (*(_DWORD *)v27 ^ (PagePriorityThread << 18)) & 0x1C0000;
v27[10] = 0i64;
*(_DWORD *)v27 ^= v32;
v33 = (void **)*((_QWORD *)SharedCacheMap + 29);
if( *v33 == SharedCacheMap + 224 )
{
*v31 = SharedCacheMap + 224;
v27[13] = v33;
*v33 = v31;
*((_QWORD *)SharedCacheMap + 29) = v31;
FileObject->PrivateCacheMap = v27;
goto LABEL_31;
}
LABEL_117:
__fastfail(3u);
}
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
LABEL_88:
v76.IoObject = ExAllocatePoolWithTag(NonPagedPoolNx, 0x78ui64, 0x63506343ui64);
if( !v76.IoObject )
{
v37 = -1073741670;
Parameter = 1;
Status = -1073741670;
goto LABEL_129;
}
}
v68 = *((_DWORD *)SharedCacheMap + 1);
if( v68 <= 1 )
KeBugCheckEx(0x34u, 0x7DCui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
IoObject = v76.IoObject;
*((_DWORD *)SharedCacheMap + 1) = v68 - 1;
goto LABEL_44;
}
if( v25 )
goto LABEL_108;
++*((_DWORD *)SharedCacheMap + 1);
*((_DWORD *)SharedCacheMap + 38) = v23 | 0x100;
v49 = *((_QWORD *)SharedCacheMap + 22);
if( v49 )
{
*(_WORD *)v49 = 0;
*(_BYTE *)(v49 + 2) = 6;
*(_DWORD *)(v49 + 4) = 0;
v59 = (_QWORD *)(v49 + 8);
v59[1] = v59;
*v59 = v59;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
v50 = *((_QWORD *)SharedCacheMap + 21) == 0i64;
HIDWORD(v76.WorkItem.Parameter) = 1;
if( v50 )
{
if( !*(_QWORD *)&v76.Type )
KeBugCheckEx(0x34u, 0x68Cui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
*((_QWORD *)SharedCacheMap + 21) = *(_QWORD *)&v76.Type;
FsContext = FileObject->FsContext;
*(_QWORD *)&v76.Type = 0i64;
if( (FsContext[6] & 1) == 0 && !FileObject->FsContext2 )
{
MmDisableModifiedWriteOfSection(FileObject->SectionObjectPointer);
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
v76.WorkItem.List.Blink = Partition + 8;
v76.WorkItem.List.Flink = 0i64;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)v22, v55, v56);
*((_DWORD *)SharedCacheMap + 38) |= 0x200u;
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
Status = CcCreateVacbArray((_SHARED_CACHE_MAP *)SharedCacheMap, *(_LARGE_INTEGER *)&v76.ActivityId.Data2);
v37 = Status;
if( Status >= 0 )
{
if( (BYTE4(v76.Routine) & 1) != 0 )
{
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
v76.WorkItem.List.Blink = Partition + 8;
v76.WorkItem.List.Flink = 0i64;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)v22, v60, v61);
*((_DWORD *)SharedCacheMap + 38) |= 0x40000000u;
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
v76.WorkItem.List.Blink = Partition + 8;
v76.WorkItem.List.Flink = 0i64;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)v22, v52, v53);
v54 = (struct _KEVENT *)*((_QWORD *)SharedCacheMap + 22);
*((_DWORD *)SharedCacheMap + 38) &= ~0x100u;
if( v54 )
KeSetEvent(v54, 0);
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
v26 = LockHandle.OldIrql;
LABEL_22:
__writecr8(v26);
goto LABEL_23;
}
}
else
{
v37 = -1073741811;
}
Parameter_high = HIDWORD(v76.WorkItem.Parameter);
goto LABEL_131;
}
if( Context )
{
SharedCacheMap = Context;
Context = 0i64;
v76.Context = 0i64;
v44 = (_LIST_ENTRY *)*((_QWORD *)SharedCacheMap + 66);
v76.WorkItem.List.Flink = 0i64;
v76.WorkItem.List.Blink = v44 + 8;
KxAcquireQueuedSpinLock(&v76, (PIO_WORKITEM_ROUTINE)&v44[8], v14, v15);
Blink = v44[1].Blink;
v46 = (_LIST_ENTRY *)(SharedCacheMap + 136);
v47 = v44 + 1;
if( Blink->Flink != v47 )
goto LABEL_117;
*((_QWORD *)SharedCacheMap + 18) = Blink;
v46->Flink = v47;
Blink->Flink = v46;
v47->Blink = v46;
SectionObjectPointer = FileObject->SectionObjectPointer;
LODWORD(v76.WorkOnBehalfThread) = 1;
SectionObjectPointer->SharedCacheMap = SharedCacheMap;
ObfReferenceObjectWithTag(FileObject, 0x746C6644u);
goto LABEL_18;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
LABEL_56:
v38 = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x228ui64, 0x63536343ui64);
SharedCacheMap = v38;
if( !v38 )
LABEL_146:
RtlRaiseStatus(-1073741670);
memset((INT64)v38, 0i64);
Context = SharedCacheMap;
Routine = (unsigned int)v76.Routine;
v76.Context = SharedCacheMap;
if( (BYTE4(v76.Routine) & 1) != 0 )
{
Routine = LODWORD(v76.Routine) | 1;
LODWORD(v76.Routine) |= 1u;
}
CacheManagerSection = MmCreateCacheManagerSection(
(PVOID *)&v76.Type,
*(LARGE_INTEGER **)&v76.ActivityId.Data2,
Routine,
FileObject);
Status = CacheManagerSection;
if( CacheManagerSection == -1073740277 )
{
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
v71 = -1073740277;
if( CcSectionDeletionSequencePhase3 != CcSectionDeletionSequencePhase1 )
v71 = -1073700856;
Status = v71;
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
OldIrql = LockHandle.OldIrql;
LABEL_127:
__writecr8(OldIrql);
v37 = Status;
LABEL_128:
Parameter = (int)v76.WorkItem.Parameter;
LABEL_129:
Parameter_high = 0;
v28 = 0;
if( Parameter )
{
Context = (char *)v76.Context;
goto LABEL_131;
}
IoObject = v76.IoObject;
LABEL_31:
v34 = v28;
v35 = v28;
if( SharedCacheMap )
{
if( !v28 )
{
KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
v28 = 1;
}
if( Partition && !v34 )
{
KeAcquireInStackQueuedSpinLock((UINT64 *)&Partition[8], (KLOCK_QUEUE_HANDLE *)&v76);
v35 = 1;
}
if( !LODWORD(v76.WorkOnBehalfThread) && !*((_DWORD *)SharedCacheMap + 28) && *((_DWORD *)SharedCacheMap + 1) )
CcInsertIntoCleanSharedCacheMapList((_SHARED_CACHE_MAP *)SharedCacheMap);
v36 = *((_QWORD *)SharedCacheMap + 34);
if( v36 )
{
do
{
v73 = v36 & 0xFFFFFFFFFFFFFFFEui64;
v74 = *(_QWORD *)v73;
KeSetEvent((PRKEVENT)(v73 + 8), 0);
v36 = v74;
}
while( v74 );
}
*((_DWORD *)SharedCacheMap + 38) &= ~0x10000u;
*((_QWORD *)SharedCacheMap + 34) = 0i64;
}
if( v35 )
{
LABEL_44:
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&v76);
__writecr8(LOBYTE(v76.WorkItem.WorkerRoutine));
}
if( v28 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
v37 = Status;
Context = (char *)v76.Context;
LABEL_48:
if( Context )
ExFreePoolWithTag(Context, 0x63536343u);
if( IoObject )
ExFreePoolWithTag(IoObject, 0x63506343u);
if( *(_QWORD *)&v76.Type )
ObDereferenceObjectDeferDeleteWithTag(*(PVOID *)&v76.Type, 0x746C6644ui64);
if( v37 < 0 )
{
if( v79 )
KeDelayExecutionThread(0, 0, &Cc10Milliseconds);
RtlRaiseStatus(v37);
}
return;
}
if( CacheManagerSection < 0 )
{
v37 = CacheManagerSection;
FsRtlIsNtstatusExpected((unsigned int)CacheManagerSection);
v50 = v70 == 0;
Parameter = (int)v76.WorkItem.Parameter;
if( v50 )
{
v37 = -1073741590;
Status = -1073741590;
}
goto LABEL_129;
}
ObDeleteCapturedInsertInfo(*(PVOID *)&v76.Type);
Partition = (_LIST_ENTRY *)CcGetPartitionWithCreate(*(_QWORD *)(*(_QWORD *)(qword_140C4E388
+ 8i64
* (*((_WORD *)FileObject->SectionObjectPointer->DataSectionObject
+ 30) & 0x3FF))
+ 176i64));
if( !Partition )
{
v37 = -1073741670;
Status = -1073741670;
goto LABEL_128;
}
v41 = *(_QWORD *)&v76.ActivityId.Data4[4];
*(_DWORD *)SharedCacheMap = 36176639;
*((_QWORD *)SharedCacheMap + 12) = FileObject;
*((_QWORD *)SharedCacheMap + 1) = v41;
v42 = ValidDataLength;
*((LARGE_INTEGER *)SharedCacheMap + 5) = ValidDataLength;
*((LARGE_INTEGER *)SharedCacheMap + 6) = v42;
*((_DWORD *)SharedCacheMap + 128) = *(_DWORD *)(v78 + 1524);
*((_QWORD *)SharedCacheMap + 66) = Partition;
Status = CcInitializeVolumeCacheMap((INT64)FileObject, (INT64 **)SharedCacheMap + 63);
if( Status < 0 )
goto LABEL_146;
*((_DWORD *)SharedCacheMap + 70) = 1;
*((_QWORD *)SharedCacheMap + 36) = 0i64;
*((_DWORD *)SharedCacheMap + 74) = 0;
*((_WORD *)SharedCacheMap + 152) = 1;
SharedCacheMap[306] = 6;
*((_DWORD *)SharedCacheMap + 77) = 0;
*((_QWORD *)SharedCacheMap + 40) = SharedCacheMap + 312;
*((_QWORD *)SharedCacheMap + 39) = SharedCacheMap + 312;
*((_QWORD *)SharedCacheMap + 13) = 0i64;
if( PinAccess )
*((_DWORD *)SharedCacheMap + 38) |= 4u;
if( (FileObject->Flags & 0x20) != 0 )
*((_DWORD *)SharedCacheMap + 38) |= 0x40u;
if( !v12 )
*((_DWORD *)SharedCacheMap + 38) |= 0x200000u;
*((_QWORD *)SharedCacheMap + 27) = LazyWriteContext;
*((_QWORD *)SharedCacheMap + 3) = SharedCacheMap + 16;
*((_QWORD *)SharedCacheMap + 2) = SharedCacheMap + 16;
*((_QWORD *)SharedCacheMap + 26) = Callbacks;
v43 = SharedCacheMap + 224;
v43[1] = v43;
*v43 = v43;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( Context )
ExFreePoolWithTag(Context, 0x63536343u);
}Referenced by:
CcInitializeCacheMap