MiSharePages
VOID __fastcall MiSharePages(INT64 a1, _QWORD *a2, INT64 *a3, _QWORD *a4, INT64 a5){
INT64 *v5;
__int64 v8;
_QWORD *v10;
INT64 v11;
int v12;
unsigned __int64 v13;
UINT64 *v14;
INT64 *v15;
int v16;
INT64 v17;
int v18;
INT64 v19;
int v20;
INT64 v21;
char v22;
UINT64 v23;
unsigned __int8 v24;
UINT8 v25;
INT64 v26;
int v27;
INT64 v28;
INT64 v29;
int v30;
INT64 *v31;
UINT64 v32;
_MMPTE *PteBase;
unsigned __int64 v34;
MMPTE *v35;
MMPTE *v36;
INT64 v37;
unsigned __int64 v38;
_MMPFN *v39;
int v40;
__int64 v41;
unsigned int v42;
__int64 v43;
UNICODE_STRING *v44;
UINT8 v45;
WCHAR *v46;
int v47;
__int64 v48;
__int64 v49;
UINT64 v50;
INT64 v51;
INT64 v52;
RTL_BALANCED_NODE *Address;
unsigned int v54;
__int64 *v55;
UINT64 v56;
BOOL IsZero;
__int64 v58;
__int64 v59;
__int64 v60;
VOID *v61;
UINT64 v62;
__int64 v63;
UINT64 v64;
INT64 *CombineProto;
__int64 v66;
__int64 v67;
INT64 v68;
__int64 v69;
INT64 v70;
__int64 v71;
bool v72;
char v73;
unsigned __int64 UltraMapping;
INT64 v75;
_QWORD *v76;
int v77;
INT64 CombineDomain;
_MI_PAGE_COMBINING_SUPPORT *v79;
_QWORD *v80;
int v81;
char v82;
INT64 a8;
__int64 v84;
UINT64 v85;
int v86;
UINT64 v87;
unsigned int v88;
volatile LONG *v89;
unsigned __int64 v90;
bool v91;
unsigned __int64 *v92;
__int64 v93;
UINT64 v94;
unsigned int v95;
__int64 *v96;
int i;
__int64 v98;
__int64 v99;
_QWORD *v100;
__int64 v101;
UINT64 v102;
unsigned __int64 v103;
_QWORD *v104;
UINT64 *v105;
INT64 v106;
ULONG_PTR BugCheckParameter2;
CHAR a7;
char v109;
char v110;
CHAR *a1a;
UINT64 v112;
UINT64 *v113;
UINT8 v115;
unsigned int InputPfn[3];
int a2a;
unsigned int a2_4;
int v119;
_MI_PAGE_COMBINING_SUPPORT *Pcs;
UINT64 v121;
__int64 v122;
int v123;
int v124;
UINT64 *v125;
INT64 a6;
int v127;
_DWORD a4a[3];
_QWORD *v129;
__int64 v130;
UINT64 v131;
INT64 v132;
INT64 a3a;
UINT64 SpinCount;
INT64 v135;
INT64 v136;
_ETHREAD *CurrentThread;
INT64 *v138;
struct _KLOCK_QUEUE_HANDLE LockHandle;
__int128 v140;
_QWORD *v141;
INT64 v142[2];
__int128 v143;
__int64 v144;
KAPC_STATE ApcState;
int result;
__int16 result_4;
__int64 v148;
__int64 v149;
__int64 v150;
INT64 v151[26];
__int64 v152;
__int64 v153;
__int64 v154[5];
__int64 v155;
*(_QWORD *)&a4a[1] = a1;
v5 = a3;
v144 = 0i64;
v141 = 0i64;
v8 = 0i64;
v135 = 0i64;
v138 = 0i64;
*(_OWORD *)v142 = 0i64;
v143 = 0i64;
memset(&ApcState, 0, sizeof(ApcState));
v140 = 0i64;
memset((INT64)&result, 0i64);
memset((INT64)v151, 0i64);
v10 = *(_QWORD **)(a1 + 24);
a3a = *(_QWORD *)(a1 + 16);
InputPfn[0] = *(_DWORD *)(a1 + 60);
Pcs = (_MI_PAGE_COMBINING_SUPPORT *)*a4;
v11 = a2[4];
*(_QWORD *)&InputPfn[1] = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
v129 = v10;
a2_4 = 0;
v122 = 0i64;
a1a = (CHAR *)v11;
v12 = MiTbFlushType(v11);
v13 = a2[3];
v14 = (UINT64 *)a2[6];
v123 = v12;
v119 = 0;
v124 = 0;
v136 = a1 + 64;
v15 = v151;
a6 = (INT64)v151;
if( v13 <= 0x14 )
{
v16 = v13;
}
else
{
v16 = 509;
if( v13 < 0x1FD )
v16 = v13;
LODWORD(v17) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
a6 = v17;
v15 = (INT64 *)v17;
if( !v17 )
{
v15 = v151;
a6 = (INT64)v151;
v16 = 20;
}
}
v18 = v123;
*((_DWORD *)v15 + 3) = 0;
*((_WORD *)v15 + 2) = 0;
v15[2] = 0i64;
v15[3] = 0i64;
*(_DWORD *)v15 = v18;
*((_DWORD *)v15 + 2) = v16;
v19 = a2[5];
v130 = v19;
if( v19 && v19 != *((_QWORD *)KeGetCurrentThread() + 23) )
{
KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
v124 = MiPrepareAttachThread(v19, v19 + 1664);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( !v124 )
goto LABEL_179;
KeForceAttachProcess((PVOID)v19);
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v20 = a5;
v21 = (INT64)a1a;
while( 2 )
{
v22 = 0;
v152 = 0i64;
v153 = 0i64;
v23 = 0i64;
v154[0] = 0i64;
v24 = 0;
v155 = 0i64;
v112 = 0i64;
v109 = 0;
v25 = MiLockWorkingSetShared(v21);
v115 = v25;
if( v130
&& ((*(_DWORD *)(v130 + 1124) & 0xC00u) < 0xC00 || *(_QWORD *)(v21 + 104) || (unsigned int)MiIsStoreProcess(v130)) )
{
MiUnlockWorkingSetShared(v21, v25);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
v15 = (INT64 *)a6;
goto LABEL_178;
}
while( 1 )
{
v26 = v24;
v24 = 0;
v125 = v14;
if( (_BYTE)v26 != 1 )
v24 = v26;
v27 = 0;
v110 = v24;
if( (_BYTE)v26 != 1 )
v27 = v119 + 1;
v119 = v27;
if( v22 )
{
v109 = 0;
LOBYTE(v26) = 1;
goto LABEL_31;
}
if( (v27 & 7) != 0 )
goto LABEL_28;
if( MiWorkingSetIsContended(v21) )
{
LOBYTE(v26) = 1;
goto LABEL_31;
}
if( v23 && (MiPageTableLockIsContended(v21, v23, v28, v29, v106, BugCheckParameter2, a7), v30) )
{
LOBYTE(v26) = 1;
}
else
{
LABEL_28:
if( KeShouldYieldProcessor() )
LOBYTE(v26) = 1;
else
v26 = (unsigned int)MiFlushTbListEarly(a6, 2) != 0;
}
LABEL_31:
if( !v14 )
break;
if( (_BYTE)v26 )
goto LABEL_159;
v31 = (INT64 *)v14[4];
v32 = v14[1];
v113 = (UINT64 *)v14[2];
v121 = *v14;
v131 = v32;
if( (unsigned __int64)v31 >= 0x100 )
{
v127 = v31[5] & 0x1F;
}
else
{
v127 = (int)v31;
v31 = 0i64;
}
PteBase = MmGetPteBase();
v34 = (unsigned __int64)PteBase + ((v32 >> 9) & 0x7FFFFFFFF8i64);
v132 = v34;
v35 = (_MMPTE *)((char *)PteBase + ((v34 >> 9) & 0x7FFFFFFFF8i64));
if( (MMPTE *)v112 == v35 )
goto LABEL_41;
if( v112 )
{
v21 = (INT64)a1a;
v22 = 1;
v109 = 1;
v23 = v112;
}
else
{
v36 = MiLockLowestValidPageTable((INT64)a1a, (INT64 *)((char *)PteBase + ((v32 >> 9) & 0x7FFFFFFFF8i64)), &v138);
v112 = (UINT64)v36;
if( v36 == v35 )
{
LABEL_41:
if( !(unsigned int)MiRecheckVaVm(v26, v32) )
goto LABEL_53;
v37 = *(_QWORD *)v34;
v135 = v37;
if( (v37 & 1) != 0 )
{
v38 = MI_READ_PTE_LOCK_FREE((INT64)&v135);
if( (*((_QWORD *)MmGetPfnDb() + 6 * ((v38 >> 12) & 0xFFFFFFFFFi64) + 5) & 0x4000000000000i64) == 0 )
goto LABEL_53;
v39 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * ((v38 >> 12) & 0xFFFFFFFFFi64));
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)v39 + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((__int64 *)v39 + 3) < 0 );
}
}
else
{
if( (v37 & 0x400) != 0 )
goto LABEL_53;
if( (v37 & 0x800) == 0 )
goto LABEL_53;
v39 = MiLockTransitionLeafPage((_MMPTE *)v34, 0i64);
if( !v39 )
goto LABEL_53;
}
a4a[0] = MiCombineCandidate(Pcs, (_MMPFN *)InputPfn[0]);
v40 = a4a[0];
if( !a4a[0] )
{
_InterlockedAnd64((volatile signed __int64 *)v39 + 3, 0x7FFFFFFFFFFFFFFFui64);
LABEL_53:
MiDereferenceCombineBlock(a3, v31);
goto LABEL_54;
}
v41 = *((_BYTE *)v39 + 34) & 7;
v42 = (*((_DWORD *)v39 + 4) >> 5) & 0x1F;
a2a = 3;
*(_QWORD *)&InputPfn[1] = v125[3];
LODWORD(v43) = MiSearchNumaNodeTable((PVOID)((v39 - MmGetPfnDb()) / 48));
if( *(_DWORD *)(v43 + 8) != v20 )
{
_InterlockedAnd64((volatile signed __int64 *)v39 + 3, 0x7FFFFFFFFFFFFFFFui64);
LABEL_57:
MiDereferenceCombineBlock(a3, v31);
v24 = v110;
goto LABEL_54;
}
_InterlockedAnd64((volatile signed __int64 *)v39 + 3, 0x7FFFFFFFFFFFFFFFui64);
if( (_BYTE)v41 == 6 )
{
if( v132 != (*((_QWORD *)v39 + 1) | 0x8000000000000000ui64) )
goto LABEL_57;
LOBYTE(v47) = MI_PFN_IS_PROTO((UNICODE_STRING *)v39, v44, v45, v46);
if( v47 )
goto LABEL_57;
v48 = *((_QWORD *)v39 + 5);
if( (v48 & 0x1000000000i64) != 0 )
goto LABEL_57;
if( (*((_BYTE *)v39 + 35) & 8) != 0 )
goto LABEL_57;
v49 = v48 & 0xFFFFFFFFFi64;
if( v49 == 0xFFFFFFFFDi64 )
goto LABEL_57;
v50 = v131;
if( (MiGetWsleContents(v49, v131) & 0xF) == 8 )
goto LABEL_57;
if( *((_WORD *)v39 + 16) != 1 )
goto LABEL_57;
v52 = 0i64;
if( v40 == 1 )
{
Address = MiLocateAddress(v50);
if( !Address
|| MiVadPageSizes[((unsigned __int64)LODWORD(Address[2].Children[0]) >> 18) & 3] == 16
|| !MiVadSupportsPrivateCommit((INT64)Address) )
{
goto LABEL_57;
}
}
v54 = (*((_DWORD *)v39 + 4) >> 5) & 0x1F;
if( v54 != v127 )
goto LABEL_57;
if( (v37 & 0x42) != 0 )
{
if( a2_4 < 8 )
{
v55 = v154;
LABEL_87:
MiInsertTbFlushEntry(a6, v50, 1i64, 0i64);
v58 = (__int64)v125;
v59 = *v55;
v24 = v110;
*v55 = (__int64)v125;
*(_QWORD *)(v58 + 16) = v59;
goto LABEL_54;
}
MiMakeCombineCandidateClean(v51, v52);
result_4 = 0;
v149 = 0i64;
v150 = 0i64;
v148 = 1i64;
result = v123;
MiInsertTbFlushEntry((INT64)&result, v50, 1i64, 0i64);
MiFlushTbList((__int64)&result);
v51 = v132;
v56 = v121;
goto LABEL_75;
}
v56 = v121;
if( v121 == qword_140C4EAD8 )
{
if( ((*((_DWORD *)v39 + 4) >> 5) & 0x18) == 0 && (v37 & 0x20) != 0 && a2_4 < 3 )
{
v55 = &v155;
goto LABEL_87;
}
LABEL_75:
v21 = (INT64)a1a;
if( v56 != qword_140C4EAD8 || !(unsigned int)MiPageMightBeZero((INT64)a1a, (INT64)v39, v51) )
goto LABEL_90;
HIDWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)v39 + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx((UINT64 *)((char *)&SpinCount + 4));
while( *((__int64 *)v39 + 3) < 0 );
}
IsZero = MiConfirmPageIsZero((INT64)v39);
_InterlockedAnd64((volatile signed __int64 *)v39 + 3, 0x7FFFFFFFFFFFFFFFui64);
if( !IsZero )
goto LABEL_90;
v149 = 0i64;
v150 = 0i64;
v148 = 1i64;
result = v123;
result_4 = 4;
MiInsertTbFlushEntry((INT64)&result, v50, 1i64, 0i64);
MiFreeWsleList((INT64)a1a, (INT64)&result, 0);
++v122;
++v129[1];
MiDereferenceCombineBlock(a3, v31);
v24 = v110;
v14 = v113;
v23 = v112;
v22 = v109;
}
else
{
v21 = (INT64)a1a;
LABEL_90:
v24 = v110;
if( (v54 & 0x18) != 0 )
v24 = 1;
v110 = v24;
if( *(_QWORD *)&InputPfn[1] == qword_140C4E290
|| v40 != 1
|| *(_QWORD *)&InputPfn[1] == *(_QWORD *)(v21 + 864) && (*(_DWORD *)(v130 + 2516) & 0x1000) == 0 )
{
v60 = -1i64;
if( v31 )
{
LODWORD(v66) = a2a;
LABEL_111:
v69 = (__int64)v125;
goto LABEL_112;
}
v61 = (VOID *)v131;
v62 = MiComputeHash64((UINT64 *)v131);
if( v62 != v64 )
goto LABEL_54;
if( v63 == qword_140C4E290 )
{
if( !MiHashIsCommon(*(INT64 *)&a4a[1], v64, v61) )
goto LABEL_54;
v64 = v121;
}
LODWORD(v106) = 0;
CombineProto = MiAllocateCombineProto((INT64)Pcs, v64, v54, &InputPfn[1], v106);
v31 = CombineProto;
if( !CombineProto )
{
v31 = MiPopCombineBlock((_QWORD **)a3);
if( !v31 )
goto LABEL_54;
v66 = (int)MiProtectionToCacheAttribute(v54);
v67 = *(_QWORD *)(v136 + 8 * v66);
if( !v67 || *(_DWORD *)(v67 + 44) >= *(_DWORD *)(v67 + 40) )
{
v68 = *a3;
if( *(INT64 **)(*a3 + 8) != a3 )
__fastfail(3u);
*v31 = v68;
v31[1] = (INT64)a3;
*(_QWORD *)(v68 + 8) = v31;
*a3 = (INT64)v31;
goto LABEL_54;
}
*((_DWORD *)v31 + 10) = v54 | v31[5] & 0xFFFFFFE0;
v31[8] = *(_QWORD *)&InputPfn[1];
v60 = *(_QWORD *)(v67 + 8 * ((unsigned __int64)*(unsigned int *)(v67 + 44) >> 12) + 48);
goto LABEL_111;
}
v69 = (__int64)v125;
LODWORD(v66) = a2a;
v125[4] = (UINT64)CombineProto;
LABEL_112:
v70 = MiConvertPrivateToProto((INT64)a1a, v132, (__int64)v31, InputPfn[0], &Pcs->Partition, a6, v60);
if( !v70 )
goto LABEL_53;
++v129[1];
if( v60 == -1 )
{
v31 = 0i64;
++v122;
}
else
{
MiIncrementCombineMdl(*(INT64 *)&a4a[1], (unsigned int)v66);
}
v71 = v152;
*(_QWORD *)(v69 + 8) = v70;
v72 = v60 != -1;
*(_QWORD *)(v69 + 16) = v71;
v152 = v69;
LABEL_144:
if( v72 )
{
v85 = v121;
v86 = *((_DWORD *)v31 + 10);
v87 = v121 & 0xF;
v31[3] = v121;
*(_QWORD *)&v140 = v85;
v88 = v86 & 0x1F;
v89 = (volatile LONG *)((char *)Pcs + 16 * (unsigned int)v87);
DWORD2(v140) = v88;
v141 = v31 + 8;
v90 = ExAcquireSpinLockExclusive(v89 + 26);
v91 = 0;
v92 = (unsigned __int64 *)&Pcs->CombinePageListHeads[v87];
v93 = *v92;
if( *v92 )
{
while( 1 )
{
while( 1 )
{
v94 = *(_QWORD *)(v93 + 24);
if( v121 > v94 )
break;
if( v121 >= v94 )
{
v95 = *(_DWORD *)(v93 + 40) & 0x1F;
if( v88 > v95
|| v88 >= v95
&& (v31 == (INT64 *)-64i64 || (unsigned __int64)v31[8] >= *(_QWORD *)(v93 + 64)) )
{
break;
}
}
if( !*(_QWORD *)v93 )
goto LABEL_157;
v93 = *(_QWORD *)v93;
}
if( !*(_QWORD *)(v93 + 8) )
break;
v93 = *(_QWORD *)(v93 + 8);
}
v91 = 1;
}
LABEL_157:
RtlAvlInsertNodeEx(v92, v93, v91, v31);
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v89 + 13);
__writecr8(v90);
v24 = v110;
}
LABEL_54:
v14 = v113;
v23 = v112;
v22 = v109;
v21 = (INT64)a1a;
}
else
{
MiDereferenceCombineBlock(a3, v31);
v14 = v113;
v23 = v112;
v22 = v109;
}
}
}
else
{
v73 = 0;
UltraMapping = MiGetUltraMapping((unsigned __int64 *)(*(_QWORD *)&a4a[1] + 208i64), 3u, 1i64, 0);
v75 = a4a[0];
v76 = (_QWORD *)((char *)MmGetPteBase() + ((UltraMapping >> 9) & 0x7FFFFFFFF8i64));
v77 = 1;
v21 = (INT64)a1a;
if( *(_QWORD *)&InputPfn[1] == qword_140C4E290
|| a4a[0] != 1
|| (CombineDomain = MiGetCombineDomain(1i64, (INT64)a1a), *(_QWORD *)&InputPfn[1] == CombineDomain)
&& (*(_DWORD *)(v130 + 2516) & 0x1000) == 0 )
{
if( v76 )
{
v79 = Pcs;
v80 = (_QWORD *)a3a;
LODWORD(v106) = v77;
*(_QWORD *)(a3a + 72) = v76;
v80[8] = v39;
MiMapArbitraryPage(v79, v80, InputPfn[0], v75, v106);
if( !v81 )
{
*v76 = ZeroPte;
goto LABEL_57;
}
v82 = v110;
if( (v42 & 0x18) != 0 )
v82 = 1;
v110 = v82;
a8 = -1i64;
if( !v31 )
{
if( !(unsigned int)MiPerformCombineScan(
*(INT64 *)&a4a[1],
a3a,
*(_QWORD *)&InputPfn[1] == qword_140C4E290,
v142)
|| v142[0] != v121 )
{
goto LABEL_141;
}
LODWORD(v106) = 0;
v31 = MiAllocateCombineProto((INT64)Pcs, v121, v42, &InputPfn[1], v106);
if( !v31 )
{
v31 = MiPopCombineBlock((_QWORD **)a3);
if( v31 )
{
a2a = MiProtectionToCacheAttribute(v42);
v84 = *(_QWORD *)(v136 + 8i64 * a2a);
if( v84 )
{
if( *(_DWORD *)(v84 + 44) < *(_DWORD *)(v84 + 40) )
{
*((_DWORD *)v31 + 10) = v42 | v31[5] & 0xFFFFFFE0;
v31[8] = *(_QWORD *)&InputPfn[1];
a8 = *(_QWORD *)(v84 + 8 * ((unsigned __int64)*(unsigned int *)(v84 + 44) >> 12) + 48);
goto LABEL_137;
}
}
}
LABEL_141:
v72 = 0;
LABEL_142:
MiReleaseArbitraryPage(a3a);
*v76 = ZeroPte;
if( !v73 )
goto LABEL_57;
v24 = v110;
goto LABEL_144;
}
v125[4] = (UINT64)v31;
}
LABEL_137:
if( !(unsigned int)MiConvertStandbyToProto(
a1a,
Pcs,
a3a,
InputPfn[0],
(INT64)v31,
(UINT64)v39,
v132,
a8) )
goto LABEL_141;
++v129[1];
if( a8 == -1 )
{
v31 = 0i64;
v73 = 1;
++v122;
v72 = 0;
}
else
{
MiIncrementCombineMdl(*(INT64 *)&a4a[1], (unsigned int)a2a);
v72 = 1;
v73 = 1;
}
goto LABEL_142;
}
}
MiDereferenceCombineBlock(a3, v31);
v24 = v110;
v14 = v113;
v23 = v112;
v22 = v109;
}
}
else
{
v21 = (INT64)a1a;
MiUnlockPageTable((INT64)a1a, (UINT64)v36);
v23 = 0i64;
v112 = 0i64;
MiDereferenceCombineBlock(a3, v31);
v14 = v113;
v22 = v109;
}
}
}
++a2_4;
LABEL_159:
v96 = v154;
v131 = (UINT64)v154;
for( i = 2; i <= 3; ++i )
{
v98 = *v96;
if( *v96 )
{
do
{
v99 = *(_QWORD *)(v98 + 16);
if( (unsigned int)MiCrcStillIntact(Pcs, (__int64)a1a, InputPfn[0], v98, i) )
{
*(_QWORD *)(v98 + 16) = v14;
v14 = (UINT64 *)v98;
}
else
{
v100 = *(_QWORD **)(v98 + 32);
if( (unsigned __int64)v100 >= 0x100 )
MiDereferenceCombineBlock(a3, v100);
}
v98 = v99;
}
while( v99 );
v96 = (__int64 *)v131;
}
*v96 = 0i64;
v96 += 5;
v131 = (UINT64)v96;
}
v15 = (INT64 *)a6;
v20 = a5;
MiFlushTbList(a6);
v21 = (INT64)a1a;
if( v112 )
MiUnlockPageTable((INT64)a1a, v112);
MiUnlockWorkingSetShared((INT64)a1a, v115);
v101 = v152;
if( v152 )
{
do
{
v102 = *(_QWORD *)(v101 + 8);
v103 = (unsigned __int8)MiLockPageInline(v102);
*(_BYTE *)(v102 + 34) = *(_BYTE *)(v102 + 34) & 0xF8 | 6;
MiDecrementShareCount(v102);
_InterlockedAnd64((volatile signed __int64 *)(v102 + 24), 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v103);
v101 = *(_QWORD *)(v101 + 16);
}
while( v101 );
v20 = a5;
v21 = (INT64)a1a;
}
if( v14 )
{
v5 = a3;
continue;
}
break;
}
KeLeaveCriticalRegionThread((__int64)CurrentThread);
v5 = a3;
LABEL_178:
v19 = v130;
v10 = v129;
v8 = v122;
LABEL_179:
if( v14 )
{
do
{
v104 = (_QWORD *)v14[4];
v105 = (UINT64 *)v14[2];
if( (unsigned __int64)v104 >= 0x100 )
MiDereferenceCombineBlock(v5, v104);
v14 = v105;
}
while( v105 );
}
if( v124 == 1 )
{
KeForceDetachProcess(&ApcState, 0);
MiAttachThreadDone((_MMSUPPORT_INSTANCE *)(v19 + 1664));
}
if( v15 != v151 )
ExFreePoolWithTag(v15, 0);
*v10 += v8;
}Referenced by:
MiProcessCrcList