MiCreateSparsePfnDatabase
NTSTATUS __stdcall MiCreateSparsePfnDatabase(_LOADER_PARAMETER_BLOCK *LoaderBlock){
_LIST_ENTRY *p_MemoryDescriptorListHead;
_LIST_ENTRY *Flink;
int v3;
UINT64 v4;
UINT64 Blink;
__int64 v6;
unsigned __int64 Flink_low;
UINT64 v8;
UINT64 v9;
p_MemoryDescriptorListHead = &LoaderBlock->MemoryDescriptorListHead;
Flink = LoaderBlock->MemoryDescriptorListHead.Flink;
v3 = 3;
v4 = 0i64;
Blink = -1i64;
if( Flink == &LoaderBlock->MemoryDescriptorListHead )
goto LABEL_25;
v6 = 0x1C5C0C00048i64;
do
{
Flink_low = SLODWORD(Flink[1].Flink);
if( (unsigned int)Flink_low <= 0x28 && _bittest64(&v6, Flink_low) )
{
if( Blink == -1i64 )
goto LABEL_20;
}
else
{
if( Blink == -1i64 )
{
Blink = (UINT64)Flink[1].Blink;
v6 = 0x1C5C0C00048i64;
goto LABEL_19;
}
if( (_LIST_ENTRY *)(Blink + v4) == Flink[1].Blink )
{
if( (v3 == 2 || v3 == 24) && ((_DWORD)Flink_low == 2 || (_DWORD)Flink_low == 24) )
{
LABEL_34:
v4 += (UINT64)Flink[2].Flink;
v6 = 0x1C5C0C00048i64;
goto LABEL_20;
}
if( v3 == 2 )
{
LABEL_14:
v8 = 0i64;
goto LABEL_15;
}
if( (_DWORD)Flink_low != 2 && v3 != 24 && (_DWORD)Flink_low != 24 )
goto LABEL_34;
}
}
if( v3 == 2 || v3 == 24 )
goto LABEL_14;
v8 = 1i64;
LABEL_15:
if( !(unsigned int)MxMapPfnRange(Blink, v4, v8) )
return 0;
Flink_low = SLODWORD(Flink[1].Flink);
v6 = 0x1C5C0C00048i64;
if( (unsigned int)Flink_low > 0x28 || !_bittest64(&v6, Flink_low) )
{
Blink = (UINT64)Flink[1].Blink;
LABEL_19:
v4 = (UINT64)Flink[2].Flink;
v3 = Flink_low;
goto LABEL_20;
}
Blink = -1i64;
LABEL_20:
Flink = Flink->Flink;
}
while( Flink != p_MemoryDescriptorListHead );
if( Blink == -1i64 || (v3 == 2 || v3 == 24 ? (v9 = 0i64) : (v9 = 1i64), (unsigned int)MxMapPfnRange(Blink, v4, v9)) )
{
LABEL_25:
if( (*(&stru_140C4DB30 + 374) == 0x1000000000i64
|| (unsigned int)MxMapPfnRange(*(&stru_140C4DB30 + 374), 0x800ui64, 1ui64))
&& (unsigned int)MxMapPfnRange(0x1000000000ui64, 0xFFFFFFFFFFFFFFFFui64, 1ui64) )
{
return 1;
}
}
return 0;
}Referenced by:
MiCreatePfnDatabase