CmSetInstallerClassMappedPropertyFromRegValue
__int64 __fastcall CmSetInstallerClassMappedPropertyFromRegValue(
__int64 a1,
const WCHAR *a2,
void *a3,
__int64 a4,
unsigned int a5,
_BYTE *a6,
ULONG a7){
int v7;
int v8;
DEVPROPKEY **v10;
unsigned int i;
DEVPROPKEY *v15;
DEVPROPKEY **v16;
__int64 v17;
int v18;
int v19;
const WCHAR *v20;
ULONG v21;
HANDLE v22;
NTSTATUS v23;
__int64 v25;
__int64 v26;
__int64 v27;
__int64 v28;
__int64 v29;
wchar_t *v30;
HANDLE v31;
NTSTATUS v32;
__int64 v33;
int v34;
char *v35;
__int64 v36;
__int64 v37;
int v38;
HANDLE v39;
HANDLE Handle;
v7 = *(_DWORD *)(a4 + 16);
v8 = 0;
v38 = 0;
v39 = 0i64;
v10 = &off_140985790;
Handle = 0i64;
for( i = 0; i < 0xD; ++i )
{
v15 = *v10;
v16 = v10;
if( v7 == (*v10)->pid )
{
v17 = *(_QWORD *)a4 - *(_QWORD *)&v15->fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&v15->fmtid.Data1 )
v17 = *(_QWORD *)(a4 + 8) - *(_QWORD *)v15->fmtid.Data4;
if( !v17 )
break;
}
v16 = 0i64;
v10 += 4;
}
if( !v16 )
return(unsigned int)-1073741802;
v18 = *((_DWORD *)v16 + 2);
if( a5 != v18 )
{
if( a5 == 25 )
{
if( v18 == 18 )
goto LABEL_10;
}
else if( a5 < 2 )
{
goto LABEL_10;
}
return(unsigned int)-1073741811;
}
LABEL_10:
if( !a3 )
{
v8 = CmOpenInstallerClassRegKey(a1, a2, 0i64, (__int64)v10, 3, 0, (__int64)&v39, 0i64);
if( v8 < 0 )
goto LABEL_22;
}
v19 = *(_DWORD *)(a4 + 16);
v20 = (const WCHAR *)v16[2];
v21 = *((_DWORD *)v16 + 6);
if( v19 != 7 )
goto LABEL_49;
v25 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data1 )
v25 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoInstallClass.fmtid.Data4;
if( v25 )
{
LABEL_49:
if( v19 != 8 )
goto LABEL_85;
v26 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data1 )
v26 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoDisplayClass.fmtid.Data4;
if( v26 )
{
LABEL_85:
if( v19 != 9 )
goto LABEL_86;
v27 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_SilentInstall.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_SilentInstall.fmtid.Data1 )
v27 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_SilentInstall.fmtid.Data4;
if( v27 )
{
LABEL_86:
if( v19 != 10 )
goto LABEL_15;
v28 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_NoUseClass.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_NoUseClass.fmtid.Data1 )
v28 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_NoUseClass.fmtid.Data4;
if( v28 )
{
LABEL_15:
if( v19 != 15 )
{
if( v19 != 2 )
{
if( v19 != 3 )
goto LABEL_18;
v36 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_ClassName.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_ClassName.fmtid.Data1 )
v36 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_ClassName.fmtid.Data4;
if( v36 || a7 <= 0x40 )
{
LABEL_18:
v22 = v39;
if( a3 )
v22 = a3;
v23 = RegRtlSetValue(v22, v20, v21, a6, a7);
if( v23 < 0 )
v8 = v23;
goto LABEL_22;
}
goto LABEL_57;
}
v33 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data1 )
v33 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceClass_DHPRebalanceOptOut.fmtid.Data4;
if( v33 )
goto LABEL_18;
if( !a7 )
goto LABEL_57;
if( *a6 == 0xFF )
{
v34 = 1;
LABEL_74:
v35 = (char *)v39;
v38 = v34;
if( a3 )
v35 = (char *)a3;
v8 = PnpOpenPropertiesKey(a1, v35, 0i64, 2u, 1, v37, &Handle);
if( v8 < 0 )
goto LABEL_22;
v31 = Handle;
v30 = (wchar_t *)&v38;
goto LABEL_62;
}
if( !*a6 )
{
v34 = 0;
goto LABEL_74;
}
goto LABEL_57;
}
v29 = *(_QWORD *)a4 - DEVPKEY_DeviceClass_FSFilterClass;
if( *(_QWORD *)a4 == DEVPKEY_DeviceClass_FSFilterClass )
v29 = *(_QWORD *)(a4 + 8) - 0x6633D7A7C96808AFi64;
if( v29 )
goto LABEL_18;
}
}
}
}
if( a7 )
{
if( *a6 == 0xFF )
{
v30 = L"1";
}
else
{
if( *a6 )
goto LABEL_57;
v30 = (wchar_t *)L"0";
}
v31 = v39;
if( a3 )
v31 = a3;
LABEL_62:
v32 = RegRtlSetValue(v31, v20, v21, v30, 4u);
if( v32 == -1073741444 )
{
v8 = -1073741772;
}
else if( v32 < 0 )
{
v8 = v32;
}
goto LABEL_22;
}
LABEL_57:
v8 = -1073741811;
LABEL_22:
if( Handle )
ZwClose(Handle);
if( v39 )
ZwClose(v39);
return(unsigned int)v8;
}Referenced by:
CmSetInstallerClassMappedProperty