MiAllocateDriverPage
NTSTATUS __stdcall MiAllocateDriverPage(){
int v0;
__int64 v1;
char v2;
char v3;
ULONG_PTR *v4;
UINT64 v5;
INT64 v6;
__int64 v7;
__int16 v8;
unsigned int NextPageColor;
UINT64 i;
UINT64 v11;
UINT64 SizeInPages;
UINT64 PreferredNode;
UINT64 Flags;
UINT64 *StartingPfn;
__int64 v17;
_MI_COLOR_BASE ColorBase[4];
UINT64 v19;
LODWORD(v19) = 0;
v3 = v2;
v4 = (ULONG_PTR *)v1;
*(_OWORD *)ColorBase = 0i64;
v17 = -1i64;
if( !(unsigned int)MiUseSlabAllocatorForDriverPage(v1, v0, &v19)
|| (LODWORD(SizeInPages) = 0,
LODWORD(v7) = MiGetSlabPage(v6, v5, (unsigned int)v19, (INT64 *)0xFFFFFFFFFFFFFFFFi64, SizeInPages),
v17 = v7,
v7 == -1) )
{
if( (v3 & 1) != 0 )
{
LABEL_4:
LODWORD(v7) = -1;
}
else
{
LODWORD(StartingPfn) = 0x20000000;
LODWORD(Flags) = 0x80000000;
LODWORD(PreferredNode) = 0x80000000;
if( MiFindContiguousPages(
(_MI_PARTITION *)v4,
0i64,
HighestPfn,
0i64,
1ui64,
MiCached,
PreferredNode,
Flags,
StartingPfn) < 0 )
{
HighestPfn = -1i64;
MiInitializePageColorBase(0i64, 0i64, ColorBase);
NextPageColor = MiGetNextPageColor((INT64)ColorBase);
for( i = NextPageColor; ; i = NextPageColor )
{
LODWORD(v7) = MiGetPage(v4, i, 0i64);
if( v7 != -1 )
break;
if( KeGetCurrentIrql() == 2 )
goto LABEL_4;
MiWaitForFreePage((_MI_PARTITION *)v4, v11);
}
}
else
{
v8 = ++qword_140C4CA80;
if( v4 == (ULONG_PTR *)&Irp )
{
if( (v8 & 0x1FF) != 0 )
HighestPfn = v17 - 1;
else
HighestPfn = -1i64;
}
MiPreInitializeSystemImagePage(&MmGetPfnDb()[v17]);
LODWORD(v7) = v17;
}
}
}
return v7;
}Referenced by:
MiFillPerSessionProtos
MiHandleBootImage
MiLockCode
MiMakeDriverPagesPrivate
MiPrivateFixup