CmpInitializePreloadedHives
NTSTATUS __stdcall CmpInitializePreloadedHives(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 Phase){
NTSTATUS v2;
_LIST_ENTRY *v4;
_LIST_ENTRY *v5;
CHAR *v7;
int v8;
_LIST_ENTRY *p_AttachedHives;
_LIST_ENTRY *Flink;
v2 = 0;
if( (_DWORD)Phase )
{
v7 = CmpHiveRootSecurityDescriptor((UINT8)LoaderBlock);
if( v7 )
{
LOBYTE(v8) = CmpInitializeSystemHive(LoaderBlock);
v2 = v8;
if( v8 < 0 )
KeBugCheckEx(0x67u, (PVOID)1, (PVOID)0xC, (PVOID)v8, 0i64);
p_AttachedHives = &LoaderBlock->Extension->AttachedHives;
Flink = p_AttachedHives->Flink;
while( Flink != p_AttachedHives )
{
CmpInitializePreloadedHive((INT64)Flink, (INT64)v7);
Flink = Flink->Flink;
p_AttachedHives = &LoaderBlock->Extension->AttachedHives;
}
ExFreePoolWithTag(v7, 0);
}
else
{
return -1073741670;
}
}
else
{
*(&CmpDummyThreadEvent + 259) = (char *)&CmpDummyThreadEvent + 2064;
*(&CmpDummyThreadEvent + 258) = (char *)&CmpDummyThreadEvent + 2064;
v4 = &LoaderBlock->Extension->AttachedHives;
v5 = v4->Flink;
while( v5 != v4 )
{
++CmpPreloadedHivesCount;
v5 = v5->Flink;
v4 = &LoaderBlock->Extension->AttachedHives;
}
}
return v2;
}Referenced by:
CmInitSystem1