DrvDbGetDriverPackageMappedProperty

__int64 __fastcall DrvDbGetDriverPackageMappedProperty(
        __int64 *a1,
        _WORD *a2,
        char *a3,
        __int64 a4,
        __int64 a5,
        NTSTRSAFE_PWSTR pszDest,
        int a7,
        __int64 a8){
  _DWORD *v8; 
  UINT64 *v10; 
  int v13; 
  __int64 *v14; 
  int DriverPackageMappedProperty; 
  unsigned int v16; 
  __int64(**i)[3]; 
  __int64(*v18)[3]; 
  __int64 v19; 
  __int64(**v20)[3]; 
  unsigned __int64 v21; 
  void *v22; 
  unsigned __int64 v23; 
  int RegValueMappedProperty; 
  _DWORD *v25; 
  __int64 v27; 
  void *v28; 
  void *v29; 
  int v30; 
  __int64 v31; 
  unsigned int v32; 
  __int64 v33; 
  char *v34; 
  WCHAR *v35; 
  __int64 v36; 
  char *v37; 
  char *v38; 
  int v39; 
  int v40; 
  __int64 v41; 
  int v42; 
  NTSTRSAFE_PWSTR v43; 
  int ObjectDatabaseNodeName; 
  __int64 v45; 
  void *PoolWithTag; 
  char *v47; 
  int v48; 
  char *v49; 
  int v50; 
  _DWORD *v51; 
  char *v52; 
  _WORD *v53; 
  INT64 v54; 
  _WORD *v55; 
  unsigned __int64 v56; 
  __int64 v57; 
  int v58; 
  unsigned int v59; 
  __int64 v60; 
  __int64 v61; 
  bool v62; 
  __int64 v63; 
  unsigned int v64; 
  __int64 v65; 
  __int64 v66; 
  __int64 v67; 
  UINT8 *v68; 
  unsigned int v69; 
  __int64 v70; 
  int v71; 
  _DWORD *v72; 
  char v73; 
  char v74; 
  NTSTRSAFE_PWSTR v75; 
  size_t *pcchRemaining; 
  size_t *pcchRemaininga; 
  UINT64 dwFlags; 
  INT64 v79; 
  wchar_t v80[2]; 
  int v81; 
  wchar_t v82[2]; 
  void *Src; 
  int v84; 
  INT64 a9; 
  __int128 v86; 
  __int64 v87; 
  NTSTRSAFE_PWSTR v88; 
  void *v89; 
  void *v90; 
  wchar_t v93; 
  v8 = (_DWORD *)a5;
  v10 = (UINT64 *)a8;
  v89 = 0i64;
  v90 = 0i64;
  *(_DWORD *)a5 = 0;
  *(_DWORD *)v10 = 0;
  v13 = *(_DWORD *)(a4 + 16);
  v14 = a1;
  v79 = 0i64;
  DriverPackageMappedProperty = 0;
  v87 = 0i64;
  v81 = 0;
  *(_DWORD *)v82 = 0;
  *(_DWORD *)v80 = 0;
  Src = 0i64;
  v84 = 0;
  a9 = 0i64;
  LOBYTE(v93) = 0;
  v86 = 0i64;
  switch( v13 )
  {
    case 2:
      v27 = *(_QWORD *)a4 - DEVPKEY_NODE;
      if( *(_QWORD *)a4 == DEVPKEY_NODE )
        v27 = *(_QWORD *)(a4 + 8) + 0x5008C7D4C8250077i64;
      if( !v27 )
      {
        v43 = pszDest;
        LODWORD(pcchRemaining) = (unsigned int)a7 >> 1;
        *v8 = 18;
        ObjectDatabaseNodeName = DrvDbGetObjectDatabaseNodeName(a1, 2i64, (INT64)a2, v43, (UINT64)pcchRemaining, v10);
        DriverPackageMappedProperty = ObjectDatabaseNodeName;
        v21 = ObjectDatabaseNodeName + 0x80000000;
        if( (v21 & 0x80000000) != 0i64 || ObjectDatabaseNodeName == -1073741789 )
        {
          v21 = (unsigned int)(2 * *(_DWORD *)v10);
          *(_DWORD *)v10 = v21;
        }
        if( ObjectDatabaseNodeName >= 0 )
          goto LABEL_27;
        v28 = 0i64;
        goto LABEL_47;
      }
      break;
    case 18:
      v36 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_Configurable;
      if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_Configurable )
        v36 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
      if( !v36 )
      {
        if( a3 )
        {
          v37 = a3;
        }
        else
        {
          DriverPackageMappedProperty = DrvDbOpenDriverPackageRegKey(a1, (INT64)a2, 1i64, 0, (INT64)&v79, 0i64);
          if( DriverPackageMappedProperty < 0 )
            goto LABEL_27;
          v37 = (char *)v79;
          v14 = a1;
        }
        DriverPackageMappedProperty = DrvDbGetDriverPackageMappedProperty(
                                        v14,
                                        a2,
                                        v37,
                                        (__int64)&DEVPKEY_DriverPackage_ConfigurableOverride,
                                        (__int64)v8,
                                        pszDest,
                                        a7,
                                        (__int64)v10);
        if( (int)(DriverPackageMappedProperty + 0x80000000) < 0 || DriverPackageMappedProperty == -1073741789 )
          goto LABEL_27;
        v38 = (char *)v79;
        if( a3 )
          v38 = a3;
        v39 = DrvDbGetDriverPackageMappedProperty(
                a1,
                a2,
                v38,
                (__int64)&DEVPKEY_DriverPackage_ConfigurableFlags,
                (__int64)v8,
                v82,
                4,
                (__int64)v10);
        DriverPackageMappedProperty = v39;
        if( v39 == -1073741789 )
          goto LABEL_99;
        if( v39 >= 0 )
        {
          if( *v8 == 7 && *(_DWORD *)v10 == 4 )
          {
            v40 = *(_DWORD *)v82;
          }
          else
          {
            v40 = -1;
            *(_DWORD *)v82 = -1;
          }
          goto LABEL_79;
        }
        goto LABEL_27;
      }
      break;
    case 33:
      v45 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_FamilyId;
      if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_FamilyId )
        v45 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
      if( v45 )
        break;
      if( !a3 )
      {
        DriverPackageMappedProperty = DrvDbOpenDriverPackageRegKey(a1, (INT64)a2, 1i64, 0, (INT64)&v79, 0i64);
        if( DriverPackageMappedProperty < 0 )
          goto LABEL_27;
      }
      PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x412ui64, 0x42444450ui64);
      Src = PoolWithTag;
      if( !PoolWithTag )
        goto LABEL_135;
      v47 = (char *)v79;
      if( a3 )
        v47 = a3;
      v48 = DrvDbGetDriverPackageMappedProperty(
              a1,
              a2,
              v47,
              (__int64)&DEVPKEY_DriverPackage_ProviderName,
              (__int64)v8,
              (NTSTRSAFE_PWSTR)PoolWithTag,
              1042,
              (__int64)v10);
      DriverPackageMappedProperty = v48;
      if( v48 != -1073741789 )
      {
        if( v48 < 0 )
          goto LABEL_49;
        if( *v8 != 18
          || (v21 = *(unsigned int *)v10, (unsigned int)(v21 - 2) > 0x206)
          || (v21 = ((unsigned int)v21 >> 1) - 1, a9 = (unsigned int)v21, *((_WORD *)Src + v21)) )
        {
LABEL_137:
          DriverPackageMappedProperty = -1073741823;
LABEL_49:
          if( Src )
            ExFreePoolWithTag(Src, 0);
          goto LABEL_27;
        }
        v49 = (char *)v79;
        v50 = 2 * v21;
        v81 = 2 * v21;
        if( a3 )
          v49 = a3;
        LODWORD(a8) = 1040 - v50;
        v88 = (NTSTRSAFE_PWSTR)((char *)Src + 2 * (unsigned int)v21 + 2);
        DriverPackageMappedProperty = DrvDbGetDriverPackageMappedProperty(
                                        a1,
                                        a2,
                                        v49,
                                        (__int64)&DEVPKEY_DriverPackage_OriginalInfName,
                                        (__int64)v8,
                                        v88,
                                        1040 - v50,
                                        (__int64)v10);
        v51 = (_DWORD *)a5;
        if( DriverPackageMappedProperty == -1073741275 )
        {
          v52 = (char *)v79;
          if( a3 )
            v52 = a3;
          DriverPackageMappedProperty = DrvDbGetDriverPackageMappedProperty(
                                          a1,
                                          a2,
                                          v52,
                                          (__int64)&DEVPKEY_DriverPackage_DriverInfName,
                                          a5,
                                          v88,
                                          a8,
                                          (__int64)v10);
        }
        if( DriverPackageMappedProperty != -1073741789 )
        {
          if( DriverPackageMappedProperty < 0 )
            goto LABEL_49;
          if( *v51 == 18 && (unsigned int)(*(_DWORD *)v10 - 2) <= 0x206 )
          {
            v53 = Src;
            v54 = a9;
            v55 = Src;
            *((_WORD *)Src + a9) = 45;
            v56 = (unsigned __int16)*v55;
            if( (_WORD)v56 )
            {
              do
              {
                if( (unsigned __int16)v56 <= 0x3Au && (v57 = 0x400200100000000i64, _bittest64(&v57, v56))
                  || (_WORD)v56 == 126 )
                {
                  *v55 = 95;
                }
                v56 = (unsigned __int16)*++v55;
              }
              while( (_WORD)v56 );
              v53 = Src;
            }
            v58 = v81;
            v53[v54] = 45;
            *v51 = 18;
            v59 = *(_DWORD *)v10 + v58 + 2;
            *(_DWORD *)v10 = v59;
            v21 = (unsigned __int64)pszDest;
            if( pszDest && a7 >= v59 )
              memmove((UINT8 *)pszDest, (UINT8 *)Src, v59);
            else
              DriverPackageMappedProperty = -1073741789;
            goto LABEL_49;
          }
          goto LABEL_137;
        }
      }
      DriverPackageMappedProperty = -1073741595;
      goto LABEL_49;
    case 29:
      v60 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_Configurations;
      if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_Configurations )
        v60 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
      if( v60 )
      {
LABEL_5:
        if( v13 != 30 )
        {
          if( v13 == 32 )
          {
            v66 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_DriverPackageId;
            if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_DriverPackageId )
              v66 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
            if( !v66 )
            {
              *v8 = 18;
              v67 = -1i64;
              do
                ++v67;
              while( a2[v67] );
              v68 = (UINT8 *)pszDest;
              v69 = 2 * v67 + 2;
              *(_DWORD *)v10 = v69;
              if( v68 && a7 >= v69 )
                memmove(v68, (UINT8 *)a2, v69);
              else
                return(unsigned int)-1073741789;
              return(unsigned int)DriverPackageMappedProperty;
            }
            break;
          }
          if( v13 != 38 )
          {
            if( v13 == 40 )
            {
              v41 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_Primitive;
              if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_Primitive )
                v41 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
              if( !v41 )
              {
                if( !a3 )
                {
                  DriverPackageMappedProperty = DrvDbOpenDriverPackageRegKey(a1, (INT64)a2, 1i64, 0, (INT64)&v79, 0i64);
                  if( DriverPackageMappedProperty < 0 )
                    goto LABEL_27;
                  a3 = (char *)v79;
                  v14 = a1;
                }
                v42 = DrvDbGetDriverPackageMappedProperty(
                        v14,
                        a2,
                        a3,
                        (__int64)&DEVPKEY_DriverPackage_PrimitiveFlags,
                        (__int64)v8,
                        v80,
                        4,
                        (__int64)v10);
                DriverPackageMappedProperty = v42;
                if( v42 != -1073741789 )
                {
                  if( v42 == -1073741275 )
                  {
                    v8 = (_DWORD *)a5;
                    DriverPackageMappedProperty = 0;
                  }
                  else
                  {
                    if( v42 < 0 )
                      goto LABEL_27;
                    v8 = (_DWORD *)a5;
                    if( *(_DWORD *)a5 == 7 && *(_DWORD *)v10 == 4 )
                    {
                      v40 = *(_DWORD *)v80;
                      goto LABEL_79;
                    }
                  }
                  v40 = -1;
                  *(_DWORD *)v80 = -1;
LABEL_79:
                  v21 = (unsigned __int64)pszDest;
                  *v8 = 17;
                  *(_DWORD *)v10 = 1;
                  if( v21 && a7 )
                  {
                    *(_BYTE *)v21 = (v40 != 0) - 1;
                    goto LABEL_27;
                  }
LABEL_101:
                  DriverPackageMappedProperty = -1073741789;
                  goto LABEL_27;
                }
LABEL_99:
                DriverPackageMappedProperty = -1073741595;
                goto LABEL_27;
              }
            }
            break;
          }
          v70 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_Integrated;
          if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_Integrated )
            v70 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
          if( v70 )
            break;
          if( !a3 )
          {
            LODWORD(pcchRemaining) = 1;
            DriverPackageMappedProperty = DrvDbOpenObjectRegKey(
                                            a1,
                                            0i64,
                                            2i64,
                                            a2,
                                            (INT64)pcchRemaining,
                                            0,
                                            (INT64)&v79,
                                            0i64,
                                            (INT64)&a9);
            if( DriverPackageMappedProperty < 0 )
              goto LABEL_27;
            a3 = (char *)v79;
            v14 = a1;
          }
          v71 = DrvDbGetDriverPackageMappedProperty(
                  v14,
                  a2,
                  a3,
                  (__int64)&DEVPKEY_DriverPackage_Inbox,
                  (__int64)v8,
                  &v93,
                  1,
                  (__int64)v10);
          DriverPackageMappedProperty = v71;
          if( v71 == -1073741789 )
            goto LABEL_99;
          if( v71 == -1073741275 )
          {
            v72 = (_DWORD *)a5;
            v73 = 0;
            DriverPackageMappedProperty = 0;
          }
          else
          {
            if( v71 < 0 )
              goto LABEL_27;
            v72 = (_DWORD *)a5;
            if( *(_DWORD *)a5 == 17 && *(_DWORD *)v10 == 1 )
            {
              v74 = v93;
            }
            else
            {
              v74 = -1;
              LOBYTE(v93) = -1;
            }
            if( !v74 )
              goto LABEL_199;
            if( !v79 )
            {
              LODWORD(pcchRemaininga) = 1;
              DriverPackageMappedProperty = DrvDbOpenObjectRegKey(
                                              a1,
                                              0i64,
                                              2i64,
                                              a2,
                                              (INT64)pcchRemaininga,
                                              0,
                                              (INT64)&v79,
                                              0i64,
                                              (INT64)&a9);
              if( DriverPackageMappedProperty < 0 )
                goto LABEL_27;
              v74 = v93;
            }
            v73 = v74;
            if( (*(_BYTE *)(a9 + 56) & 0x10) != 0 )
              v73 = 0;
          }
          LOBYTE(v93) = v73;
          v74 = v73;
