PiDevCfgConfigureDevice

NTSTATUS __stdcall PiDevCfgConfigureDevice(
        _DEVICE_NODE *DeviceNode,
        PI_DEVCFG_DEVICE_CONTEXT *DeviceContext,
        PI_DEVCFG_DRIVER_NODE *DriverNode,
        UINT64 *ConfigFlags,
        UINT64 *ConfigStatus){
  _UNICODE_STRING *p_InstancePath; 
  PI_DEVCFG_QUERY_PROPERTY_PARAM *v8; 
  PI_DEVCFG_DRIVER_NODE v9; 
  WCHAR *v10; 
  INT64 v11; 
  int DriverConfiguration; 
  PI_DEVCFG_DRIVER_NODE v13; 
  PI_DEVCFG_DRIVER_NODE *v14; 
  _KEXCEPTION_FRAME *v15; 
  int v16; 
  wchar_t *v17; 
  PNP_OBJECT_TYPE v18; 
  char v19; 
  char v20; 
  _BYTE *v21; 
  char v22; 
  _DEVICE_NODE *v23; 
  INT64 v24; 
  wchar_t *v25; 
  UINT64 v26; 
  UINT64 *v27; 
  PI_DEVCFG_DRIVER_NODE *i; 
  UINT64 *v29; 
  UINT64 *v30; 
  _DEVICE_NODE *v31; 
  _UNICODE_STRING v32; 
  wchar_t *v33; 
  UINT64 v34; 
  WCHAR *v35; 
  WCHAR *v36; 
  NTSTATUS v38; 
  char v39; 
  unsigned int v40; 
  wchar_t *v41; 
  WCHAR *v42; 
  int v43; 
  wchar_t *v44; 
  WCHAR *v45; 
  char v46; 
  PI_DEVCFG_DRIVER_NODE *v47; 
  __int64 v48; 
  __int64 v49; 
  VOID *v50; 
  __int64 v51; 
  VOID *v52; 
  wchar_t *v53; 
  WCHAR *v54; 
  wchar_t *v55; 
  __int64 v56; 
  __int64 v57; 
  INT64 v58; 
  INT64 v59; 
  VOID *v60; 
  VOID *v61; 
  VOID *v62; 
  VOID *v63; 
  VOID *v64; 
  VOID *v65; 
  VOID *v66; 
  VOID *v67; 
  VOID *v68; 
  VOID *v69; 
  VOID *v70; 
  VOID *v71; 
  INT64 PropertyType; 
  WCHAR *v73; 
  WCHAR *v74; 
  WCHAR *v75; 
  WCHAR *v76; 
  WCHAR *v77; 
  WCHAR *v78; 
  WCHAR *v79; 
  WCHAR *v80; 
  WCHAR *v81; 
  WCHAR *v82; 
  WCHAR *v83; 
  WCHAR *v84; 
  wchar_t *PropertySize; 
  _DEVPROPKEY *PropertyKey; 
  _DEVPROPKEY *PropertyKeya; 
  _DEVPROPKEY *PropertyKeyb; 
  _DEVPROPKEY *PropertyKeyc; 
  _DEVPROPKEY *PropertyKeyd; 
  _DEVPROPKEY *PropertyKeye; 
  _DEVPROPKEY *PropertyKeyf; 
  _DEVPROPKEY *PropertyKeyg; 
  _DEVPROPKEY *PropertyKeyh; 
  _DEVPROPKEY *PropertyKeyi; 
  _DEVPROPKEY *PropertyKeyj; 
  _DEVPROPKEY *PropertyKeyk; 
  char v98; 
  char v99; 
  _WORD v100[5]; 
  char v101[12]; 
  int v102; 
  INT64 v103; 
  PI_DEVCFG_DRIVER_NODE v104; 
  PI_DEVCFG_DRIVER_NODE v105; 
  _HANDLE Handle[3]; 
  _UNICODE_STRING StringToken; 
  _UNICODE_STRING DriverNodeStrongName; 
  _UNICODE_STRING DeviceManufacturer; 
  INT64 v110; 
  UINT64 ConfigFlagsa; 
  UINT64 *v112; 
  UINT64 *v113; 
  WCHAR *ClassGuidString; 
  _UNICODE_STRING IndirectString; 
  _UNICODE_STRING v116; 
  _UNICODE_STRING UnicodeString; 
  UINT64 Buffer; 
  PVOID P; 
  VOID *KeyHandle; 
  WCHAR *ServiceName; 
  _UNICODE_STRING DestinationString; 
  _UNICODE_STRING MultiSz; 
  _UNICODE_STRING v124; 
  _UNICODE_STRING v125; 
  _UNICODE_STRING v126; 
  _UNICODE_STRING String1; 
  _UNICODE_STRING v128; 
  _UNICODE_STRING v129; 
  _UNICODE_STRING v130; 
  _UNICODE_STRING StringValue; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  __int128 Source2; 
  INT64 v134[22]; 

  *(_QWORD *)&v101[4] = DeviceNode;
  v112 = ConfigFlags;
  *(_QWORD *)&Handle[1] = 0i64;
  v113 = ConfigStatus;
  *(_DWORD *)ConfigFlags = 1024;
  p_InstancePath = &DeviceNode->InstancePath;
  *(_DWORD *)&v100[1] = 1024;
  *(_DWORD *)ConfigStatus = 0;
  v8 = (PI_DEVCFG_QUERY_PROPERTY_PARAM *)*((_QWORD *)DeviceContext + 2);
  v9 = 1024;
  KeyHandle = 0i64;
  *(_DWORD *)(&v130.MaximumLength + 1) = 0;
  *(_QWORD *)&UnicodeString.Length = 0i64;
  DriverNodeStrongName = 0i64;
  UnicodeString.Buffer = 0i64;
  v10 = 0i64;
  *(_QWORD *)&MultiSz.Length = 0i64;
  ServiceName = 0i64;
  MultiSz.Buffer = 0i64;
  *(_QWORD *)&v124.Length = 0i64;
  Buffer = 0i64;
  v124.Buffer = 0i64;
  *(_QWORD *)&v125.Length = 0i64;
  v125.Buffer = 0i64;
  *(_QWORD *)&v126.Length = 0i64;
  v126.Buffer = 0i64;
  *(_QWORD *)&v128.Length = 0i64;
  v128.Buffer = 0i64;
  *(_QWORD *)&v129.Length = 0i64;
  v129.Buffer = 0i64;
  v105 = 0;
  v104 = 0;
  *(_DWORD *)v101 = 0;
  ConfigFlagsa = 0i64;
  ClassGuidString = 0i64;
  Source2 = 0i64;
  *(_QWORD *)&DestinationString.Length = 0i64;
  DestinationString.Buffer = 0i64;
  *(_QWORD *)&StringToken.Length = 0i64;
  StringToken.Buffer = 0i64;
  *(_QWORD *)&DeviceManufacturer.Length = 0i64;
  DeviceManufacturer.Buffer = 0i64;
  *(_QWORD *)&IndirectString.Length = 0i64;
  IndirectString.Buffer = 0i64;
  *(_QWORD *)&StringValue.Length = 0i64;
  StringValue.Buffer = 0i64;
  *(_QWORD *)&String1.Length = 0i64;
  String1.Buffer = 0i64;
  v98 = 0;
  Handle[0] = 0;
  v110 = 0i64;
  v99 = 0;
  v100[0] = 0;
  P = 0i64;
  v102 = 0;
  *(_QWORD *)&v116.Length = 0i64;
  v116.Buffer = 0i64;
  LOBYTE(v100[3]) = 0;
  v103 = 0i64;
  *(_DWORD *)&v130.Length = 68157440;
  v130.Buffer = (wchar_t *)ExAllocatePoolWithTag(1ui64, 0x410ui64, 1667526736i64);
  if( !v130.Buffer )
    goto LABEL_157;
  if( !DriverNode )
    goto LABEL_33;
  DriverConfiguration = PiDevCfgQueryDriverConfiguration(DriverNode);
  if( DriverConfiguration < 0 )
    goto LABEL_139;
  ClassGuidString = (WCHAR *)*((_QWORD *)DriverNode + 33);
  if( *((_QWORD *)DriverNode + 37) )
  {
    if( !PnpDuplicateUnicodeString((__int64)&UnicodeString, (__int64)(DriverNode + 72)) )
      goto LABEL_157;
  }
  if( *((_QWORD *)DriverNode + 39) )
  {
    if( !PnpDuplicateUnicodeString((__int64)&MultiSz, (__int64)(DriverNode + 76)) )
      goto LABEL_157;
    ServiceName = MultiSz.Buffer;
  }
  if( !*((_QWORD *)DriverNode + 41) )
    goto LABEL_8;
  if( !PnpDuplicateUnicodeString((__int64)&v124, (__int64)(DriverNode + 80)) )
  {
LABEL_157:
    DriverConfiguration = -1073741670;
    goto LABEL_139;
  }
  Buffer = (UINT64)v124.Buffer;
LABEL_8:
  if( *((_QWORD *)DriverNode + 43) && !PnpDuplicateUnicodeString((__int64)&v125, (__int64)(DriverNode + 84))
    || *((_QWORD *)DriverNode + 45) && !PnpDuplicateUnicodeString((__int64)&v126, (__int64)(DriverNode + 88)) )
  {
    goto LABEL_157;
  }
  v9 = DriverNode[96];
  v13 = DriverNode[46];
  v105 = DriverNode[97];
  v14 = (PI_DEVCFG_DRIVER_NODE *)*((_QWORD *)DriverNode + 26);
  *(_DWORD *)&v100[1] = v9;
  v104 = v13;
  if( v14 == DriverNode + 52 )
  {
    v10 = ServiceName;
  }
  else
  {
    do
    {
      v38 = PiDevCfgQueryDriverConfiguration(v14);
      DriverConfiguration = v38;
      if( v38 >= 0 )
      {
        if( *((_QWORD *)v14 + 37) )
        {
          v14[46] &= ~1u;
        }
        else
        {
          if( *((_QWORD *)v14 + 39) )
          {
            DriverConfiguration = PiDevCfgAppendMultiSz(&MultiSz, 0i64, (const VOID **)v14 + 38, 0);
            if( DriverConfiguration < 0 )
              goto LABEL_139;
          }
          if( *((_QWORD *)v14 + 41) )
          {
            DriverConfiguration = PiDevCfgAppendMultiSz(&v124, 0i64, (const VOID **)v14 + 40, 0);
            if( DriverConfiguration < 0 )
              goto LABEL_139;
          }
          if( *((_QWORD *)v14 + 43) )
          {
            DriverConfiguration = PiDevCfgAppendMultiSz(&v125, 0i64, (const VOID **)v14 + 42, 0);
            if( DriverConfiguration < 0 )
              goto LABEL_139;
          }
          if( *((_QWORD *)v14 + 45) )
          {
            DriverConfiguration = PiDevCfgAppendMultiSz(&v126, 0i64, (const VOID **)v14 + 44, 0);
            if( DriverConfiguration < 0 )
              goto LABEL_139;
          }
          v9 |= v14[96];
          v105 |= v14[97];
          v104 |= v14[46];
          *(_DWORD *)&v100[1] = v9;
          DriverConfiguration = PiDevCfgAppendMultiSz(&v128, (const VOID **)v14 + 5, 0i64, 0);
          if( DriverConfiguration < 0 )
            goto LABEL_139;
          DriverConfiguration = PiDevCfgAppendMultiSz(&v129, (const VOID **)v14 + 49, 0i64, 0);
          if( DriverConfiguration < 0 )
            goto LABEL_139;
        }
      }
      else
      {
        if( v38 != -1073740653 )
          break;
        if( !PnpBootMode || (PiDevCfgFlags & 2) == 0 )
          goto LABEL_139;
        v9 |= 0x400u;
        DriverConfiguration = 0;
        *(_DWORD *)&v100[1] = v9;
      }
      v14 = *(PI_DEVCFG_DRIVER_NODE **)v14;
    }
    while( v14 != DriverNode + 52 );
    v10 = MultiSz.Buffer;
    LOBYTE(v13) = v104;
    ServiceName = MultiSz.Buffer;
    Buffer = (UINT64)v124.Buffer;
  }
  if( DriverConfiguration < 0 )
    goto LABEL_139;
  if( (PiDevCfgFlags & 2) != 0 )
  {
    if( (v9 & 0x400) != 0
      && (DriverNode[102] & 2) == 0
      && (PiDevCfgOptions & 1) == 0
      && !InitIsWinPEMode
      && !PnpBootMode )
    {
      goto LABEL_188;
    }
    if( (v13 & 0x40) != 0 )
    {
      if( !PnpBootMode )
        goto LABEL_188;
      v9 |= 0x400u;
      *(_DWORD *)&v100[1] = v9;
    }
  }
  memset(v134, 0i64, 0xA8u);
  LOBYTE(v59) = 1;
  LODWORD(v134[1]) = 288;
  LODWORD(v134[4]) = 0x1000000;
  v134[2] = (INT64)L"Description";
  LODWORD(v134[11]) = 0x1000000;
  v15 = (_KEXCEPTION_FRAME *)*((_QWORD *)DriverNode + 3);
  v134[3] = (INT64)&StringToken;
  v134[9] = (INT64)L"Manufacturer";
  LODWORD(v134[8]) = 288;
  v134[10] = (INT64)&DeviceManufacturer;
  LOBYTE(v16) = RtlpQueryRegistryValues((_KTRAP_FRAME *)0xC0000000i64, v15);
  DriverConfiguration = v16;
  if( v16 < 0 )
    goto LABEL_139;
  v17 = DeviceManufacturer.Buffer;
  if( !StringToken.Buffer
    && !DeviceManufacturer.Buffer
    && *((_QWORD *)DriverNode + 21)
    && (PiDevCfgFlags & 2) != 0
    && !InitIsWinPEMode )
  {
    if( !PnpBootMode )
      goto LABEL_188;
    v9 |= 0x400u;
    *(_DWORD *)&v100[1] = v9;
  }
  if( !StringToken.Length && StringToken.Buffer )
  {
    RtlFreeAnsiString(&StringToken);
    v17 = DeviceManufacturer.Buffer;
  }
  if( !DeviceManufacturer.Length && v17 )
    RtlFreeAnsiString(&DeviceManufacturer);
  v18 = (int)ClassGuidString;
  if( !ClassGuidString
    || (int)PnpOpenObjectRegKey(*(&stru_140CF2E80 + 607), (__int64)ClassGuidString, 2u, 131097, 0, (__int64)&Handle[1]) < 0 )
  {
    DriverConfiguration = 0;
    goto LABEL_211;
  }
  memset(v134, 0i64, 0xA0u);
  v134[0] = (INT64)&DEVPKEY_DeviceClass_Configurable;
  LODWORD(v134[1]) = 17;
  v134[2] = (INT64)&v98;
  LODWORD(v134[6]) = 17;
  v134[5] = (INT64)DEVPKEY_DeviceClass_PolicyExempt;
  LODWORD(v59) = 4;
  v134[7] = (INT64)&v99;
  LODWORD(v134[3]) = 1;
  v134[10] = (INT64)&DEVPKEY_DeviceClass_DefaultService;
  v134[12] = (INT64)&DestinationString;
  v134[15] = (INT64)DEVPKEY_DeviceClass_CompatibleFeatureScores;
  v134[17] = (INT64)&P;
  LODWORD(v134[8]) = 1;
  LODWORD(v134[11]) = 18;
  HIDWORD(v134[13]) = 6;
  LODWORD(v134[16]) = 4099;
  HIDWORD(v134[18]) = 2;
  DriverConfiguration = PiDevCfgQueryObjectProperties(
                          (WCHAR *)2,
                          v18,
                          (VOID *)2,
                          *(PI_DEVCFG_QUERY_PROPERTY_PARAM **)&Handle[1],
                          (UINT64)v134,
                          v59);
  if( DriverConfiguration < 0 )
    goto LABEL_139;
  v19 = v98;
  DriverConfiguration = 0;
  v20 = v99;
  if( SLODWORD(v134[4]) < 0 )
    v19 = 0;
  v98 = v19;
  if( SLODWORD(v134[9]) < 0 )
    v20 = 0;
  v99 = v20;
  if( SLODWORD(v134[14]) < 0 )
  {
    RtlInitUnicodeString(&DestinationString, 0i64);
    v19 = v98;
  }
  if( SLODWORD(v134[19]) >= 0 )
    HIDWORD(v110) = v134[18];
  else
    P = 0i64;
  if( !v19 )
  {
    PropertyKey = (_DEVPROPKEY *)((char *)&v103 + 4);
    if( PnpGetObjectProperty(
           *(&stru_140CF2E80 + 1214),
           (INT64)ClassGuidString,
           2i64,
           *(INT64 *)&Handle[1],
           0i64,
           (INT64)&DEVPKEY_DeviceClass_ConfigurableClassVersion,
           (INT64)&v103,
           (INT64)Handle) >= 0
      && v103 == 0x400000007i64 )
    {
      if( Handle[0] )
      {
        PropertyKey = (_DEVPROPKEY *)((char *)&v103 + 4);
        if( PnpGetObjectProperty(
               *(&stru_140CF2E80 + 1214),
               *((_QWORD *)DriverNode + 8),
               8i64,
               *((_QWORD *)DriverNode + 2),
               0i64,
               (INT64)&DEVPKEY_DriverPackage_ClassVersion,
               (INT64)&v103,
               (INT64)&v110) >= 0
          && v103 == 0x400000007i64 )
        {
          v39 = v98;
          if( (unsigned int)v110 >= Handle[0] )
            v39 = -1;
          v98 = v39;
LABEL_212:
          if( v39 || (PiDevCfgOptions & 1) != 0 || (PiDevCfgFlags & 2) == 0 )
            goto LABEL_32;
          if( PnpBootMode )
          {
            v9 |= 0x400u;
            *(_DWORD *)&v100[1] = v9;
            goto LABEL_32;
          }
LABEL_188:
          DriverConfiguration = -1073740651;
          goto LABEL_139;
        }
      }
    }
LABEL_211:
    v39 = v98;
    goto LABEL_212;
  }
LABEL_32:
  v21 = P;
  if( P )
  {
    v11 = 0i64;
    v40 = 0;
    if( !HIDWORD(v110) )
      goto LABEL_220;
    do
    {
      if( *v21 == *((_BYTE *)DriverNode + 110) )
        break;
      ++v40;
      ++v21;
    }
    while( v40 < HIDWORD(v110) );
    if( v40 >= HIDWORD(v110) )
LABEL_220:
      DriverConfiguration = -1073740764;
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
LABEL_33:
  if( (*DeviceContext & 1) == 0 )
  {
    memset(v134, 0i64, 0xA0u);
    v41 = p_InstancePath->Buffer;
    v134[0] = (INT64)&DEVPKEY_Device_ClassGuid;
    LODWORD(v59) = 3;
    v134[2] = (INT64)&Source2;
    LODWORD(v134[1]) = 13;
    v134[5] = (INT64)&DEVPKEY_Device_InstallFlags;
    v134[7] = (INT64)&v102;
    v134[10] = (INT64)&DEVPKEY_Device_DriverNodeStrongName;
    v134[12] = (INT64)&v116;
    LODWORD(v134[3]) = 16;
    LODWORD(v134[6]) = 7;
    LODWORD(v134[8]) = 4;
    LODWORD(v134[11]) = 18;
    HIDWORD(v134[13]) = 6;
    DriverConfiguration = PiDevCfgQueryObjectProperties(v42, (PNP_OBJECT_TYPE)v41, (VOID *)1, v8, (UINT64)v134, v59);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    if( SLODWORD(v134[4]) >= 0 )
      HIBYTE(v100[0]) = 1;
    else
      Source2 = 0i64;
    v43 = v102;
    if( SLODWORD(v134[9]) < 0 )
      v43 = 0;
    v102 = v43;
    if( SLODWORD(v134[14]) < 0 )
      RtlInitUnicodeString(&v116, 0i64);
  }
  if( !v99 )
  {
    if( (v102 & 4) == 0 )
      goto LABEL_36;
    if( !DriverNode )
      goto LABEL_238;
    memset(v134, 0i64, 0xA0u);
    v44 = p_InstancePath->Buffer;
    v134[0] = (INT64)&DEVPKEY_Device_DriverInfPath;
    LODWORD(v59) = 1;
    v134[2] = (INT64)&String1;
    LODWORD(v134[1]) = 18;
    HIDWORD(v134[3]) = 6;
    DriverConfiguration = PiDevCfgQueryObjectProperties(v45, (PNP_OBJECT_TYPE)v44, (VOID *)1, v8, (UINT64)v134, v59);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    if( SLODWORD(v134[4]) < 0 )
      RtlInitUnicodeString(&String1, 0i64);
    if( String1.Buffer && (unsigned __int8)RtlEqualUnicodeString(&String1, (PCUNICODE_STRING)(DriverNode + 10), 1u) )
    {
LABEL_238:
      v46 = -1;
      v99 = -1;
    }
    else
    {
      v46 = v99;
    }
    if( !v46 )
    {
LABEL_36:
      DriverConfiguration = PiDevCfgEnforceDevicePolicy(*(_DEVICE_NODE **)&v101[4], DeviceContext, ClassGuidString);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
  }
  if( *(_QWORD *)&Handle[1] )
  {
    ObjectAttributes.RootDirectory = *(void **)&Handle[1];
    DriverNodeStrongName.Buffer = L"Configuration";
    *(_DWORD *)&DriverNodeStrongName.Length = 1835034;
    *(_QWORD *)&ObjectAttributes.Length = 48i64;
    *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
    ObjectAttributes.ObjectName = &DriverNodeStrongName;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    DriverConfiguration = ZwOpenKey(&KeyHandle, 0x20019ui64, &ObjectAttributes, v11, v58, v59, PropertyType, (INT64)v73);
    if( DriverConfiguration != -1073741772 )
    {
      if( DriverConfiguration < 0 )
        goto LABEL_139;
      DriverConfiguration = PiDevCfgVerifyDeviceAllowed(*(_DEVICE_NODE **)&v101[4], KeyHandle);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
  }
  if( (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)&v101[4] + 32i64) + 8i64) + 16i64) & 4) != 0
    && ((PropertyKey = (_DEVPROPKEY *)((char *)&v103 + 4),
         PnpGetObjectProperty(
           *(&stru_140CF2E80 + 1214),
           (INT64)p_InstancePath->Buffer,
           1i64,
           (INT64)v8,
           0i64,
           (INT64)&DEVPKEY_Device_Reported,
           (INT64)&v103,
           (INT64)v100) < 0)
     || v103 != 0x100000011i64) )
  {
    v22 = 0;
    LOBYTE(v100[0]) = 0;
  }
  else
  {
    v22 = v100[0];
  }
  if( DriverNode
    && !UnicodeString.Buffer
    && !DestinationString.Buffer
    && !v22
    && (*(_DWORD *)(*(_QWORD *)&v101[4] + 560i64) & 0x100) == 0 )
  {
    DriverConfiguration = -1073740652;
    goto LABEL_139;
  }
  if( (*DeviceContext & 1) == 0 )
  {
    if( DriverNode )
    {
      if( PnpIsNullGuid(&Source2) )
        goto LABEL_44;
      v47 = DriverNode + 60;
      if( PnpIsNullGuid(DriverNode + 60) )
        goto LABEL_44;
      v48 = Source2 - *(_QWORD *)v47;
      if( (_QWORD)Source2 == *(_QWORD *)v47 )
        v48 = *((_QWORD *)&Source2 + 1) - *((_QWORD *)DriverNode + 31);
      if( !v48 )
        goto LABEL_44;
    }
    else if( !HIBYTE(v100[0]) || (*(_DWORD *)(*(_QWORD *)&v101[4] + 560i64) & 0x100) == 0 )
    {
      CmDeleteDeviceRegKey(*(&stru_140CF2E80 + 607), p_InstancePath->Buffer, 0x11ui64, 0i64);
    }
    CmDeleteDeviceRegKey(*(&stru_140CF2E80 + 607), p_InstancePath->Buffer, 0x12ui64, 0i64);
  }
