CmGetDeviceMappedPropertyFromInstanceKeyRegValue
__int64 __fastcall CmGetDeviceMappedPropertyFromInstanceKeyRegValue(
__int64 a1,
const wchar_t *a2,
void *a3,
__int64 a4,
__int64 a5,
__int64 a6,
int a7,
_DWORD *a8){
_DWORD *v8;
int v9;
_DWORD *v10;
HANDLE v11;
__int64 v13;
int v15;
int v16;
DEVPROPKEY **v17;
unsigned int i;
DEVPROPKEY *v19;
DEVPROPKEY **v20;
__int64 v21;
const WCHAR *v22;
__int64 v23;
int v24;
int v26;
int v27;
HANDLE Handle;
v8 = (_DWORD *)a5;
v9 = 0;
v10 = a8;
v11 = 0i64;
v27 = 0;
v13 = a6;
*(_DWORD *)a5 = 0;
*v10 = 0;
Handle = 0i64;
if( v13 )
{
v15 = a7;
v13 &= -(__int64)(a7 != 0);
}
else
{
v15 = 0;
}
v16 = *(_DWORD *)(a4 + 16);
v17 = &off_140983E70;
for( i = 0; i < 2; ++i )
{
v19 = *v17;
v20 = v17;
if( v16 == (*v17)->pid )
{
v21 = *(_QWORD *)a4 - *(_QWORD *)&v19->fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&v19->fmtid.Data1 )
v21 = *(_QWORD *)(a4 + 8) - *(_QWORD *)v19->fmtid.Data4;
if( !v21 )
break;
}
v20 = 0i64;
v17 += 4;
}
if( !v20 )
return(unsigned int)-1073741264;
if( !a3 )
{
v9 = CmOpenDeviceRegKey(a1, a2, 16, 0, 1, 0, (__int64)&Handle, 0i64);
if( v9 < 0 )
goto LABEL_22;
v11 = Handle;
}
v22 = (const WCHAR *)v20[2];
if( *(_DWORD *)(a4 + 16) == 2 )
{
v23 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_Device_Reported.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_Device_Reported.fmtid.Data1 )
v23 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_Device_Reported.fmtid.Data4;
if( !v23 )
{
LODWORD(a6) = 0;
LODWORD(a5) = 4;
if( a3 )
v11 = a3;
if( (int)RegRtlQueryValue(v11, v22, &v27, &a6, (__int64)&a5) >= 0 && v27 == 4 && (_DWORD)a5 == 4 )
v24 = a6;
else
v24 = 0;
if( !v24 )
{
LABEL_21:
v9 = -1073741275;
goto LABEL_22;
}
*a8 = 1;
*v8 = 17;
if( v15 )
{
*(_BYTE *)v13 = -1;
goto LABEL_22;
}
LABEL_44:
v9 = -1073741789;
goto LABEL_22;
}
}
LODWORD(a5) = v15;
if( a3 )
v11 = a3;
v26 = RegRtlQueryValue(v11, v22, &v27, (void *)v13, (__int64)&a5);
if( v26 == -1073741772 || v26 == -1073741444 )
goto LABEL_21;
if( v26 && v26 != -1073741789 )
{
v9 = v26;
goto LABEL_22;
}
*a8 = a5;
*v8 = *((_DWORD *)v20 + 2);
if( v26 || !v15 )
goto LABEL_44;
LABEL_22:
if( Handle )
ZwClose(Handle);
return(unsigned int)v9;
}Referenced by:
CmGetDeviceMappedProperty
CmGetDeviceMappedPropertyKeys