CmpInitializePreloadedHives
NTSTATUS __stdcall CmpInitializePreloadedHives(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 Phase){
NTSTATUS v2;
_QWORD **v4;
_QWORD *v5;
void *v7;
int v8;
_QWORD **v9;
_QWORD *v10;
v2 = 0;
if( (_DWORD)Phase )
{
v7 = CmpHiveRootSecurityDescriptor((UINT8)LoaderBlock);
if( v7 )
{
LOBYTE(v8) = CmpInitializeSystemHive(LoaderBlock);
v2 = v8;
if( v8 < 0 )
KeBugCheckEx(0x67u, 1ui64, 0xCui64, v8, 0i64);
v9 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
v10 = *v9;
while( v10 != v9 )
{
CmpInitializePreloadedHive((__int64)v10, (__int64)v7);
v10 = (_QWORD *)*v10;
v9 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
}
ExFreePoolWithTag(v7, 0);
}
else
{
return -1073741670;
}
}
else
{
qword_140C48258 = (__int64)&CmpPreloadedHivesList;
CmpPreloadedHivesList = (__int64)&CmpPreloadedHivesList;
v4 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
v5 = *v4;
while( v5 != v4 )
{
++CmpPreloadedHivesCount;
v5 = (_QWORD *)*v5;
v4 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
}
}
return v2;
}Referenced by:
CmInitSystem1