LABEL_44:
  v23 = *(_DEVICE_NODE **)&v101[4];
  if( PiDevCfgMigrateDevice(
         *(_DEVICE_NODE **)&v101[4],
         DeviceContext,
         (_UNICODE_STRING *)((unsigned __int64)(DriverNode + 64) & -(__int64)(DriverNode != 0i64)),
         (_UNICODE_STRING *)((unsigned __int64)(DriverNode + 10) & -(__int64)(DriverNode != 0i64)),
         &ConfigFlagsa,
         (UINT64 *)((char *)&ConfigFlagsa + 4)) >= 0 )
  {
    v9 |= ConfigFlagsa;
    *(_DWORD *)&v100[1] = v9;
    *(_DWORD *)v101 = HIDWORD(ConfigFlagsa);
  }
  if( (*DeviceContext & 1) == 0 )
  {
    PiDevCfgResetDeviceDriverSettings(
      v23,
      DeviceContext,
      (_GUID *)((unsigned __int64)(DriverNode + 60) & -(__int64)(DriverNode != 0i64)),
      *(VOID **)&Handle[1],
      (_GUID *)((unsigned __int64)&Source2 & -(__int64)(HIBYTE(v100[0]) != 0)));
    if( *(&stru_140CF2E80 + 607) && (v49 = *(_QWORD *)(*(&stru_140CF2E80 + 607) + 224i64)) != 0 )
      v50 = *(VOID **)(v49 + 8);
    else
      v50 = 0i64;
    RegRtlDeleteTreeInternal(v8, (WCHAR *)L"Devices", v50, 0);
    if( *(&stru_140CF2E80 + 607) && (v51 = *(_QWORD *)(*(&stru_140CF2E80 + 607) + 224i64)) != 0 )
      v52 = *(VOID **)(v51 + 8);
    else
      v52 = 0i64;
    RegRtlDeleteTreeInternal(v8, (WCHAR *)L"Filters", v52, 0);
  }
  if( !DriverNode || PnpIsNullGuid(DriverNode + 60) )
  {
    if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKey) = 0;
      LODWORD(v73) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v60,
        (UINT64)&DEVPKEY_Device_ClassGuid,
        v73,
        0i64,
        PropertyKey);
    }
  }
  else
  {
    LODWORD(PropertyKey) = 16;
    LODWORD(v73) = 13;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_ClassGuid,
                            v73,
                            (UINT64)(DriverNode + 60),
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  v25 = UnicodeString.Buffer;
  if( UnicodeString.Buffer )
  {
    if( UnicodeString.Length )
    {
      LODWORD(PropertyKey) = UnicodeString.Length + 2;
      PropertySize = UnicodeString.Buffer;
      goto LABEL_53;
    }
LABEL_155:
    if( (*DeviceContext & 1) == 0 && (UnicodeString.Buffer && DestinationString.Buffer || !LOBYTE(v100[0])) )
    {
      LODWORD(PropertyKey) = 0;
      LODWORD(v73) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v60,
        (UINT64)&DEVPKEY_Device_Service,
        v73,
        0i64,
        PropertyKey);
    }
    goto LABEL_54;
  }
  if( !DestinationString.Buffer || !DestinationString.Length )
    goto LABEL_155;
  LODWORD(PropertyKey) = DestinationString.Length + 2;
  PropertySize = DestinationString.Buffer;
