PiDrvDbSetupNodes
__int64 __fastcall PiDrvDbSetupNodes(int a1, __int64 a2, WCHAR a3){
NTSTATUS ObjectProperty;
WCHAR *v5;
__int64 i;
_DWORD *v7;
int v9;
INT64 v10;
int v11;
ObjectProperty = 0;
LODWORD(v10) = 0;
v11 = 0;
if( !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( !a1 )
{
if( PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*(_QWORD *)(i + 24),
7i64,
*(_QWORD *)(i + 72),
0i64,
(INT64)&DEVPKEY_DriverDatabase_SetupOptions,
(INT64)&v10,
i + 492) < 0
|| (_DWORD)v10 != 7
|| v11 != 4 )
{
*(_DWORD *)(i + 492) = 51;
}
v7 = (_DWORD *)(i + 496);
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*(_QWORD *)(i + 24),
7i64,
*(_QWORD *)(i + 72),
0i64,
(INT64)&DEVPKEY_DriverDatabase_SetupStatus,
(INT64)&v10,
i + 496);
if( ObjectProperty >= 0 && (_DWORD)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( a1 == 2 )
{
PnpSetObjectProperty(
*(&stru_140CF2E80 + 607),
*(_QWORD *)(i + 24),
7u,
*(_QWORD *)(i + 72),
0i64,
(__int64)&DEVPKEY_DriverDatabase_SetupStatus,
24,
i + 496,
4,
0);
*(_DWORD *)(i + 64) &= ~0x20u;
}
}
goto LABEL_5;
}
if( a1 == 2 )
{
v5 = (WCHAR *)L"SOFTWARE";
goto LABEL_3;
}
return(unsigned int)ObjectProperty;
}Referenced by:
PiDrvDbInit