MiQueryAddressState
__int64 __fastcall MiQueryAddressState(
unsigned __int64 a1,
unsigned __int64 a2,
unsigned __int8 a3,
ULONG_PTR a4,
__int64 a5,
int *a6,
int *a7,
_WORD *a8,
_QWORD *a9,
int *a10){
unsigned __int64 v10;
unsigned __int8 v11;
INT64 v12;
unsigned __int64 v13;
__int64 v14;
_MMPTE *PteBase;
INT64 v16;
unsigned __int64 v17;
unsigned __int64 v18;
__int64 v19;
BOOL v20;
_MMPTE *v21;
unsigned __int64 v22;
unsigned __int64 v23;
_MMPTE *PteLimit;
CHAR *AnyMultiplexedVm;
int v26;
unsigned int v27;
INT64 v28;
unsigned __int64 v29;
UINT64 v30;
unsigned __int64 v31;
__int64 v32;
unsigned __int64 v33;
int v34;
int v35;
unsigned int v36;
_MMPTE *Pml4eBase;
unsigned int v38;
UINT64 v39;
INT64 v40;
unsigned int v41;
__int64 v42;
ULONG_PTR v43;
UINT64 *v44;
INT64 ***LockedVadEvent;
INT16 **v46;
UINT64 v47;
UINT64 v48;
INT64 v49;
INT64 v50;
INT64 v51;
INT64 v52;
unsigned __int64 v53;
__int64 v54;
unsigned __int64 v55;
unsigned __int64 v56;
ULONG_PTR v57;
_QWORD *v58;
int v59;
unsigned __int64 v60;
unsigned __int64 v61;
INT64 v62;
unsigned __int64 v63;
UINT64 v64;
__int64 v65;
__int64 v66;
UINT64 v67;
__int64 v68;
unsigned int SessionId;
__int64 *SharedProtos;
unsigned __int64 v71;
unsigned __int64 v72;
__int16 v73;
__int64 v74;
unsigned __int64 v75;
unsigned __int64 v76;
unsigned __int64 v77;
char v78;
struct _KPRCB *CurrentPrcb;
bool v80;
__int64 v81;
_MMPTE *Pml4eLimit;
__int64 v83;
int v84;
CHAR *PageTableLockBuffer;
LONG *v86;
struct _KPRCB *v87;
int v88;
int v89;
__int64 v90;
INT64 v91;
ULONG_PTR v92;
__int16 v93;
unsigned int v94;
NTSTATUS ProtectionFromPte;
UINT64 LeafVa;
__int64 result;
int *v98;
int v99;
CHAR v100;
INT16 v102;
int v103;
int v104;
INT64 a1a;
INT64 v106;
INT16 v107;
_DWORD v108[3];
ULONG_PTR BugCheckParameter3;
ULONG_PTR BugCheckParameter2;
int v111;
UINT64 v112;
unsigned int v113;
int v114;
INT64 v115;
unsigned int v116;
int a3a;
unsigned __int64 v118;
unsigned __int64 v119;
__int64 v120;
_QWORD *v121;
int *v122;
int *v123;
_WORD *v124;
__int128 v125;
__int64 v126;
int *v127;
INT64 v128;
__int16 v129;
_BYTE v130[14];
__int64 v131;
CHAR *v132;
unsigned __int64 v133;
__int64 v134;
INT64(__fastcall *v135)(INT64);
__int128 *v136;
v10 = a1;
v122 = a6;
v11 = a3;
v123 = a7;
v124 = a8;
v121 = a9;
BugCheckParameter2 = a4;
v12 = *((_QWORD *)KeGetCurrentThread() + 23) + 1664i64;
v127 = a10;
a1a = v12;
v13 = a1 >> 9;
*(_QWORD *)&v108[1] = 0i64;
v14 = *(unsigned __int16 *)(v12 + 174);
v115 = 0i64;
LOWORD(v12) = **(_WORD **)(qword_140C4E388 + 8 * v14);
*a10 = 1;
v107 = v12;
v102 = v12;
PteBase = MmGetPteBase();
v16 = (INT64)PteBase + (v13 & 0x7FFFFFFFF8i64);
v128 = v16;
v17 = (unsigned __int64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64);
v106 = v16;
v119 = v17;
v116 = 0x2000;
v18 = 0i64;
v113 = 0;
v114 = 0;
v112 = 0i64;
v19 = (_QWORD)PteBase << 25;
v120 = (_QWORD)PteBase << 25;
v126 = (__int64)((v17 << 25) - ((_QWORD)PteBase << 25)) >> 16;
LABEL_2:
v118 = v17;
v111 = 0;
BugCheckParameter3 = 0i64;
v20 = 0;
v125 = 0i64;
memset((INT64)v130, 0i64);
v21 = MmGetPteBase();
v129 = 2145;
v22 = ((v16 << 25) - v19) >> 16;
v23 = v22;
if( v22 >= (unsigned __int64)v21 )
{
PteLimit = MmGetPteLimit();
do
{
if( v23 > (unsigned __int64)PteLimit )
break;
v23 = (__int64)((v23 << 25) - v19) >> 16;
}
while( v23 >= (unsigned __int64)v21 );
v11 = a3;
}
if( v23 < 0xFFFF800000000000ui64 || v23 >= qword_140C4F878 && v23 <= qword_140C4E0A8 )
AnyMultiplexedVm = (CHAR *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1664i64);
else
AnyMultiplexedVm = MiGetAnyMultiplexedVm(1i64);
v26 = MiFastLockLeafPageTable((INT64)AnyMultiplexedVm, v22);
if( v26 )
{
v27 = v26 - 1;
LODWORD(v125) = v26 - 1;
v28 = (INT64)MmGetPteBase();
v29 = v28 + ((v22 >> 9) & 0x7FFFFFFFF8i64);
*((_QWORD *)&v125 + 1) = v29;
}
else
{
v129 |= 4u;
v136 = &v125;
v131 = 0i64;
v132 = AnyMultiplexedVm;
v130[0] = v130[0] & 0xE3 | 4;
v135 = MiGetNextPageTableTail;
v134 = v126;
v130[4] = v11;
v133 = v22;
MiWalkPageTables((INT64)&v129);
v27 = v125;
v29 = *((_QWORD *)&v125 + 1);
v28 = (INT64)MmGetPteBase();
}
if( v29 )
{
v30 = v28 + ((v29 >> 9) & 0x7FFFFFFFF8i64);
v112 = v30;
if( v27 )
{
v31 = v28 + ((v29 >> 9) & 0x7FFFFFFFF8i64);
if( v27 > 1 )
{
v32 = v27 - 1;
do
{
v31 = v28 + ((v31 >> 9) & 0x7FFFFFFFF8i64);
--v32;
}
while( v32 );
}
v30 = v28 + ((v31 >> 9) & 0x7FFFFFFFF8i64);
if( v29 == v16 )
{
BugCheckParameter3 = MI_READ_PTE_LOCK_FREE(v31);
v92 = BugCheckParameter3;
if( (BugCheckParameter3 & 1) == 0 && qword_140C4DC80 )
{
if( (BugCheckParameter3 & 0x10) != 0 )
v92 = BugCheckParameter3 & 0xFFFFFFFFFFFFFFEFui64;
else
v92 = ~qword_140C4DC80 & BugCheckParameter3;
}
v93 = (*((_QWORD *)MmGetPfnDb() + 6 * ((v92 >> 12) & 0xFFFFFFFFFi64) + 5) >> 39) & 0x3FF;
v94 = *(_DWORD *)(BugCheckParameter2 + 48);
if( (*(_BYTE *)(BugCheckParameter2 + 48) & 0x70) == 48 || (v94 & 0x500000) == 5242880 )
ProtectionFromPte = MiGetProtectionFromPte((PVOID)BugCheckParameter2, (PVOID)BugCheckParameter3);
else
ProtectionFromPte = (v94 >> 7) & 0x1F;
*v122 = ProtectionFromPte;
MiUnlockPageTableInternal(a1a, v30);
*v123 = 0;
*v124 = v93;
LeafVa = MiGetLeafVa(v31 + 8);
*v121 = LeafVa;
return 4096i64;
}
}
else if( v16 == v29 )
{
BugCheckParameter3 = MI_READ_PTE_LOCK_FREE(v16);
v111 = 1;
v29 = v16 + 8;
v33 = (v16 & 0xFFFFFFFFFFFFF000ui64) + 4088;
v20 = BugCheckParameter3 == 0;
goto LABEL_23;
}
MiUnlockPageTableInternal(a1a, v30);
v112 = 0i64;
v33 = (v29 & 0xFFFFFFFFFFFFF000ui64) - 8;
LABEL_23:
if( v33 > v119 )
v33 = v119;
v118 = v33;
goto LABEL_26;
}
v29 = v119 + 8;
LABEL_26:
v34 = 0;
while( 1 )
{
v35 = v34;
v104 = v34;
v36 = 0x2000;
v108[0] = v34;
v103 = v34;
if( !BugCheckParameter3 )
{
v43 = BugCheckParameter2;
*v127 = v34;
v44 = (UINT64 *)*(unsigned int *)(v43 + 48);
if( (*(_BYTE *)(v43 + 48) & 0x70) == 48 || ((unsigned __int8)v44 & 0x70) == 16 )
{
if( ((unsigned __int8)v44 & 0x70) == 48 )
v102 = *(_WORD *)MiGetAweVadPartition(v43);
LABEL_59:
v41 = v35;
LABEL_60:
v42 = a5;
goto LABEL_61;
}
if( ((unsigned int)v44 & 0x100000) != 0 )
{
if( *(int *)(v43 + 52) >= 0 )
{
v41 = v34;
}
else
{
v36 = 4096;
v41 = ((unsigned int)v44 >> 7) & 0x1F;
v108[0] = MI_GET_GRAPHICS_PROTECTION_FROM_VAD(v43, 0i64, v28, v44, v100);
}
if( ((unsigned int)v44 & 0x500000) == 5242880 )
{
LockedVadEvent = MiLocateLockedVadEvent(v43, 16i64);
if( LockedVadEvent )
{
if( LockedVadEvent[3] && PsReferencePartitionSafe((INT64)LockedVadEvent[3]) )
{
v102 = **v46;
PsDereferencePartition((INT64)v46);
v34 = 0;
}
}
}
goto LABEL_60;
}
v47 = v10 >> 12;
v102 = **(_WORD **)(qword_140C4E388 + 8i64 * (*(_WORD *)(**(_QWORD **)(v43 + 72) + 60i64) & 0x3FF));
*(_QWORD *)&v108[1] = MiGetProtoPteAddress((_MMVAD *)v43, v47, 4ui64, (_SUBSECTION **)&v115);
v48 = *(_QWORD *)&v108[1];
if( !*(_QWORD *)&v108[1] )
{
if( a5 && !MiQueryStateMatches(a5, 0x2000i64, 0i64, 0i64, 0) )
{
v16 = v106;
v35 = 1;
v41 = v104;
v29 = v106;
v103 = 1;
LABEL_61:
v40 = a1a;
LABEL_62:
Pml4eBase = MmGetPml4eBase();
goto LABEL_63;
}
if( (unsigned int)MiVadPureReserve(BugCheckParameter2) && v115 && !*(_QWORD *)(v115 + 8) )
{
v16 = v106;
v50 = MiSkipEntirePagefileRegions(v49, v47, v106, v29, v115);
v40 = a1a;
v34 = 0;
v42 = a5;
v29 = v50;
Pml4eBase = MmGetPml4eBase();
v41 = v35;
if( v50 == v16 )
v29 = v16 + 8;
goto LABEL_63;
}
v16 = v106;
v29 = v106 + 8;
goto LABEL_59;
}
v51 = v115;
if( v20 )
{
v52 = v106;
v53 = *(_QWORD *)(v115 + 8);
v54 = ((__int64)(v118 - v106) >> 3) + 1;
if( v54 > 32 )
v54 = 32i64;
v55 = v53 + 8 * (*(unsigned int *)(v115 + 44) - (unsigned __int64)(*(_DWORD *)(v115 + 52) & 0x3FFFFFFF));
if( (*(_BYTE *)(v115 + 34) & 2) != 0 || *(_QWORD *)&v108[1] < v53 || *(_QWORD *)&v108[1] >= v55 )
{
v54 = 0i64;
}
else if( *(_QWORD *)&v108[1] + 8 * v54 > v55 )
{
v54 = (__int64)(v55 - *(_QWORD *)&v108[1]) >> 3;
}
v56 = v106 - 8 + 8 * v54;
v29 = v106 + 8;
if( v106 + 8 <= v56 )
{
do
{
if( *(_QWORD *)v29 )
break;
v29 += 8i64;
}
while( v29 <= v56 );
v48 = *(_QWORD *)&v108[1];
v51 = v115;
v52 = v106;
}
if( v111 )
goto LABEL_81;
}
else
{
if( v111 )
{
LABEL_81:
v57 = BugCheckParameter2;
goto LABEL_82;
}
v52 = v106;
v61 = *(_QWORD *)(v115 + 8);
v62 = (__int64)(v29 - v106) >> 3;
v63 = v61 + 8 * (*(unsigned int *)(v115 + 44) - (unsigned __int64)(*(_DWORD *)(v115 + 52) & 0x3FFFFFFF));
if( (*(_BYTE *)(v115 + 34) & 2) != 0 || *(_QWORD *)&v108[1] < v61 || *(_QWORD *)&v108[1] >= v63 )
{
v62 = 1i64;
}
else if( *(_QWORD *)&v108[1] + 8 * v62 > v63 )
{
v62 = (__int64)(v63 - *(_QWORD *)&v108[1]) >> 3;
}
v29 = v106 + 8 * v62;
}
if( (unsigned int)MiVadPureReserve(BugCheckParameter2) )
{
v64 = MiSkipFractionalPagefileRegion(v48, v51, (__int64)(v29 - v52) >> 3);
v57 = BugCheckParameter2;
if( v64 != v48 )
{
v65 = (__int64)(v64 - v48) >> 3;
v34 = 0;
v48 = 0i64;
*(_QWORD *)&v108[1] = 0i64;
v29 = v52 + 8 * v65;
LABEL_83:
v58 = *(_QWORD **)(v57 + 120);
if( (__int64)v58 >= 0 )
{
v59 = 0;
v60 = -1i64;
}
else
{
v59 = 1;
v60 = (unsigned __int64)(*v58 - 1i64) >> 12;
}
if( v48 )
{
if( (*(_DWORD *)(v57 + 48) & 0x70) == 32 )
{
v66 = *(_QWORD *)(v57 + 72);
v34 = 0;
v67 = 0i64;
if( v66 )
{
do
{
if( (*(_BYTE *)(v66 + 34) & 2) != 0
&& (v68 = *(_QWORD *)v66, (*(_DWORD *)(*(_QWORD *)v66 + 56i64) & 0x4000000) != 0) )
{
SessionId = MmGetSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
SharedProtos = MiGetSharedProtos(v68, SessionId, v66);
v48 = *(_QWORD *)&v108[1];
v67 = SharedProtos[9];
}
else
{
v67 = *(_QWORD *)(v66 + 8);
}
if( v48 >= v67 && v48 < v67 + 8i64 * *(unsigned int *)(v66 + 44) )
break;
v66 = *(_QWORD *)(v66 + 16);
}
while( v66 );
v57 = BugCheckParameter2;
v34 = 0;
}
if( (__int64)(v48 - v67) >> 3 < (unsigned __int64)(*(_DWORD *)(v66 + 44)
- (*(_DWORD *)(v66 + 52) & 0x3FFFFFFFu)) )
{
v41 = (*(_DWORD *)(v57 + 48) >> 7) & 0x1F;
if( v41 == 7 )
v41 = (*(unsigned __int16 *)(v66 + 32) >> 1) & 0x1F;
v16 = v106;
v35 = v103;
v40 = a1a;
v42 = a5;
Pml4eBase = MmGetPml4eBase();
if( v41 )
v36 = 4096;
goto LABEL_63;
}
v16 = v106;
v41 = 0;
v35 = v103;
}
else
{
if( !*(_QWORD *)(*(_QWORD *)v51 + 64i64) && (*(_DWORD *)(*(_QWORD *)v51 + 56i64) & 0x2000) == 0 )
{
if( v112 )
{
MiUnlockPageTableInternal(a1a, v112);
v112 = 0i64;
}
MiUnlockWorkingSetShared(a1a, a3);
v71 = (__int64)(v29 - v106) >> 3;
v72 = (__int64)(*(_QWORD *)(v51 + 8)
+ 8
* (*(unsigned int *)(v51 + 44) - (unsigned __int64)(*(_DWORD *)(v51 + 52) & 0x3FFFFFFF))
- v48) >> 3;
if( v72 > v71 )
v72 = v71;
if( *(_QWORD *)v48 )
{
v36 = 4096;
v41 = (*(_DWORD *)(BugCheckParameter2 + 48) >> 7) & 0x1F;
}
else
{
v41 = v104;
}
if( !a5 || MiQueryStateMatches(a5, v36, v41, 0i64, v102) )
{
if( v72 )
{
while( 1 )
{
LABEL_127:
if( *(_QWORD *)v48 )
{
if( v36 != 4096 )
break;
}
else if( v36 == 4096 )
{
break;
}
v48 += 8i64;
++v18;
*(_QWORD *)&v108[1] = v48;
if( !--v72 )
break;
while( (v48 & 0xFFF) == 0 )
{
v73 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v48 >> 9) & 0x7FFFFFFFF8i64));
if( (v73 & 1) != 0 || (v73 & 0x3E0) != 0 )
{
if( v36 == 4096 )
goto LABEL_127;
goto LABEL_142;
}
if( v36 == 4096 )
goto LABEL_142;
if( v72 <= 0x200 )
{
v18 += v72;
*(_QWORD *)&v108[1] = v48 + 8 * v72;
goto LABEL_142;
}
v48 += 4096i64;
v18 += 512i64;
*(_QWORD *)&v108[1] = v48;
v72 -= 512i64;
if( !v72 )
goto LABEL_142;
}
}
}
LABEL_142:
v35 = v103;
}
else
{
v35 = 1;
v103 = 1;
v18 = 0i64;
}
v16 = v106;
v40 = a1a;
v29 = v106 + 8 * v18;
MiLockWorkingSetShared(a1a);
v42 = a5;
v34 = 0;
goto LABEL_62;
}
v74 = *(_QWORD *)(v51 + 8)
+ 8 * (*(unsigned int *)(v51 + 44) - (unsigned __int64)(*(_DWORD *)(v51 + 52) & 0x3FFFFFFF))
- v48;
v16 = v106;
v18 = v74 >> 3;
v75 = (__int64)(v29 - v106) >> 3;
if( v18 > v75 )
v18 = v75;
v76 = v18;
if( v59 )
{
v77 = *(unsigned int *)(v57 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v57 + 32) << 32);
if( v47 - v77 <= v60 )
{
v18 = v77 - v47 + v60 + 1;
v59 = 0;
if( v76 <= v18 )
v18 = v76;
}
}
v29 = v106 + 8 * v18;
if( v59 )
v41 = v104;
else
v41 = (*(_DWORD *)(v57 + 48) >> 7) & 0x1F;
v35 = v103;
v36 = 4096;
if( v59 )
v36 = 0x2000;
v34 = 0;
}
}
else
{
v41 = v104;
v35 = v104;
v16 = v106;
}
goto LABEL_60;
}
}
LABEL_82:
v34 = 0;
goto LABEL_83;
}
Pml4eBase = MmGetPml4eBase();
if( (BugCheckParameter3 & 0x3E0) == 512
&& (BugCheckParameter3 & 1) == 0
&& ((BugCheckParameter3 & 0x400) == 0 || MiIsPrototypePteVadLookup(BugCheckParameter3)) )
{
v40 = a1a;
v41 = v35;
v42 = a5;
}
else
{
v36 = 4096;
MiGetPageProtection(BugCheckParameter2, v16, (__int64 **)&v108[1], v108, &v102);
v39 = *(_QWORD *)&v108[1];
if( *(_QWORD *)&v108[1] )
{
v91 = a1a;
MiUnlockPageTableInternal(a1a, v112);
v112 = 0i64;
MiUnlockWorkingSetShared(v91, a3);
MiFaultInPagedPool(v39);
MiLockWorkingSetShared(v91);
v17 = v119;
v19 = v120;
v11 = a3;
goto LABEL_2;
}
v35 = v103;
v34 = 0;
v40 = a1a;
v41 = v38;
v42 = a5;
Pml4eBase = MmGetPml4eBase();
if( !v38 )
v36 = 0x2000;
}
LABEL_63:
v28 = v128;
if( v16 == v128 )
{
v107 = v102;
v116 = v36;
v113 = v41;
v114 = v108[0];
if( v42 && !MiQueryStateMatches(v42, v36, v41, v108[0], v102) )
goto LABEL_235;
goto LABEL_214;
}
if( v36 != v116 || v102 != v107 || v41 != v113 || v108[0] != v114 )
break;
if( v18 || v35 == 1 || (__int64)((v16 - v128) & 0xFFFFFFFFFFFFFFF8ui64) < 256 )
goto LABEL_214;
if( !v112 )
goto LABEL_190;
v78 = *(_BYTE *)(v40 + 184) & 7;
a3a = v34;
if( (_MMPTE *)v112 != MmGetPxeSelfRef() )
{
if( v78 )
goto LABEL_182;
Pml4eLimit = MmGetPml4eLimit();
if( v112 >= (unsigned __int64)Pml4eBase && v112 <= (unsigned __int64)Pml4eLimit )
{
v83 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64) + 608i64);
if( v83 )
{
v84 = (*(_DWORD *)(v83 + 4i64 * (((unsigned int)v112 >> 3) & 0x1FF)) >> 30) & 1;
LABEL_188:
v80 = v84 == 0;
goto LABEL_189;
}
LABEL_182:
Pml4eLimit = MmGetPml4eLimit();
}
if( v78 && v112 >= (unsigned __int64)Pml4eBase && v112 <= (unsigned __int64)Pml4eLimit )
{
PageTableLockBuffer = MiGetPageTableLockBuffer(v40, v112, &a3a);
v80 = ((*(_DWORD *)PageTableLockBuffer >> a3a) & 2) == 0;
goto LABEL_189;
}
v84 = (*(_QWORD *)v112 >> 60) & 2;
goto LABEL_188;
}
CurrentPrcb = KeGetCurrentPrcb();
if( v78 )
{
if( v78 == 7 )
{
v80 = *((_QWORD *)CurrentPrcb + 4523) == 0i64;
}
else
{
if( v78 == 5 )
v81 = *((_QWORD *)CurrentPrcb + 4520);
else
v81 = *((_QWORD *)CurrentPrcb + 4529);
v80 = v81 == 0;
}
}
else
{
v80 = *((_QWORD *)CurrentPrcb + 4526) == 0i64;
}
LABEL_189:
if( !v80 )
goto LABEL_233;
LABEL_190:
v86 = &dword_140C4F4C0;
if( (*(_BYTE *)(v40 + 184) & 7) != 2 )
v86 = (LONG *)(v40 + 192);
if( (*v86 & 0x40000000) != 0 )
goto LABEL_233;
if( a3 < 2u )
{
v87 = KeGetCurrentPrcb();
v28 = *((unsigned int *)v87 + 3147);
if( (v28 & 1) != 0 )
{
v88 = 1;
if( *((_DWORD *)v87 + 8103) > 7u )
{
if( *((_BYTE *)v87 + 12585) )
{
v89 = 1;
LABEL_212:
if( v89 )
{
v16 = v106;
LABEL_233:
v29 = v16 + 8;
goto LABEL_236;
}
LABEL_213:
v16 = v106;
goto LABEL_214;
}
LABEL_207:
if( (v28 & 0x1E) != 0 )
{
v89 = 5;
goto LABEL_212;
}
if( *((_QWORD *)v87 + 1) != *((_QWORD *)v87 + 3) )
{
v89 = 6;
goto LABEL_212;
}
LABEL_211:
_disable();
*((_DWORD *)v87 + 7931) = v34;
*((_DWORD *)v87 + 8103) = v34;
KiResetGlobalDpcWatchdogProfiler((INT64)v87);
_enable();
v34 = 0;
v89 = 0;
goto LABEL_212;
}
}
else
{
v88 = v34;
if( (v28 & 0x1E) != 0 )
{
v89 = 2;
goto LABEL_212;
}
if( *((_BYTE *)v87 + 12585) )
{
v89 = 3;
goto LABEL_212;
}
v90 = *((_QWORD *)v87 + 2);
if( v90 && v90 != *((_QWORD *)v87 + 1) )
{
v89 = 4;
goto LABEL_212;
}
}
if( *((_DWORD *)v87 + 7931) <= 7u )
goto LABEL_213;
if( v88 )
goto LABEL_207;
goto LABEL_211;
}
LABEL_214:
if( v103 )
goto LABEL_236;
if( v18 )
goto LABEL_236;
v16 += 8i64;
v106 = v16;
if( v29 != v16 || v29 > v118 )
goto LABEL_236;
if( v111 )
BugCheckParameter3 = *(_QWORD *)v16;
v20 = v34;
v10 = ((v16 << 25) - v120) >> 16;
v29 += 8i64;
}
v41 = v113;
v36 = v116;
v102 = v107;
v108[0] = v114;
LABEL_235:
v29 = v16;
LABEL_236:
if( v112 )
MiUnlockPageTableInternal(a1a, v112);
result = v36;
v98 = v122;
*v121 = (__int64)((v29 << 25) - v120) >> 16;
v99 = v108[0];
*v98 = v41;
*v123 = v99;
*v124 = v102;
return result;
}Referenced by:
MiAllowProtectionChange
MiComparePteProtections
MiQueryAddressSpan
MiSetProtectionOnSection