LABEL_53:
  LODWORD(v73) = 18;
  DriverConfiguration = PiDevCfgSetObjectProperty(
                          *(&stru_140CF2E80 + 607),
                          DeviceContext,
                          (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                          (WCHAR *)1,
                          (WCHAR *)v8,
                          v60,
                          (UINT64)&DEVPKEY_Device_Service,
                          v73,
                          (UINT64)PropertySize,
                          PropertyKey);
  if( DriverConfiguration < 0 )
    goto LABEL_139;
LABEL_54:
  if( v10 )
  {
    LODWORD(PropertyKey) = MultiSz.Length;
    LODWORD(v73) = 8210;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_LowerFilters,
                            v73,
                            (UINT64)v10,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_LowerFilters,
      v73,
      0i64,
      PropertyKey);
  }
  if( Buffer )
  {
    LODWORD(PropertyKey) = v124.Length;
    LODWORD(v73) = 8210;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_UpperFilters,
                            v73,
                            Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_UpperFilters,
      v73,
      0i64,
      PropertyKey);
  }
  if( DriverNode && StringToken.Buffer )
  {
    DriverConfiguration = PiDevCfgBuildIndirectString(DriverNode, &StringToken, &IndirectString, &StringValue);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    if( (v9 & 0x400) == 0 || (PiDevCfgOptions & 1) != 0 )
    {
      LODWORD(PropertyKey) = IndirectString.Length + 2;
      LODWORD(v73) = 18;
      DriverConfiguration = PiDevCfgSetObjectProperty(
                              *(&stru_140CF2E80 + 607),
                              DeviceContext,
                              (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                              (WCHAR *)1,
                              (WCHAR *)v8,
                              v60,
                              (UINT64)&DEVPKEY_Device_DeviceDesc,
                              v73,
                              (UINT64)IndirectString.Buffer,
                              PropertyKey);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
    if( StringValue.Buffer )
    {
      LODWORD(PropertyKey) = StringValue.Length + 2;
      LODWORD(v73) = 18;
      DriverConfiguration = PiDevCfgSetObjectProperty(
                              *(&stru_140CF2E80 + 607),
                              DeviceContext,
                              (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                              (WCHAR *)1,
                              (WCHAR *)v8,
                              v60,
                              (UINT64)&DEVPKEY_Device_DriverDesc,
                              v73,
                              (UINT64)StringValue.Buffer,
                              PropertyKey);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
    else if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKey) = 0;
      LODWORD(v73) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v60,
        (UINT64)&DEVPKEY_Device_DriverDesc,
        v73,
        0i64,
        PropertyKey);
    }
    RtlFreeAnsiString(&IndirectString);
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverDesc,
      v73,
      0i64,
      PropertyKey);
    if( DriverNode )
      goto LABEL_69;
    memset(v134, 0i64, 0xA0u);
    v53 = p_InstancePath->Buffer;
    v134[0] = (INT64)&DEVPKEY_Device_BusReportedDeviceDesc;
    LODWORD(v60) = 1;
    v134[2] = (INT64)&StringToken;
    LODWORD(v134[1]) = 18;
    HIDWORD(v134[3]) = 6;
    if( PiDevCfgQueryObjectProperties(v54, (PNP_OBJECT_TYPE)v53, (VOID *)1, v8, (UINT64)v134, (UINT64)v60) < 0
      || SLODWORD(v134[4]) < 0
      || !StringToken.Buffer )
    {
LABEL_290:
      if( (*DeviceContext & 1) == 0 )
      {
        LODWORD(PropertyKey) = 0;
        LODWORD(v73) = 0;
        PiDevCfgSetObjectProperty(
          *(&stru_140CF2E80 + 607),
          DeviceContext,
          (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
          (WCHAR *)1,
          (WCHAR *)v8,
          v60,
          (UINT64)&DEVPKEY_Device_Manufacturer,
          v73,
          0i64,
          PropertyKey);
      }
      goto LABEL_72;
    }
    LODWORD(PropertyKey) = StringToken.Length + 2;
    LODWORD(v73) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DeviceDesc,
                            v73,
                            (UINT64)StringToken.Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  if( !DriverNode )
    goto LABEL_290;
LABEL_69:
  if( !DeviceManufacturer.Buffer )
    goto LABEL_290;
  DriverConfiguration = PiDevCfgBuildIndirectString(DriverNode, &DeviceManufacturer, &IndirectString, 0i64);
  if( DriverConfiguration < 0 )
    goto LABEL_139;
  LODWORD(PropertyKey) = IndirectString.Length + 2;
  LODWORD(v73) = 18;
  DriverConfiguration = PiDevCfgSetObjectProperty(
                          *(&stru_140CF2E80 + 607),
                          DeviceContext,
                          (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                          (WCHAR *)1,
                          (WCHAR *)v8,
                          v60,
                          (UINT64)&DEVPKEY_Device_Manufacturer,
                          v73,
                          (UINT64)IndirectString.Buffer,
                          PropertyKey);
  if( DriverConfiguration < 0 )
    goto LABEL_139;
LABEL_72:
  if( DriverNode && (v26 = *((_QWORD *)DriverNode + 35)) != 0 )
  {
    LODWORD(PropertyKey) = *((unsigned __int16 *)DriverNode + 136) + 2;
    LODWORD(v73) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DriverProvider,
                            v73,
                            v26,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverProvider,
      v73,
      0i64,
      PropertyKey);
  }
  if( DriverNode )
  {
    LODWORD(PropertyKey) = 8;
    LODWORD(v73) = 16;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DriverDate,
                            v73,
                            (UINT64)(DriverNode + 28),
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    LODWORD(v61) = *((unsigned __int16 *)DriverNode + 60);
    DriverConfiguration = RtlUnicodeStringPrintf(&v130, (WCHAR *)L"%u.%u.%u.%u");
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    LODWORD(PropertyKeya) = v130.Length + 2;
    LODWORD(v74) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v61,
                            (UINT64)&DEVPKEY_Device_DriverVersion,
                            v74,
                            (UINT64)v130.Buffer,
                            PropertyKeya);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    LODWORD(PropertyKeyb) = *((unsigned __int16 *)DriverNode + 20) + 2;
    LODWORD(v75) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v62,
                            (UINT64)&DEVPKEY_Device_DriverInfPath,
                            v75,
                            *((_QWORD *)DriverNode + 6),
                            PropertyKeyb);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    LODWORD(PropertyKeyc) = *((unsigned __int16 *)DriverNode + 44) + 2;
    LODWORD(v76) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v63,
                            (UINT64)&DEVPKEY_Device_DriverInfSection,
                            v76,
                            *((_QWORD *)DriverNode + 12),
                            PropertyKeyc);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    DriverConfiguration = PiDevCfgBuildDriverNodeStrongName(
                            DriverNode,
                            &DeviceManufacturer,
                            &StringToken,
                            &DriverNodeStrongName);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    if( v116.Buffer && !RtlCompareUnicodeString(&v116, &DriverNodeStrongName, 1u) )
      RtlFreeAnsiString(&v116);
    LODWORD(PropertyKeyd) = DriverNodeStrongName.Length + 2;
    LODWORD(v77) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v64,
                            (UINT64)&DEVPKEY_Device_DriverNodeStrongName,
                            v77,
                            (UINT64)DriverNodeStrongName.Buffer,
                            PropertyKeyd);
    RtlFreeAnsiString(&DriverNodeStrongName);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverDate,
      v73,
      0i64,
      PropertyKey);
    LODWORD(PropertyKeyg) = 0;
    LODWORD(v80) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v67,
      (UINT64)&DEVPKEY_Device_DriverVersion,
      v80,
      0i64,
      PropertyKeyg);
    LODWORD(PropertyKeyh) = 0;
    LODWORD(v81) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v68,
      (UINT64)&DEVPKEY_Device_DriverInfPath,
      v81,
      0i64,
      PropertyKeyh);
    LODWORD(PropertyKeyi) = 0;
    LODWORD(v82) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v69,
      (UINT64)&DEVPKEY_Device_DriverInfSection,
      v82,
      0i64,
      PropertyKeyi);
    LODWORD(PropertyKeyj) = 0;
    LODWORD(v83) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v70,
      (UINT64)&DEVPKEY_Device_DriverNodeStrongName,
      v83,
      0i64,
      PropertyKeyj);
  }
  if( !v116.Buffer || (v102 & 8) != 0 || (*(_DWORD *)(*(_QWORD *)&v101[4] + 396i64) & 0x6000) != 0 )
  {
    if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKey) = 0;
      LODWORD(v73) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v60,
        (UINT64)&DEVPKEY_Device_RollbackDriverNode,
        v73,
        0i64,
        PropertyKey);
    }
  }
  else
  {
    LODWORD(PropertyKey) = v116.Length + 2;
    LODWORD(v73) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_RollbackDriverNode,
                            v73,
                            (UINT64)v116.Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  if( v125.Buffer )
  {
    LODWORD(PropertyKey) = v125.Length;
    LODWORD(v73) = 8210;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DriverIncludedInfs,
                            v73,
                            (UINT64)v125.Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverIncludedInfs,
      v73,
      0i64,
      PropertyKey);
  }
  if( v126.Buffer )
  {
    LODWORD(PropertyKey) = v126.Length;
    LODWORD(v73) = 8210;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DriverIncludedConfigs,
                            v73,
                            (UINT64)v126.Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverIncludedConfigs,
      v73,
      0i64,
      PropertyKey);
  }
  if( v128.Buffer )
  {
    LODWORD(PropertyKey) = v128.Length;
    LODWORD(v73) = 8210;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_DriverExtendedInfs,
                            v73,
                            (UINT64)v128.Buffer,
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  else if( (*DeviceContext & 1) == 0 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_DriverExtendedInfs,
      v73,
      0i64,
      PropertyKey);
  }
  if( !DriverNode || DriverNode[27] == -1 )
  {
    if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKey) = 0;
      LODWORD(v73) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v60,
        (UINT64)&DEVPKEY_Device_MatchingDeviceId,
        v73,
        0i64,
        PropertyKey);
      LODWORD(PropertyKeyk) = 0;
      LODWORD(v84) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v71,
        (UINT64)&DEVPKEY_Device_DriverRank,
        v84,
        0i64,
        PropertyKeyk);
    }
  }
  else
  {
    LODWORD(PropertyKey) = *((unsigned __int16 *)DriverNode + 36) + 2;
    LODWORD(v73) = 18;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v60,
                            (UINT64)&DEVPKEY_Device_MatchingDeviceId,
                            v73,
                            *((_QWORD *)DriverNode + 10),
                            PropertyKey);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    LODWORD(PropertyKeye) = 4;
    LODWORD(v78) = 7;
    DriverConfiguration = PiDevCfgSetObjectProperty(
                            *(&stru_140CF2E80 + 607),
                            DeviceContext,
                            (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                            (WCHAR *)1,
                            (WCHAR *)v8,
                            v65,
                            (UINT64)&DEVPKEY_Device_DriverRank,
                            v78,
                            (UINT64)(DriverNode + 27),
                            PropertyKeye);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
  }
  if( v102 )
  {
    LODWORD(PropertyKey) = 0;
    LODWORD(v73) = 0;
    PiDevCfgSetObjectProperty(
      *(&stru_140CF2E80 + 607),
      DeviceContext,
      (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
      (WCHAR *)1,
      (WCHAR *)v8,
      v60,
      (UINT64)&DEVPKEY_Device_InstallFlags,
      v73,
      0i64,
      PropertyKey);
  }
  if( DriverNode )
  {
    v27 = v112;
    *(_DWORD *)v112 = v9;
    if( (DriverNode[46] & 8) != 0 && (PiDevCfgFlags & 2) != 0 )
      *(_DWORD *)v27 = v9 | 0x400;
    DriverConfiguration = PiDevCfgConfigureDeviceDriver(
                            *(_DEVICE_NODE **)&v101[4],
                            DeviceContext,
                            DriverNode,
                            (UINT64 *)&v100[1],
                            (UINT64 *)v101);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    *(_DWORD *)v27 |= *(_DWORD *)&v100[1];
    *(_DWORD *)v113 |= *(_DWORD *)v101;
    for( i = (PI_DEVCFG_DRIVER_NODE *)*((_QWORD *)DriverNode + 26); i != DriverNode + 52; i = *(PI_DEVCFG_DRIVER_NODE **)i )
    {
      if( (i[46] & 1) != 0 )
      {
        DriverConfiguration = PiDevCfgConfigureDeviceDriver(
                                *(_DEVICE_NODE **)&v101[4],
                                DeviceContext,
                                i,
                                (UINT64 *)&v100[1],
                                (UINT64 *)v101);
        if( DriverConfiguration < 0 )
          goto LABEL_139;
        *(_DWORD *)v112 |= *(_DWORD *)&v100[1];
        *(_DWORD *)v113 |= *(_DWORD *)v101;
      }
    }
    DriverConfiguration = PiDevCfgConfigureDeviceLocation(
                            *(_DEVICE_NODE **)&v101[4],
                            DeviceContext,
                            (UINT64 *)&v100[1],
                            (UINT64 *)v101);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    v29 = v112;
    v30 = v113;
    *(_DWORD *)v112 |= *(_DWORD *)&v100[1];
    *(_DWORD *)v30 |= *(_DWORD *)v101;
  }
  else
  {
    v31 = *(_DEVICE_NODE **)&v101[4];
    v29 = v112;
    if( (*(_DWORD *)(*(_QWORD *)&v101[4] + 560i64) & 0x100) != 0 )
    {
      v30 = v113;
      *(_DWORD *)v112 = 0;
      goto LABEL_110;
    }
    *(_DWORD *)v112 = 64;
    PnpDeleteDeviceInterfaces(&p_InstancePath->Length, (__int64)v25, v24);
    v30 = v113;
  }
  v31 = *(_DEVICE_NODE **)&v101[4];
LABEL_110:
  if( v105 && !InitIsWinPEMode && PipIsDevNodeDNStarted((__int64)v31) )
    *(_DWORD *)v30 |= 0x10u;
  if( (v102 & 2) != 0 )
    *(_DWORD *)v30 |= 0x20u;
  if( HIBYTE(v100[0]) )
    *(_DWORD *)v30 |= 1u;
  if( KeyHandle )
  {
    DriverConfiguration = PiDevCfgConfigureDeviceKeys(
                            v31,
                            DeviceContext,
                            KeyHandle,
                            0xFFFFFFFFui64,
                            (UINT64 *)&v100[1],
                            (UINT64 *)v101);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    *(_DWORD *)v29 |= *(_DWORD *)&v100[1];
    *(_DWORD *)v30 |= *(_DWORD *)v101;
  }
  if( (*(_DWORD *)v30 & 2) == 0 && ClassGuidString && *(_QWORD *)&Handle[1] )
  {
    DriverConfiguration = PiDevCfgGetDeviceClassConfigFlags(ClassGuidString, *(PVOID *)&Handle[1], (INT32 *)&v100[1]);
    if( DriverConfiguration < 0 )
      goto LABEL_139;
    *(_DWORD *)v29 |= *(_DWORD *)&v100[1];
  }
  if( DriverNode )
    v32 = *(_UNICODE_STRING *)(DriverNode + 98);
  else
    v32 = *(_UNICODE_STRING *)&PiDevCfgEmptyString;
  v33 = p_InstancePath->Buffer;
  DriverNodeStrongName = v32;
  LODWORD(PropertyKey) = v32.Length + 2;
  LODWORD(v73) = 18;
  DriverConfiguration = PiDevCfgSetObjectProperty(
                          *(&stru_140CF2E80 + 607),
                          DeviceContext,
                          (const PNP_OBJECT_TYPE)v33,
                          (WCHAR *)1,
                          (WCHAR *)v8,
                          v60,
                          (UINT64)&DEVPKEY_Device_ConfigurationId,
                          v73,
                          (UINT64)v32.Buffer,
                          PropertyKey);
  if( DriverConfiguration >= 0 )
  {
    if( v129.Buffer )
    {
      LODWORD(PropertyKeyf) = v129.Length;
      LODWORD(v79) = 8210;
      DriverConfiguration = PiDevCfgSetObjectProperty(
                              *(&stru_140CF2E80 + 607),
                              DeviceContext,
                              (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                              (WCHAR *)1,
                              (WCHAR *)v8,
                              v66,
                              (UINT64)&DEVPKEY_Device_ExtendedConfigurationIds,
                              v79,
                              (UINT64)v129.Buffer,
                              PropertyKeyf);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
    else if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKeyf) = 0;
      LODWORD(v79) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v66,
        (UINT64)&DEVPKEY_Device_ExtendedConfigurationIds,
        v79,
        0i64,
        PropertyKeyf);
    }
    if( DriverNode && (v34 = *((_QWORD *)DriverNode + 17)) != 0 )
    {
      LODWORD(PropertyKeyf) = *((unsigned __int16 *)DriverNode + 64) + 2;
      LODWORD(v79) = 18;
      DriverConfiguration = PiDevCfgSetObjectProperty(
                              *(&stru_140CF2E80 + 607),
                              DeviceContext,
                              (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
                              (WCHAR *)1,
                              (WCHAR *)v8,
                              v66,
                              (UINT64)&DEVPKEY_Device_MatchingTargetComputerId,
                              v79,
                              v34,
                              PropertyKeyf);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
    else if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKeyf) = 0;
      LODWORD(v79) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v66,
        (UINT64)&DEVPKEY_Device_MatchingTargetComputerId,
        v79,
        0i64,
        PropertyKeyf);
    }
    if( (v104 & 0x80u) != 0 )
    {
      v55 = p_InstancePath->Buffer;
      LODWORD(PropertyKeyf) = 1;
      LODWORD(v79) = 17;
      LOBYTE(v100[3]) = -1;
      DriverConfiguration = PiDevCfgSetObjectProperty(
                              *(&stru_140CF2E80 + 607),
                              DeviceContext,
                              (const PNP_OBJECT_TYPE)v55,
                              (WCHAR *)1,
                              (WCHAR *)v8,
                              v66,
                              (UINT64)&DEVPKEY_Device_DriverInGroup,
                              v79,
                              (UINT64)&v100[3],
                              PropertyKeyf);
      if( DriverConfiguration < 0 )
        goto LABEL_139;
    }
    else if( (*DeviceContext & 1) == 0 )
    {
      LODWORD(PropertyKeyf) = 0;
      LODWORD(v79) = 0;
      PiDevCfgSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        DeviceContext,
        (const PNP_OBJECT_TYPE)p_InstancePath->Buffer,
        (WCHAR *)1,
        (WCHAR *)v8,
        v66,
        (UINT64)&DEVPKEY_Device_DriverInGroup,
        v79,
        0i64,
        PropertyKeyf);
    }
    if( UnicodeString.Buffer && UnicodeString.Length )
      PipHardwareConfigActivateService(UnicodeString.Buffer);
    v35 = ServiceName;
    if( ServiceName )
    {
      while( *v35 )
      {
        PipHardwareConfigActivateService(v35);
        if( !PnpBootMode && (DriverNode[46] & 0x10) != 0 )
          PiDevCfgMakeServiceBootStart(v35);
        v56 = -1i64;
        do
          ++v56;
        while( v35[v56] );
        v35 += v56 + 1;
      }
    }
    v36 = (WCHAR *)Buffer;
    if( Buffer )
    {
      while( *v36 )
      {
        PipHardwareConfigActivateService(v36);
        if( !PnpBootMode && (DriverNode[46] & 0x10) != 0 )
          PiDevCfgMakeServiceBootStart(v36);
        v57 = -1i64;
        do
          ++v57;
        while( v36[v57] );
        v36 += v57 + 1;
      }
    }
  }
LABEL_139:
  RtlFreeAnsiString(&StringToken);
  RtlFreeAnsiString(&DeviceManufacturer);
  RtlFreeAnsiString(&DestinationString);
  RtlFreeAnsiString(&UnicodeString);
  RtlFreeAnsiString(&MultiSz);
  RtlFreeAnsiString(&v124);
  RtlFreeAnsiString(&v125);
  RtlFreeAnsiString(&v126);
  RtlFreeAnsiString(&v128);
  RtlFreeAnsiString(&v129);
  RtlFreeAnsiString(&IndirectString);
  RtlFreeAnsiString(&String1);
  RtlFreeAnsiString(&v116);
  if( v130.Buffer )
    ExFreePoolWithTag(v130.Buffer, 0);
  if( P )
    ExFreePoolWithTag(P, 0);
  if( *(_QWORD *)&Handle[1] )
    ZwClose(Handle[1]);
  if( KeyHandle )
    ZwClose((_HANDLE)KeyHandle);
  return DriverConfiguration;
}

Referenced by:

PiDevCfgProcessDevice