CmGetMatchingFilteredDeviceListWorker
__int64 __fastcall CmGetMatchingFilteredDeviceListWorker(
__int64 a1,
const WCHAR *a2,
int a3,
char (__fastcall *a4)(__int64 a1, const wchar_t *a2, unsigned int a3, __int64 a4),
__int64 *a5,
_WORD *a6,
unsigned int a7,
unsigned int *a8,
__int16 a9){
char(__fastcall *v9)(__int64, const wchar_t *, unsigned int, __int64);
unsigned int MatchingDeviceListForSubkey;
__int64 *v11;
_WORD *v14;
unsigned int v15;
unsigned int *v16;
__int64 v17[3];
const WCHAR *v18;
PVOID P;
__int64 v20;
char(__fastcall *v21)(__int64, const wchar_t *, unsigned int, __int64);
__int64 *v22;
v9 = a4;
*a8 = 0;
if( a7 )
*a6 = 0;
if( (a3 & 0xFFFFFE00) != 0 || a9 )
return(unsigned int)-1073741811;
if( (a3 & 0x7C) != 0 )
{
if( !a2 )
return(unsigned int)-1073741811;
return(unsigned int)CmGetDeviceRelationsList(a1, a2, a3, (__int64)a6, a7, (__int64)a8);
}
if( (a3 & 2) == 0 )
{
if( (a3 & 0x80u) != 0 )
{
if( !a2 )
return(unsigned int)-1073741811;
v16 = a8;
v15 = a7;
v17[2] = (__int64)a5;
v11 = v17;
v14 = a6;
a4 = CmClassFilterCallback;
v17[0] = (__int64)a2;
v17[1] = (__int64)v9;
return(unsigned int)CmGetMatchingDeviceListForSubkey(
a1,
0i64,
BYTE1(a3) & 1,
(__int64)a4,
(__int64)v11,
v14,
v15,
v16);
}
if( (a3 & 1) == 0 )
{
v11 = a5;
v16 = a8;
v15 = a7;
v14 = a6;
return(unsigned int)CmGetMatchingDeviceListForSubkey(
a1,
0i64,
BYTE1(a3) & 1,
(__int64)a4,
(__int64)v11,
v14,
v15,
v16);
}
if( !a2 )
return(unsigned int)-1073741811;
return(unsigned int)CmGetMatchingDeviceListForSubkey(a1, a2, BYTE1(a3) & 1, (__int64)a4, (__int64)a5, a6, a7, a8);
}
if( !a2 )
return(unsigned int)-1073741811;
v22 = a5;
v18 = a2;
v20 = 0i64;
P = 0i64;
v21 = a4;
MatchingDeviceListForSubkey = CmGetMatchingDeviceListForSubkey(
a1,
0i64,
BYTE1(a3) & 1,
(__int64)CmServiceFilterCallback,
(__int64)&v18,
a6,
a7,
a8);
if( P )
ExFreePoolWithTag(P, 0);
return MatchingDeviceListForSubkey;
}Referenced by:
CmGetMatchingFilteredDeviceList