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