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