CmGetInterfaceClassMappedPropertyFromRegValue
__int64 __fastcall CmGetInterfaceClassMappedPropertyFromRegValue(
__int64 a1,
const WCHAR *a2,
char *a3,
__int64 a4,
_DWORD *a5,
unsigned __int64 a6,
int a7,
_DWORD *a8){
_DWORD *v8;
int v9;
_DWORD *v10;
void *v13;
int v14;
__int64 v15;
int v16;
DEVPROPKEY **v17;
DEVPROPKEY *v18;
DEVPROPKEY **v19;
__int64 v20;
__int64 v21;
int v22;
int v24;
__int64 v25;
HANDLE KeyHandle;
HANDLE Handle;
int v29;
v8 = a5;
v9 = 0;
v10 = a8;
v29 = 0;
Handle = 0i64;
*a5 = 0;
*v10 = 0;
KeyHandle = 0i64;
v13 = (void *)a6;
if( a6 )
{
v14 = a7;
v13 = (void *)(-(__int64)(a7 != 0) & a6);
}
else
{
v14 = 0;
}
v15 = *(unsigned int *)(a4 + 16);
if( (unsigned int)v15 < 2 )
return(unsigned int)-1073741264;
v16 = 0;
v17 = &off_140983758;
do
{
v18 = *v17;
v19 = v17;
if( (_DWORD)v15 == (*v17)->pid )
{
v20 = *(_QWORD *)a4 - *(_QWORD *)&v18->fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&v18->fmtid.Data1 )
v20 = *(_QWORD *)(a4 + 8) - *(_QWORD *)v18->fmtid.Data4;
if( !v20 )
break;
}
v19 = 0i64;
++v16;
v17 += 2;
}
while( !v16 );
if( !v19 )
return(unsigned int)-1073741264;
if( (_DWORD)v15 == 2 )
{
v21 = *(_QWORD *)a4 - *(_QWORD *)&DEVPKEY_DeviceInterfaceClass_DefaultInterface.fmtid.Data1;
if( *(_QWORD *)a4 == *(_QWORD *)&DEVPKEY_DeviceInterfaceClass_DefaultInterface.fmtid.Data1 )
v21 = *(_QWORD *)(a4 + 8) - *(_QWORD *)DEVPKEY_DeviceInterfaceClass_DefaultInterface.fmtid.Data4;
if( !v21 )
{
if( !a3 )
{
v9 = CmOpenInterfaceClassRegKey(a1, a2, v15, a4, 1, 0, (__int64)&Handle, 0i64);
if( v9 < 0 )
goto LABEL_17;
a3 = (char *)Handle;
}
v22 = PnpOpenPropertiesKey(a1, a3, 0i64, 1u, 0, v25, &KeyHandle);
v9 = v22;
if( v22 == -1073741772 )
{
LABEL_16:
v9 = -1073741275;
goto LABEL_17;
}
if( v22 >= 0 )
{
LODWORD(a5) = v14;
v24 = RegRtlQueryValue(KeyHandle, L"Default", &v29, v13, (__int64)&a5);
ZwClose(KeyHandle);
if( v24 != -1073741772 && v24 != -1073741444 )
{
if( !v24 || v24 == -1073741789 )
{
*a8 = (_DWORD)a5;
*v8 = 18;
if( v24 || !v14 )
v9 = -1073741789;
}
else
{
v9 = v24;
}
goto LABEL_17;
}
goto LABEL_16;
}
LABEL_17:
if( Handle )
ZwClose(Handle);
}
}
return(unsigned int)v9;
}Referenced by:
CmGetInterfaceClassMappedProperty
CmGetInterfaceClassMappedPropertyKeys