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