PiDrvDbInit
NTSTATUS __stdcall PiDrvDbInit(UINT64 Phase){
WCHAR v1;
NTSTATUS v2;
INT64 v4;
int v5;
wchar_t **i;
unsigned int v7;
WCHAR *v8;
int v9;
WCHAR v10;
NTSTATUS v12;
v2 = 0;
v12 = 0;
if( (_DWORD)Phase )
{
if( (_DWORD)Phase == 2 )
{
v2 = PiDrvDbSetupNodes(2, 0i64, v1);
if( v2 >= 0 )
return PiDrvDbSuspendNodes(0i64);
}
}
else
{
qword_140C42E98 = (__int64)&PiDrvDbNodeList;
PiDrvDbNodeList = (INT64)&PiDrvDbNodeList;
v2 = DrvDbOpenContext();
if( v2 >= 0 )
{
v5 = 0;
for( i = &PiDrvDbNodeDescriptors; ; i += 2 )
{
v7 = *((_DWORD *)i + 2);
if( (v7 & 4) == 0 || !CmIsStateSeparationEnabled() )
{
v2 = PiDrvDbRegisterNode(*i, v7, v4, 0i64);
if( v2 < 0 )
break;
}
if( (unsigned int)++v5 >= 2 )
{
if( v2 >= 0 )
{
v2 = PiDrvDbEnumDriverStoreNodes(
(unsigned __int8(__fastcall *)(_QWORD, __int64))PiDrvDbRegisterNodeCallback,
(__int64)&v12,
v4);
if( v2 >= 0 )
{
v2 = v12;
if( v12 >= 0 )
{
LOBYTE(v8) = 1;
v9 = PiDrvDbSuspendNodes(v8);
v2 = v9;
if( v9 >= 0 )
return PiDrvDbSetupNodes(0, (unsigned int)v9, v10);
}
}
}
return v2;
}
}
}
}
return v2;
}Referenced by:
PiPnpRtlInit