__int64 __fastcall PnpDispatchDevice(__int64 a1, WCHAR *a2, __int64 a3, int a4, __int64 a5){
__int64(__fastcall *v6)(__int64, __int64, int);
__int128 *v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
unsigned int DeviceMappedProperty;
__int128 v18;
v6 = 0i64;
v7 = 0i64;
v18 = 0i64;
v8 = a4 - 1;
if( v8 )
{
v9 = v8 - 1;
if( v9 )
{
v10 = v9 - 1;
if( v10 )
{
v11 = v10 - 1;
if( v11 )
{
v12 = v11 - 1;
if( v12 )
{
v13 = v12 - 1;
if( v13 )
{
v14 = v13 - 1;
if( v14 )
{
v15 = v14 - 1;
if( v15 )
{
if( v15 == 1 )
DeviceMappedProperty = CmSetDeviceMappedProperty(
a1,
a2,
*(void **)a5,
*(_QWORD *)(a5 + 8),
*(_QWORD *)(a5 + 16),
*(_DWORD *)(a5 + 24),
*(PLARGE_INTEGER *)(a5 + 32),
*(_DWORD *)(a5 + 40));
else
DeviceMappedProperty = -1073741811;
}
else
{
DeviceMappedProperty = CmGetDeviceMappedProperty(
a1,
a2,
*(void **)a5,
*(_QWORD *)(a5 + 8),
*(_QWORD *)(a5 + 16),
*(int **)(a5 + 24),
*(wchar_t **)(a5 + 32),
*(_DWORD *)(a5 + 40),
*(unsigned int **)(a5 + 48),
*(_DWORD *)(a5 + 56) & 0xFFFF0000);
}
}
else
{
DeviceMappedProperty = CmGetDeviceMappedPropertyLocales(
a1,
0i64,
0i64,
*(_QWORD *)(a5 + 8),
*(_WORD **)(a5 + 16),
*(_DWORD *)(a5 + 24),
*(_DWORD **)(a5 + 32));
}
}
else
{
DeviceMappedProperty = CmGetDeviceMappedPropertyKeys(
a1,
a2,
*(_QWORD *)a5,
0,
*(_QWORD *)(a5 + 24),
*(_DWORD *)(a5 + 32),
*(unsigned int **)(a5 + 40));
}
}
else
{
if( *(_QWORD *)a5 )
{
*(_QWORD *)&v18 = *(_QWORD *)a5;
v6 = PnpCmMatchCallbackRoutine;
v7 = &v18;
*((_QWORD *)&v18 + 1) = *(_QWORD *)(a5 + 8);
}
DeviceMappedProperty = CmGetMatchingDeviceList(
a1,
(__int64)v6,
(__int64)v7,
*(_QWORD *)(a5 + 16),
*(_DWORD *)(a5 + 24),
*(_QWORD *)(a5 + 32),
*(_DWORD *)(a5 + 40) & 0xFFFF0000);
}
}
else
{
DeviceMappedProperty = CmDeleteDevice(a1, a2, *(_DWORD *)a5 & 0xFFFF0000);
}
}
else
{
DeviceMappedProperty = CmCreateDevice(
a1,
a2,
*(_DWORD *)a5,
(HANDLE *)(a5 + 8),
(_BYTE *)(a5 + 16),
*(_DWORD *)(a5 + 20) & 0xFFFF0000);
}
}
else
{
DeviceMappedProperty = CmOpenDeviceRegKey(
a1,
a2,
16,
0,
*(_DWORD *)a5,
*(_BYTE *)(a5 + 4),
*(_QWORD *)(a5 + 8),
(_DWORD *)(a5 + 16));
}
}
else
{
DeviceMappedProperty = CmValidateDeviceName(a1, a2);
}
return PnpMapCmStatusToDispatchStatus(DeviceMappedProperty);
}