MiFindDriverNonPagedSections
__int64 __fastcall MiFindDriverNonPagedSections(__int64 a1, unsigned int *a2, _MMPTE **a3, _QWORD *a4){
__int64 v4;
INT64 v5;
unsigned int *v9;
unsigned int v10;
unsigned int SetBits;
unsigned int v12;
NTSTATUS NextForwardRunClear;
unsigned int v14;
_MMPTE *PteAddress;
int v16;
UINT64 StartingRunIndex;
v4 = *(_QWORD *)(a1 + 48);
v5 = a1 + 160;
LODWORD(StartingRunIndex) = 0;
MiLockLoaderEntry(a1 + 160, (_XSTATE_CONFIGURATION *)2);
v9 = *(unsigned int **)(v5 + 112);
v10 = *a2;
if( *a2 == *v9
|| (SetBits = RtlFindSetBits(*(_QWORD *)(v5 + 112), 1ui64, v10), v12 = SetBits, SetBits < v10)
|| SetBits == -1 )
{
MiUnlockLoaderEntry(v5, 2i64);
return 3221226021i64;
}
else
{
NextForwardRunClear = RtlFindNextForwardRunClear((INT64)v9, SetBits, &StartingRunIndex);
v14 = StartingRunIndex;
if( !NextForwardRunClear )
v14 = *v9;
*a2 = v14;
PteAddress = MiGetPteAddress((VOID *)(v4 + (v12 << 12)));
*a3 = PteAddress;
*a4 = &PteAddress[v16 - 1];
MiUnlockLoaderEntry(v5, 2i64);
return 0i64;
}
}Referenced by:
MiHandleDriverNonPagedSections