LABEL_199:
          v75 = pszDest;
          *v72 = 17;
          *(_DWORD *)v10 = 1;
          if( v75 && a7 )
          {
            *(_BYTE *)v75 = v74;
            goto LABEL_27;
          }
          goto LABEL_101;
        }
        v61 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_ConfigurationScopes;
        if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_ConfigurationScopes )
          v61 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
        if( v61 )
          break;
      }
      if( !a3 )
      {
        DriverPackageMappedProperty = DrvDbOpenDriverPackageRegKey(a1, (INT64)a2, 1i64, 0, (INT64)&v79, 0i64);
        if( DriverPackageMappedProperty < 0 )
          goto LABEL_27;
        a3 = (char *)v79;
        v14 = a1;
      }
      DriverPackageMappedProperty = PnpCtxRegOpenKey(*v14, a3, L"Configurations", 0, 9u, &v89);
      if( DriverPackageMappedProperty == -1073741772 )
        DriverPackageMappedProperty = -1073741275;
      if( DriverPackageMappedProperty >= 0 )
      {
        v62 = *(_DWORD *)(a4 + 16) == 30;
        *(_QWORD *)&v86 = pszDest;
        *(_WORD *)((char *)&v87 + 1) = 0;
        BYTE3(v87) = 0;
        HIDWORD(v86) = 0;
        HIDWORD(v87) = 0;
        if( !v62 )
          goto LABEL_156;
        v63 = *(_QWORD *)a4 - DEVPKEY_DriverPackage_ConfigurationScopes;
        if( *(_QWORD *)a4 == DEVPKEY_DriverPackage_ConfigurationScopes )
          v63 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
        LOBYTE(v87) = 1;
        if( v63 )
LABEL_156:
          LOBYTE(v87) = 0;
        if( pszDest )
          DWORD2(v86) = (unsigned int)a7 >> 1;
        else
          DWORD2(v86) = 0;
        DriverPackageMappedProperty = PnpCtxRegEnumKeyWithCallback(
                                        *a1,
                                        v89,
                                        (__int64)DrvDbGetConfigurationSubKeyCallback,
                                        (__int64)&v86);
        if( DriverPackageMappedProperty >= 0 )
        {
          if( HIDWORD(v86) )
          {
            v65 = v86;
            DriverPackageMappedProperty = HIDWORD(v87);
            v64 = ++HIDWORD(v86);
            *(_DWORD *)a5 = 8210;
            *(_DWORD *)v10 = 2 * v64;
            if( v65 && (v21 = 2i64 * v64, v21 <= (unsigned int)a7) )
              *(_WORD *)(v65 + 2i64 * (v64 - 1)) = 0;
            else
              DriverPackageMappedProperty = -1073741789;
          }
          else
          {
            DriverPackageMappedProperty = -1073741275;
          }
        }
        else if( v87 < 0 )
        {
          DriverPackageMappedProperty = HIDWORD(v87);
        }
      }
      goto LABEL_27;
    default:
      goto LABEL_5;
  }
  v16 = 0;
  for( i = &off_140001760; ; i += 5 )
  {
    v18 = *i;
    if( LODWORD((**i)[2]) == v13 )
    {
      v19 = (*v18)[0] - *(_QWORD *)a4;
      if( (*v18)[0] == *(_QWORD *)a4 )
        v19 = (*v18)[1] - *(_QWORD *)(a4 + 8);
      if( !v19 )
        break;
    }
    if( ++v16 >= 0x20 )
      return(unsigned int)-1073741802;
  }
  v20 = &off_140001760 + 5 * v16;
  a8 = (__int64)v20;
  if( !v20 )
    return(unsigned int)-1073741802;
  if( a3 )
  {
    v22 = v90;
  }
  else
  {
    DriverPackageMappedProperty = DrvDbOpenDriverPackageRegKey(v14, (INT64)a2, 1i64, 0, (INT64)&v79, 0i64);
    if( DriverPackageMappedProperty < 0 )
      goto LABEL_27;
    v22 = (void *)v79;
  }
  if( *((_DWORD *)v20 + 8) )
  {
    LODWORD(a5) = 48;
    v28 = ExAllocatePoolWithTag(PagedPool, 0x30ui64, 0x42444450ui64);
    if( v28 )
    {
      v29 = (void *)v79;
      if( a3 )
        v29 = a3;
      v30 = PnpCtxRegQueryValue(v21, v29, L"Version", &v81, v28, (__int64)&a5);
      DriverPackageMappedProperty = v30;
      if( v30 == -1073741772 )
      {
        DriverPackageMappedProperty = -1073741275;
      }
      else if( v30 == -1073741789 )
      {
        DriverPackageMappedProperty = -1073741595;
      }
      else if( v30 >= 0 )
      {
        if( v81 == 3 && (_DWORD)a5 == 48 )
        {
          v31 = a8;
          v21 = (unsigned __int64)pszDest;
          *v8 = *(_DWORD *)(a8 + 8);
          v32 = *(_DWORD *)(v31 + 32);
          *(_DWORD *)v10 = v32;
          if( v21 && a7 >= v32 )
            memmove((UINT8 *)v21, (UINT8 *)v28 + *(unsigned int *)(v31 + 28), *(unsigned int *)(v31 + 32));
          else
            DriverPackageMappedProperty = -1073741789;
        }
        else
        {
          DriverPackageMappedProperty = -1073741823;
        }
      }
      goto LABEL_47;
    }
LABEL_135:
    DriverPackageMappedProperty = -1073741801;
    goto LABEL_27;
  }
  v23 = (unsigned int)a7;
  if( a3 )
    v22 = a3;
  RegValueMappedProperty = DrvDbGetRegValueMappedProperty((__int64)v22, v22, (__int64)v20, v8, pszDest, a7, v10);
  DriverPackageMappedProperty = RegValueMappedProperty;
  if( RegValueMappedProperty == -1073741275 )
  {
    v25 = (_DWORD *)a5;
  }
  else
  {
    if( RegValueMappedProperty && RegValueMappedProperty != -1073741789 )
      goto LABEL_27;
    v25 = (_DWORD *)a5;
    if( *(_DWORD *)a5 != 18 || *(_DWORD *)v10 != 2 )
      goto LABEL_27;
  }
  if( *(_DWORD *)(a4 + 16) != 7 )
    goto LABEL_27;
  v33 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerName;
  if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerName )
    v33 = *(_QWORD *)(a4 + 8) + 0x4524B8338B5D1E6Ci64;
  if( v33 )
    goto LABEL_27;
  v34 = (char *)v79;
  if( a3 )
    v34 = a3;
  if( (int)DrvDbGetDriverPackageSignerScore(a1, a2, v34, (wchar_t *)&v84) < 0 || v84 != 218103811 )
    goto LABEL_27;
  v35 = pszDest;
  DriverPackageMappedProperty = 0;
  *v25 = 18;
  *(_DWORD *)v10 = 36;
  if( v35 && (unsigned int)v23 >= 0x24 )
  {
    LODWORD(dwFlags) = 2048;
    RtlStringCchCopyExW(v35, v23 >> 1, (WCHAR *)L"Microsoft Windows", 0i64, 0i64, dwFlags);
    goto LABEL_27;
  }
  DriverPackageMappedProperty = -1073741789;
  v28 = 0i64;
LABEL_47:
  if( v28 )
  {
    ExFreePoolWithTag(v28, 0);
    goto LABEL_49;
  }
LABEL_27:
  if( v89 )
    PnpCtxRegCloseKey(v21, v89);
  if( v79 )
    PnpCtxRegCloseKey(v21, (void *)v79);
  return(unsigned int)DriverPackageMappedProperty;
}

Referenced by:

DrvDbDispatchDriverPackage
DrvDbGetDriverPackageMappedProperty
DrvDbGetDriverPackageMappedPropertyKeys
DrvDbGetDriverPackageSignerScore