DrvDbSetDriverPackageMappedProperty
NTSTATUS __stdcall DrvDbSetDriverPackageMappedProperty(
_DRVDB_CONTEXT *pDrvDbCtx,
WCHAR *DriverPackageId,
VOID *ObjectBaseKey,
_DEVPROPKEY *PropertyKey,
UINT64 PropertyType,
VOID *PropertyBuffer,
UINT64 PropertySize){
unsigned int pid;
WCHAR *v10;
PVOID v12;
unsigned int v13;
_DEVPROPKEY **i;
_DEVPROPKEY *v15;
int v16;
__int64 v17;
_DEVPROPKEY **v18;
unsigned int v19;
int v20;
WCHAR *v21;
int v22;
_DWORD *v23;
VOID *v24;
_DRVDB_PROPERTY_REG_VALUE_MAP *v25;
NTSTATUS v26;
_OWORD *PoolWithTag;
bool v29;
VOID *v30;
int v31;
size_t v32;
char *v33;
VOID *v34;
__int64 v35;
__int64 v36;
int v37;
__int64 v38;
VOID *v39;
__int64 v40;
__int64 v41;
__int64 v42;
__int64 v43;
__int64 v44;
VOID *v45;
_DRVDB_PROPERTY_REG_VALUE_MAP *v46;
VOID *v47;
VOID *v48;
WCHAR *v49;
VOID *v50;
const wchar_t *v51;
VOID *v52;
VOID *v53;
VOID *v54;
_DRVDB_PROPERTY_REG_VALUE_MAP *v55;
INT64 v56;
INT64 v57;
INT64 v58;
INT64 v59;
INT64 v60;
UINT64 v61;
WCHAR SignerScore[2];
int v63;
INT64 v64;
PVOID v65;
PVOID P;
UINT64 RequiredLen;
pid = PropertyKey->pid;
v64 = 0i64;
v10 = DriverPackageId;
P = 0i64;
v63 = 0;
v12 = 0i64;
*(_DWORD *)SignerScore = 0;
v65 = 0i64;
LODWORD(RequiredLen) = 0;
if( pid == 2 )
{
v35 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_NODE;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_NODE )
v35 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x5008C7D4C8250077i64;
if( !v35 )
return -1073741790;
}
if( pid == 18 )
{
v40 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Configurable;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Configurable )
v40 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
if( !v40 )
return -1073741790;
}
if( pid == 29 )
{
v41 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Configurations;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Configurations )
v41 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
if( !v41 )
return -1073741790;
}
if( pid == 30 )
{
v42 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_ConfigurationScopes;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_ConfigurationScopes )
v42 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
if( !v42 )
return -1073741790;
}
if( pid == 33 )
{
v43 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_FamilyId;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_FamilyId )
v43 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
if( !v43 )
return -1073741790;
}
if( pid == 40 )
{
v44 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Primitive;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Primitive )
v44 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
if( !v44 )
return -1073741790;
}
v13 = 0;
for( i = &off_140001760; ; i += 5 )
{
v15 = *i;
if( (*i)->pid == pid )
{
v17 = *(_QWORD *)&v15->fmtid.Data1 - *(_QWORD *)&PropertyKey->fmtid.Data1;
if( *(_QWORD *)&v15->fmtid.Data1 == *(_QWORD *)&PropertyKey->fmtid.Data1 )
v17 = *(_QWORD *)v15->fmtid.Data4 - *(_QWORD *)PropertyKey->fmtid.Data4;
if( !v17 )
break;
}
if( ++v13 >= 0x20 )
return -1073741802;
}
v18 = &(&off_140001760)[5 * v13];
if( !v18 )
return -1073741802;
v19 = PropertyType;
if( (_DWORD)PropertyType != *((_DWORD *)v18 + 2) && (_DWORD)PropertyType )
return -1073741811;
if( !ObjectBaseKey )
{
v16 = DrvDbOpenDriverPackageRegKey((INT64 *)pDrvDbCtx, (INT64)v10, 3i64, 0, (INT64)&v64, 0i64);
if( v16 < 0 )
goto LABEL_31;
v10 = DriverPackageId;
}
v20 = *((_DWORD *)v18 + 8);
if( v20 )
{
if( v19 )
v29 = (_DWORD)PropertySize == v20;
else
v29 = (_DWORD)PropertySize == 0;
if( !v29 )
{
v16 = -1073741823;
goto LABEL_31;
}
LODWORD(RequiredLen) = 48;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1111770192i64);
if( PoolWithTag )
{
v30 = (VOID *)v64;
if( ObjectBaseKey )
v30 = ObjectBaseKey;
v31 = RegRtlQueryValue(v30, L"Version", &v63, PoolWithTag, (__int64)&RequiredLen);
v16 = v31;
if( v31 == -1073741772 )
{
*PoolWithTag = 0i64;
PoolWithTag[1] = 0i64;
PoolWithTag[2] = 0i64;
}
else
{
if( v31 == -1073741789 )
{
v16 = -1073741595;
goto LABEL_27;
}
if( v31 < 0 )
{
LABEL_27:
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
if( v12 )
ExFreePoolWithTag(v12, 0);
goto LABEL_31;
}
if( v63 != 3 || (_DWORD)RequiredLen != 48 )
{
v16 = -1073741823;
goto LABEL_27;
}
}
v32 = *((_DWORD *)v18 + 8);
v33 = (char *)PoolWithTag + *((unsigned int *)v18 + 7);
if( v19 )
memmove(v33, PropertyBuffer, v32);
else
memset(v33, 0i64, v32);
v34 = (VOID *)v64;
LODWORD(v57) = 48;
if( ObjectBaseKey )
v34 = ObjectBaseKey;
v26 = RegRtlSetValue(v34, L"Version", 3u, PoolWithTag, v57);
LABEL_26:
v16 = v26;
goto LABEL_27;
}
goto LABEL_99;
}
v21 = (WCHAR *)L"Microsoft Windows";
v22 = PropertySize;
v23 = PropertyBuffer;
if( PropertyKey->pid != 7 )
{
v24 = 0i64;
goto LABEL_22;
}
v36 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1 )
v36 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)DEVPKEY_DriverPackage_SignerName.fmtid.Data4;
v24 = 0i64;
if( v36
|| v19 != 18
|| (unsigned int)PropertySize <= 2
|| !PropertyBuffer
|| *((_WORD *)PropertyBuffer + ((unsigned __int64)(unsigned int)PropertySize >> 1) - 1)
|| (v37 = wcsicmp((const wchar_t *)PropertyBuffer, (const wchar_t *)L"Microsoft Windows"), v24 = 0i64, v37) )
{
LABEL_22:
if( PropertyKey->pid != 8 )
goto LABEL_23;
v38 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerScore.fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerScore.fmtid.Data1 )
v38 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)DEVPKEY_DriverPackage_SignerScore.fmtid.Data4;
if( v38 )
goto LABEL_23;
if( v19 == 7 )
{
if( v22 == 4 && v23 )
{
if( *v23 != 218103811 )
goto LABEL_70;
v48 = (VOID *)v64;
LODWORD(v56) = 0;
if( ObjectBaseKey )
v48 = ObjectBaseKey;
if( DrvDbGetDriverPackageSignerName(0i64, v21, v48, 0i64, v56, &RequiredLen) == -1073741789
&& (_DWORD)RequiredLen == 18 )
{
v65 = ExAllocatePoolWithTag(1ui64, 0x24ui64, 1111770192i64);
v51 = (const wchar_t *)v65;
if( v65 )
{
v52 = (VOID *)v64;
LODWORD(v58) = 18;
if( ObjectBaseKey )
v52 = ObjectBaseKey;
if( DrvDbGetDriverPackageSignerName(v50, v49, v52, (WCHAR *)v65, v58, &RequiredLen) >= 0
&& (_DWORD)RequiredLen
&& !v51[(unsigned int)(RequiredLen - 1)]
&& !wcsicmp(v51, (const wchar_t *)L"Microsoft Windows") )
{
v53 = (VOID *)v64;
LODWORD(v61) = 0;
if( ObjectBaseKey )
v53 = ObjectBaseKey;
LODWORD(v59) = 0;
DrvDbSetDriverPackageMappedProperty(
pDrvDbCtx,
DriverPackageId,
v53,
(_DEVPROPKEY *)&DEVPKEY_DriverPackage_SignerName,
v59,
0i64,
v61);
}
goto LABEL_23;
}
LABEL_99:
v16 = -1073741801;
goto LABEL_31;
}
}
}
else if( !v19 )
{
LABEL_70:
v39 = (VOID *)v64;
if( ObjectBaseKey )
v39 = ObjectBaseKey;
if( DrvDbGetDriverPackageSignerScore(pDrvDbCtx, DriverPackageId, v39, SignerScore) >= 0
&& *(_DWORD *)SignerScore == 218103811 )
{
v54 = (VOID *)v64;
LODWORD(v56) = 0;
if( ObjectBaseKey )
v54 = ObjectBaseKey;
if( DrvDbGetDriverPackageSignerName(v24, 0i64, v54, 0i64, v56, &RequiredLen) == -1073741275 )
{
v55 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
if( ObjectBaseKey )
v55 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
v16 = DrvDbSetRegValueMappedProperty(v24, v55, (UINT64)v18, (UINT8 *)v19, (UINT64)v23);
if( v16 < 0 )
goto LABEL_31;
v47 = (VOID *)v64;
LODWORD(v61) = 36;
if( ObjectBaseKey )
v47 = ObjectBaseKey;
LODWORD(v60) = 18;
DrvDbSetDriverPackageMappedProperty(
pDrvDbCtx,
DriverPackageId,
v47,
(_DEVPROPKEY *)&DEVPKEY_DriverPackage_SignerName,
v60,
(VOID *)L"Microsoft Windows",
v61);
goto LABEL_114;
}
}
}
LABEL_23:
v25 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
if( ObjectBaseKey )
v25 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
v26 = DrvDbSetRegValueMappedProperty(v24, v25, (UINT64)v18, (UINT8 *)v19, (UINT64)v23);
PoolWithTag = P;
v12 = v65;
goto LABEL_26;
}
v45 = (VOID *)v64;
if( ObjectBaseKey )
v45 = ObjectBaseKey;
if( DrvDbGetDriverPackageSignerScore(pDrvDbCtx, v10, v45, SignerScore) < 0 || *(_DWORD *)SignerScore != 218103811 )
goto LABEL_23;
v46 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
if( ObjectBaseKey )
v46 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
v16 = DrvDbSetRegValueMappedProperty(v24, v46, (UINT64)v18, 0i64, 0i64);
if( v16 != -1073741275 )
goto LABEL_31;
LABEL_114:
v16 = 0;
LABEL_31:
if( v64 )
ZwClose(v64);
return v16;
}Referenced by:
DrvDbDispatchDriverPackage
DrvDbSetDriverPackageMappedProperty