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