PiDevCfgRequestDriverConfigurations

NTSTATUS __stdcall PiDevCfgRequestDriverConfigurations(POOL_TYPE DeviceContext, PI_DEVCFG_DRIVER_NODE *DriverNode){
  __int64 v2; 
  NTSTATUS DriverConfiguration; 
  int appended; 
  PI_DEVCFG_DRIVER_NODE *v6; 
  PI_DEVCFG_DRIVER_NODE *i; 
  VOID *v9; 
  WCHAR *v10; 
  _DEVPROPKEY *PropertyKey; 
  _UNICODE_STRING MultiSz; 

  v2 = *(_QWORD *)&DeviceContext;
  *(_QWORD *)&MultiSz.Length = 0i64;
  MultiSz.Buffer = 0i64;
  DriverConfiguration = PiDevCfgQueryDriverConfiguration(DriverNode);
  appended = DriverConfiguration;
  if( (int)(DriverConfiguration + 0x80000000) < 0 || DriverConfiguration == -1073740653 )
  {
    appended = PiDevCfgAppendMultiSz(&MultiSz, (const VOID **)DriverNode + 49, 0i64, 1u);
    if( appended >= 0 )
    {
      v6 = DriverNode + 52;
      for( i = *(PI_DEVCFG_DRIVER_NODE **)v6; i != v6; i = *(PI_DEVCFG_DRIVER_NODE **)i )
      {
        appended = PiDevCfgQueryDriverConfiguration(i);
        if( ((appended + 0x80000000) & 0x80000000) == 0 && appended != -1073740653 )
          goto LABEL_13;
        appended = PiDevCfgAppendMultiSz(&MultiSz, (const VOID **)i + 49, 0i64, 1u);
        if( appended < 0 )
          goto LABEL_13;
      }
      if( MultiSz.Buffer )
      {
        LODWORD(PropertyKey) = MultiSz.Length;
        LODWORD(v10) = 8210;
        appended = PiDevCfgSetObjectProperty(
                     *(&stru_140CF2E80 + 607),
                     (PI_DEVCFG_DEVICE_CONTEXT *)v2,
                     *(_QWORD *)(v2 + 8),
                     (WCHAR *)1,
                     *(WCHAR **)(v2 + 16),
                     v9,
                     (UINT64)&DEVPKEY_Device_RequestConfigurationIds,
                     v10,
                     (UINT64)MultiSz.Buffer,
                     PropertyKey);
      }
      else
      {
        appended = -1073740653;
      }
    }
  }
LABEL_13:
  RtlFreeAnsiString(&MultiSz);
  return appended;
}

Referenced by:

PiDevCfgProcessDevice