MiInitializeDriverImages
UINT64 __fastcall MiInitializeDriverImages(_LOADER_PARAMETER_BLOCK *LoaderBlock){
unsigned __int64 v1;
INT64 *v3;
_MMPTE *PteBase;
unsigned __int64 v5;
char *v6;
__int64 v7;
char *v8;
_DWORD *v9;
UINT64 i;
INT64 *v11;
PVOID v12;
int v13;
int v14;
UINT64 result;
__int64 *v16;
unsigned __int16 *v17;
__int64 v18;
unsigned __int64 v19;
__int64 *j;
unsigned __int64 v21;
__int64 v22;
__int16 v23;
__int64 *v24;
char v25[8];
char v26;
v1 = *(_QWORD *)PagesPerBit;
v3 = MiSystemVaToDynamicBitmap(12i64);
if( !MiBuildDynamicRegion((RTL_BITMAP *)v3, (PVOID)v1, 0x8000000000ui64) )
return 0i64;
PteBase = MmGetPteBase();
v5 = v1 + 0x7FFFFFFFFFi64;
v6 = &v26;
v7 = 4i64;
do
{
v1 = (unsigned __int64)PteBase + ((v1 >> 9) & 0x7FFFFFFFF8i64);
v5 = (unsigned __int64)PteBase + ((v5 >> 9) & 0x7FFFFFFFF8i64);
*((_QWORD *)v6 - 1) = v1;
*(_QWORD *)v6 = v5;
v6 += 16;
--v7;
}
while( v7 );
MxMarkActiveDriverBits((unsigned __int64 *)&qword_140C4DE20, v1, v5, (__int64)v25, 3);
v8 = (char *)NextBuffer;
v9 = (_DWORD *)((char *)PteBase + (((unsigned __int64)NextBuffer >> 9) & 0x7FFFFFFFF8i64));
for( i = 0i64; i < qword_140C4DE20; i += 0x8000i64 )
{
if( (*v9 & 0x800i64) == 0 )
{
if( !(unsigned int)MiSplitBitmapPages(5i64, v8, 8ui64) )
return 0i64;
RtlClearBitsEx((INT64)&qword_140C4DE20, i, 0x8000ui64);
}
v8 += 4096;
v9 += 2;
}
qword_140C4DE20 = i;
v11 = MiSystemVaToDynamicBitmap(11i64);
if( !MiBuildDynamicRegion((RTL_BITMAP *)v11, v12, 0x2000000000ui64) )
return 0i64;
HighestPfn = -1i64;
qword_140C4CA68 = 0i64;
qword_140C4CA40 = (__int64)&qword_140C4CA38;
qword_140C4CA38 = (__int64)&qword_140C4CA38;
if( MmLargePageDriverBufferLength != -1 )
{
v16 = MmLargePageDriverBuffer;
v17 = (unsigned __int16 *)MmLargePageDriverBuffer
+ (((unsigned __int64)(unsigned int)MmLargePageDriverBufferLength - 2) >> 1);
if( MmLargePageDriverBuffer < (__int64 *)v17 )
{
v18 = 0x100002601i64;
do
{
v19 = *(unsigned __int16 *)v16;
if( (unsigned __int16)v19 <= 0x20u && _bittest64(&v18, v19) || (_WORD)v19 == 12288 )
{
j = v16;
}
else
{
if( (_DWORD)v19 == 42 )
{
byte_140C4CA29 = 1;
break;
}
for( j = v16; j < (__int64 *)v17; j = (__int64 *)((char *)j + 2) )
{
v21 = *(unsigned __int16 *)j;
if( (unsigned __int16)v21 <= 0x20u && _bittest64(&v18, v21) )
break;
if( (_WORD)v21 == 12288 )
break;
}
LODWORD(v22) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
if( !v22 )
break;
v23 = 2 * (((char *)j - (char *)v16) >> 1);
*(_QWORD *)(v22 + 24) = v16;
*(_WORD *)(v22 + 16) = v23;
*(_WORD *)(v22 + 18) = v23;
v24 = (__int64 *)qword_140C4CA40;
if( *(__int64 **)qword_140C4CA40 != &qword_140C4CA38 )
__fastfail(3u);
*(_QWORD *)v22 = &qword_140C4CA38;
*(_QWORD *)(v22 + 8) = v24;
v18 = 0x100002601i64;
*v24 = v22;
qword_140C4CA40 = v22;
}
v16 = (__int64 *)((char *)j + 2);
}
while( (char *)j + 2 < (char *)v17 );
}
}
qword_140C4CAA0 = 0i64;
MiInitializeBootLoadedDriverPfns(LoaderBlock);
if( !v13 )
return 0i64;
if( !(unsigned int)MiInitializeDriverPtes((INT64)LoaderBlock) )
return 0i64;
MiFreeKernelPadSections(
*(_QWORD **)(qword_140C4CA58 + 48),
*(_QWORD *)(qword_140C4CA58 + 48) + *(_DWORD *)(qword_140C4CA58 + 64));
MiReloadBootLoadedDrivers(LoaderBlock);
if( !v14 || !MiCreateInitialSystemWsles() )
return 0i64;
VfInitBootDriversLoaded(LoaderBlock);
result = 1i64;
qword_140C4CA50 = (__int64)&qword_140C4CA48;
qword_140C4CA48 = &qword_140C4CA48;
return result;
}Referenced by:
MiInitSystem