PnpDeviceRaisePropertyChangeEventWorker
char __fastcall PnpDeviceRaisePropertyChangeEventWorker(
__int64 a1,
__int64 a2,
__int64 a3,
__int64 a4,
__int64 a5,
void (__fastcall *a6)(__int64, __int64, __int64)){
int v10;
char v11;
__int64 v12;
__int64 *v13;
__int64 v14;
__int64 v15;
__int64 v16;
DEVPROPKEY ***v17;
unsigned int v18;
unsigned int v19;
__int64 v20;
DEVPROPKEY *v21;
char v22;
__int64 v23;
int v24;
DEVPROPKEY ***v25;
unsigned int v26;
__int64 v27;
DEVPROPKEY *v28;
int MatchingFilteredDeviceInterfaceList;
__int64 v30;
__int64 v31;
__int64 v32;
int ObjectProperty;
int v34;
__int64 *v35;
__int64 v36;
__int64 v37;
__int64 v38;
__int64 v39;
__int64 v40;
__int64 v41;
ULONG v43;
_BYTE v44[24];
int v45;
__int64 v46;
__int64 v47;
__int128 v48;
__int128 v49;
__int128 Source2;
__int16 v51[40];
v46 = a2;
v47 = a3;
v45 = 0;
v43 = 0;
*(_OWORD *)&v44[8] = 0i64;
Source2 = 0i64;
v48 = 0i64;
v49 = 0i64;
if( a4 )
goto LABEL_4;
v10 = *(_DWORD *)(a5 + 16);
if( v10 == 6 )
{
v40 = *(_QWORD *)a5 - *(_QWORD *)&DEVPKEY_Device_SessionId.fmtid.Data1;
if( *(_QWORD *)a5 == *(_QWORD *)&DEVPKEY_Device_SessionId.fmtid.Data1 )
v40 = *(_QWORD *)(a5 + 8) - *(_QWORD *)DEVPKEY_Device_SessionId.fmtid.Data4;
if( !v40 )
goto LABEL_69;
}
if( v10 != 100 )
goto LABEL_4;
v41 = *(_QWORD *)a5 - DEVPKEY_Device_RestrictedSD;
if( *(_QWORD *)a5 == DEVPKEY_Device_RestrictedSD )
v41 = *(_QWORD *)(a5 + 8) - 0x57C1C6A499921E96i64;
if( v41 )
{
LABEL_4:
v11 = 0;
}
else
{
LABEL_69:
*(_QWORD *)v44 = 0i64;
v11 = 1;
a6(a1, a2, 1i64);
}
*(_QWORD *)v44 = a3;
*(_QWORD *)&v44[8] = a4;
*(_QWORD *)&v44[16] = a5;
a6(a1, a2, 1i64);
v12 = v46;
v13 = &qword_140001D98;
v14 = 12i64;
do
{
v15 = 0i64;
if( *(_DWORD *)v13 )
{
while( 1 )
{
v16 = *(_QWORD *)(*(v13 - 1) + 8 * v15);
if( *(_DWORD *)(a5 + 16) == *(_DWORD *)(v16 + 16) )
{
v30 = *(_QWORD *)a5 - *(_QWORD *)v16;
if( *(_QWORD *)a5 == *(_QWORD *)v16 )
v30 = *(_QWORD *)(a5 + 8) - *(_QWORD *)(v16 + 8);
if( !v30 )
break;
}
v15 = (unsigned int)(v15 + 1);
if( (unsigned int)v15 >= *(_DWORD *)v13 )
goto LABEL_9;
}
*(_QWORD *)&v44[16] = v13[1];
((void(__fastcall *)(__int64, __int64, __int64, __int64, _BYTE *))a6)(a1, v12, 1i64, 4i64, v44);
}
LABEL_9:
v13 += 3;
--v14;
}
while( v14 );
v17 = &off_140001D30;
v18 = 0;
while( 1 )
{
v19 = *((_DWORD *)v17 + 2);
v20 = 0i64;
if( v19 )
break;
LABEL_14:
++v18;
v17 += 3;
if( v18 >= 3 )
{
v22 = 0;
goto LABEL_16;
}
}
while( 1 )
{
v21 = (*v17)[v20];
if( *(_DWORD *)(a5 + 16) == v21->pid )
{
v31 = *(_QWORD *)a5 - *(_QWORD *)&v21->fmtid.Data1;
if( *(_QWORD *)a5 == *(_QWORD *)&v21->fmtid.Data1 )
v31 = *(_QWORD *)(a5 + 8) - *(_QWORD *)v21->fmtid.Data4;
if( !v31 )
break;
}
v20 = (unsigned int)(v20 + 1);
if( (unsigned int)v20 >= v19 )
goto LABEL_14;
}
v22 = 1;
LABEL_16:
if( v11 || v22 )
{
v23 = v46;
ObjectProperty = PnpGetObjectProperty(
a1,
v46,
1i64,
v47,
0i64,
(__int64)&DEVPKEY_Device_ContainerId,
&v45,
(unsigned __int64)&Source2,
16,
&v43,
0);
if( ObjectProperty == -1073741275 || ObjectProperty == -1073741772 )
goto LABEL_19;
if( ObjectProperty < 0 )
goto LABEL_70;
if( RtlCompareMemory(qword_14000A920, &Source2, 0x10ui64) == 16 )
goto LABEL_19;
PnpStringFromGuid((int *)&Source2, (wchar_t *)v51);
if( v34 < 0 )
{
LABEL_70:
*(_QWORD *)v44 = 0i64;
((void(__fastcall *)(__int64, _QWORD, __int64, __int64, _BYTE *))a6)(a1, 0i64, 5i64, 1i64, v44);
goto LABEL_19;
}
if( v11 )
{
*(_QWORD *)v44 = 0i64;
((void(__fastcall *)(__int64, __int16 *, __int64, __int64, _BYTE *))a6)(a1, v51, 5i64, 5i64, v44);
}
if( v22 )
{
v35 = &qword_140001D38;
*(_OWORD *)v44 = 0i64;
v36 = 3i64;
do
{
v37 = 0i64;
if( *(_DWORD *)v35 )
{
while( 1 )
{
v38 = *(_QWORD *)(*(v35 - 1) + 8 * v37);
if( *(_DWORD *)(a5 + 16) == *(_DWORD *)(v38 + 16) )
{
v39 = *(_QWORD *)a5 - *(_QWORD *)v38;
if( *(_QWORD *)a5 == *(_QWORD *)v38 )
v39 = *(_QWORD *)(a5 + 8) - *(_QWORD *)(v38 + 8);
if( !v39 )
break;
}
v37 = (unsigned int)(v37 + 1);
if( (unsigned int)v37 >= *(_DWORD *)v35 )
goto LABEL_52;
}
*(_QWORD *)&v44[16] = v35[1];
((void(__fastcall *)(__int64, __int16 *, __int64, __int64, _BYTE *))a6)(a1, v51, 5i64, 4i64, v44);
}
LABEL_52:
v35 += 3;
--v36;
}
while( v36 );
}
}
else
{
v23 = v46;
}
LABEL_19:
v24 = 0;
v25 = &off_140001D78;
while( 1 )
{
v26 = *((_DWORD *)v25 + 2);
v27 = 0i64;
if( v26 )
break;
LABEL_23:
++v24;
v25 += 3;
if( v24 )
{
LOBYTE(MatchingFilteredDeviceInterfaceList) = 0;
goto LABEL_25;
}
}
while( 1 )
{
v28 = (*v25)[v27];
if( *(_DWORD *)(a5 + 16) == v28->pid )
{
v32 = *(_QWORD *)a5 - *(_QWORD *)&v28->fmtid.Data1;
if( *(_QWORD *)a5 == *(_QWORD *)&v28->fmtid.Data1 )
v32 = *(_QWORD *)(a5 + 8) - *(_QWORD *)v28->fmtid.Data4;
if( !v32 )
break;
}
v27 = (unsigned int)(v27 + 1);
if( (unsigned int)v27 >= v26 )
goto LABEL_23;
}
LOBYTE(MatchingFilteredDeviceInterfaceList) = 1;
LABEL_25:
if( v11 || (_BYTE)MatchingFilteredDeviceInterfaceList )
{
*(_QWORD *)&v48 = a6;
BYTE12(v49) = v11;
if( (_BYTE)MatchingFilteredDeviceInterfaceList )
{
*((_QWORD *)&v48 + 1) = a5;
*(_QWORD *)&v49 = &off_140001D78;
DWORD2(v49) = 1;
}
MatchingFilteredDeviceInterfaceList = CmGetMatchingFilteredDeviceInterfaceList(
a1,
0i64,
v23,
0,
(__int64)PnpUpdateInterfacesCallback,
(__int64)&v48,
0i64,
0,
(__int64)&v43,
0);
if( MatchingFilteredDeviceInterfaceList < 0 )
{
*(_QWORD *)v44 = 0i64;
LOBYTE(MatchingFilteredDeviceInterfaceList) = ((__int64(__fastcall *)(__int64, _QWORD, __int64, __int64, _BYTE *))a6)(
a1,
0i64,
3i64,
1i64,
v44);
}
}
return MatchingFilteredDeviceInterfaceList;
}Referenced by:
PnpObjectRaisePropertyChangeEvent