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