PpDevCfgInit

INT64 __stdcall PpDevCfgInit(){
  CHAR v0; 
  INT64 v1; 
  int ObjectProperties; 
  int v3; 
  CHAR v4; 
  __int64 v5; 
  int SyncNodesUpdated; 
  UINT64 v8; 
  INT64 v9; 
  INT64 a8; 
  INT64 a10; 
  INT64 a11; 
  CHAR v13[4]; 
  int v14; 
  int v15; 
  int v16; 
  int a6; 
  int a6_4; 
  HANDLE Handle; 
  HANDLE ServiceHandle; 
  UNICODE_STRING ServiceKeyName; 
  INT64 result; 
  int v23; 
  int *v24; 
  int v25; 
  int v26; 
  __int64 *v27; 
  int v28; 
  int *v29; 
  int v30; 
  int v31; 
  const INT64 *v32; 
  int v33; 
  CHAR *v34; 
  int v35; 
  int v36; 
  v14 = 0;
  v15 = 0;
  v0 = 0;
  v13[0] = 0;
  v13[1] = 0;
  *(_DWORD *)(&ServiceKeyName.MaximumLength + 1) = 0;
  ServiceHandle = 0i64;
  Handle = 0i64;
  a6_4 = 0;
  v16 = 0;
  memset((INT64)&result, 0i64);
  LODWORD(v8) = 3;
  result = (INT64)DEVPKEY_DriverDatabase_ConfigMode;
  v23 = 7;
  v24 = &v14;
  v25 = 4;
  v27 = DEVPKEY_DriverDatabase_ConfigOptions;
  v28 = 7;
  v29 = &v15;
  v32 = &DEVPKEY_DriverDatabase_Updated;
  v34 = v13;
  v30 = 4;
  v33 = 17;
  v35 = 1;
  ObjectProperties = PiDevCfgQueryObjectProperties(v1, (INT64)L"SYSTEM", 7ui64, 0i64, (INT64)&result, v8);
  if( ObjectProperties >= 0 )
  {
    if( v26 >= 0 )
      v14 = (v14 & 3) != 0 ? v14 : 0;
    else
      v14 = 3;
    v3 = v15;
    *(_DWORD *)&ServiceKeyName.Length = 1835034;
    if( v31 < 0 )
      v3 = 0;
    v15 = v3;
    v4 = v13[0];
    if( v36 < 0 )
      v4 = 0;
    v13[0] = v4;
    ServiceKeyName.Buffer = L"DeviceInstall";
    if( PipOpenServiceEnumKeys(&ServiceKeyName, 0x20019ui64, &ServiceHandle, 0i64, 0) >= 0 )
    {
      if( (int)PnpCtxRegOpenKey(PiPnpRtlCtx, (char *)ServiceHandle, L"Parameters", 0, 0x20019u, &Handle) >= 0 )
      {
        a6 = 4;
        if( (int)PnpCtxRegQueryValue(v5, Handle, L"DriverUpdatesPending", &v16, &a6_4, (__int64)&a6) >= 0
          && v16 == 4
          && a6 == 4
          && a6_4 )
        {
          LODWORD(v9) = 0;
          ZwUpdateWnfStateData();
        }
        ZwClose(Handle);
      }
      ZwClose(ServiceHandle);
      PiDevCfgFlags |= 2u;
    }
    PiDevCfgMode = v14;
    PiDevCfgOptions = v15;
    if( v14 )
    {
      if( (PiDevCfgFlags & 2) == 0 || (v15 & 0x20) != 0 )
      {
        SyncNodesUpdated = PiDrvDbQuerySyncNodesUpdated(0, &v13[1]);
        v0 = v13[1];
        if( SyncNodesUpdated >= 0 )
        {
          if( v13[1] )
            PiDevCfgFlags |= 1u;
        }
      }
      if( v13[0] == -1 )
        PiDevCfgFlags |= 1u;
    }
    if( (PiDevCfgFlags & 1) != 0 )
    {
      if( !RtlIsStateSeparationEnabled() || (ObjectProperties = PiDrvDbEnumNodes(), ObjectProperties >= 0) )
      {
        ObjectProperties = PiDmEnumObjectsWithCallback(
                             1,
                             (__int64(__fastcall *)(void *, __int64, char *))PiDevCfgInitDeviceCallback,
                             0i64);
        if( ObjectProperties >= 0 )
        {
          if( v13[0] == -1 )
          {
            LODWORD(a11) = 0;
            LODWORD(a10) = 0;
            LODWORD(a8) = 0;
            PiDevCfgSetObjectProperty(
              PiPnpRtlCtx,
              0i64,
              (WCHAR *)L"SYSTEM",
              7ui64,
              0i64,
              v9,
              (INT64)&DEVPKEY_DriverDatabase_Updated,
              a8,
              0i64,
              a10,
              a11);
          }
          if( v0 )
            PiDrvDbQuerySyncNodesUpdated(1, 0i64);
        }
      }
    }
  }
  return(unsigned int)ObjectProperties;
}

Referenced by:

IopInitializePlugPlayServices