PpDevCfgInit

NTSTATUS __stdcall PpDevCfgInit(){
  CHAR v0; 
  WCHAR *v1; 
  int ObjectProperties; 
  int v3; 
  CHAR v4; 
  HPNPCTX *v5; 
  NTSTATUS SyncNodesUpdated; 
  PI_DM_OBJECT *v8; 
  VOID *CreateEnum; 
  UINT64 MatchingChangeStamp; 
  UINT8 *MatchingChangeStampa; 
  VOID *MatchingChangeStampb; 
  VOID *CheckStamp; 
  WCHAR *v14; 
  _DEVPROPKEY *PropertyKey; 
  CHAR v16[4]; 
  int v17; 
  int v18; 
  UINT64 RegType; 
  int Data; 
  _HANDLE Handle[2]; 
  VOID *ServiceHandle; 
  _UNICODE_STRING ServiceKeyName; 
  UINT64 PropertyCount[16]; 

  v17 = 0;
  v18 = 0;
  v0 = 0;
  v16[0] = 0;
  v16[1] = 0;
  *(_DWORD *)(&ServiceKeyName.MaximumLength + 1) = 0;
  ServiceHandle = 0i64;
  *(_QWORD *)Handle = 0i64;
  Data = 0;
  LODWORD(RegType) = 0;
  memset(PropertyCount, 0i64, 0x78u);
  LODWORD(MatchingChangeStamp) = 3;
  PropertyCount[0] = (UINT64)DEVPKEY_DriverDatabase_ConfigMode;
  LODWORD(PropertyCount[1]) = 7;
  PropertyCount[2] = (UINT64)&v17;
  LODWORD(PropertyCount[3]) = 4;
  PropertyCount[5] = (UINT64)DEVPKEY_DriverDatabase_ConfigOptions;
  LODWORD(PropertyCount[6]) = 7;
  PropertyCount[7] = (UINT64)&v18;
  PropertyCount[10] = (UINT64)&DEVPKEY_DriverDatabase_Updated;
  PropertyCount[12] = (UINT64)v16;
  LODWORD(PropertyCount[8]) = 4;
  LODWORD(PropertyCount[11]) = 17;
  LODWORD(PropertyCount[13]) = 1;
  ObjectProperties = PiDevCfgQueryObjectProperties(
                       v1,
                       (PNP_OBJECT_TYPE)L"SYSTEM",
                       (VOID *)7,
                       0i64,
                       (UINT64)PropertyCount,
                       MatchingChangeStamp);
  if( ObjectProperties >= 0 )
  {
    if( SLODWORD(PropertyCount[4]) >= 0 )
      v17 = (v17 & 3) != 0 ? v17 : 0;
    else
      v17 = 3;
    v3 = v18;
    *(_DWORD *)&ServiceKeyName.Length = 1835034;
    if( SLODWORD(PropertyCount[9]) < 0 )
      v3 = 0;
    v18 = v3;
    v4 = v16[0];
    if( SLODWORD(PropertyCount[14]) < 0 )
      v4 = 0;
    v16[0] = v4;
    ServiceKeyName.Buffer = L"DeviceInstall";
    if( PipOpenServiceEnumKeys(&ServiceKeyName, 0x20019ui64, &ServiceHandle, 0i64, 0) >= 0 )
    {
      LODWORD(CreateEnum) = 131097;
      if( PnpCtxRegOpenKey(
             *(&stru_140CF2E80 + 607),
             ServiceHandle,
             (WCHAR *)L"Parameters",
             0i64,
             (UINT64)CreateEnum,
             (VOID **)Handle) >= 0 )
      {
        HIDWORD(RegType) = 4;
        if( PnpCtxRegQueryValue(
               v5,
               *(VOID **)Handle,
               (WCHAR *)L"DriverUpdatesPending",
               &RegType,
               &Data,
               (UINT64 *)((char *)&RegType + 4)) >= 0
          && RegType == 0x400000004i64
          && Data )
        {
          LODWORD(CheckStamp) = 0;
          LODWORD(MatchingChangeStampa) = 0;
          ZwUpdateWnfStateData(
            &WNF_PNPC_DEVICE_INSTALL_REQUESTED,
            0i64,
            0i64,
            0i64,
            0i64,
            (UINT64)MatchingChangeStampa,
            (UINT64)CheckStamp);
        }
        ZwClose(Handle[0]);
      }
      ZwClose((_HANDLE)ServiceHandle);
      PiDevCfgFlags |= 2u;
    }
    PiDevCfgMode = v17;
    PiDevCfgOptions = v18;
    if( v17 )
    {
      if( (PiDevCfgFlags & 2) == 0 || (v18 & 0x20) != 0 )
      {
        SyncNodesUpdated = PiDrvDbQuerySyncNodesUpdated(0, &v16[1]);
        v0 = v16[1];
        if( SyncNodesUpdated >= 0 )
        {
          if( v16[1] )
            PiDevCfgFlags |= 1u;
        }
      }
      if( v16[0] == -1 )
        PiDevCfgFlags |= 1u;
    }
    if( (PiDevCfgFlags & 1) != 0 )
    {
      if( !RtlIsStateSeparationEnabled() || (ObjectProperties = PiDrvDbEnumNodes(), ObjectProperties >= 0) )
      {
        ObjectProperties = PiDmEnumObjectsWithCallback(
                             1,
                             (INT64)PiDevCfgInitDeviceCallback,
                             0i64,
                             v8,
                             CreateEnum,
                             MatchingChangeStampa,
                             CheckStamp);
        if( ObjectProperties >= 0 )
        {
          if( v16[0] == -1 )
          {
            LODWORD(PropertyKey) = 0;
            LODWORD(v14) = 0;
            PiDevCfgSetObjectProperty(
              *(&stru_140CF2E80 + 607),
              0i64,
              (const PNP_OBJECT_TYPE)L"SYSTEM",
              (WCHAR *)7,
              0i64,
              MatchingChangeStampb,
              (UINT64)&DEVPKEY_DriverDatabase_Updated,
              v14,
              0i64,
              PropertyKey);
          }
          if( v0 )
            PiDrvDbQuerySyncNodesUpdated(1, 0i64);
        }
      }
    }
  }
  return ObjectProperties;
}

Referenced by:

IopInitializePlugPlayServices