PiDrvDbSetupNodes
INT64 __fastcall PiDrvDbSetupNodes(INT64 a1, INT64 a2, WCHAR a3){
int ObjectProperty;
int v4;
WCHAR *v5;
INT64 i;
_DWORD *v7;
int v9;
int v10;
ULONG v11;
ObjectProperty = 0;
v4 = a1;
v10 = 0;
v11 = 0;
if( !(_DWORD)a1 )
{
v5 = (WCHAR *)L"SYSTEM";
LABEL_3:
for( i = PiDrvDbNodeList; ; i = *(_QWORD *)i )
{
if( (INT64 *)i == &PiDrvDbNodeList )
return(unsigned int)ObjectProperty;
if( (*(_DWORD *)(i + 64) & 4) == 0 )
break;
LABEL_5:
;
}
if( !v4 )
{
if( (int)PnpGetObjectProperty(
PiPnpRtlCtx,
*(_QWORD *)(i + 24),
7i64,
*(_QWORD *)(i + 72),
0i64,
(__int64)DEVPKEY_DriverDatabase_SetupOptions,
&v10,
i + 492,
4,
&v11,
0) < 0
|| v10 != 7
|| v11 != 4 )
{
*(_DWORD *)(i + 492) = 51;
}
v7 = (_DWORD *)(i + 496);
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
*(_QWORD *)(i + 24),
7i64,
*(_QWORD *)(i + 72),
0i64,
(__int64)DEVPKEY_DriverDatabase_SetupStatus,
&v10,
i + 496,
4,
&v11,
0);
if( ObjectProperty >= 0 && v10 == 24 && v11 == 4 )
{
if( *v7 != 259 )
goto LABEL_4;
}
else
{
ObjectProperty = 0;
}
*v7 = 0;
*(_DWORD *)(i + 64) |= 0x20u;
}
LABEL_4:
if( (*(_DWORD *)(i + 64) & 0x20) != 0 )
{
v9 = PiDrvDbSetupNodeHive(i, v5, a3);
ObjectProperty = v9;
if( v9 < 0 )
{
if( *(int *)(i + 496) >= 0 )
*(_DWORD *)(i + 496) = v9;
ObjectProperty = 0;
}
if( v4 == 2 )
{
PnpSetObjectProperty(
PiPnpRtlCtx,
*(_QWORD *)(i + 24),
7u,
*(_QWORD *)(i + 72),
0i64,
(__int64)DEVPKEY_DriverDatabase_SetupStatus,
24,
i + 496,
4u,
0);
*(_DWORD *)(i + 64) &= ~0x20u;
}
}
goto LABEL_5;
}
if( (_DWORD)a1 == 2 )
{
v5 = (WCHAR *)L"SOFTWARE";
goto LABEL_3;
}
return(unsigned int)ObjectProperty;
}Referenced by:
PiDrvDbInit