PiPnpRtlSetObjectProperty
INT64 __fastcall PiPnpRtlSetObjectProperty(
INT64 a1,
WCHAR *a2,
UINT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
WCHAR *pszSrc,
UINT64 a9,
UINT64 a10){
unsigned int v11;
int v13;
int v14;
char *v15;
unsigned int i;
_QWORD *v17;
__int64 v18;
__int64 v19;
int v20;
int v21;
__int64 v22;
int v23;
unsigned int v24;
int v25;
__int64 v27;
__int64 v28;
int v29;
INT64(__stdcall *v30)(PVOID);
unsigned int v31;
_QWORD *v32;
__int64 v33;
bool v34;
__int64 v35;
__int64 v36;
__int64 v37;
_ETHREAD *CurrentThread;
__int64 v39;
__int64 v40;
WCHAR v41;
__int64 v42;
__int64 v43;
__int64 v44;
__int64 v45;
__int64 v46;
WCHAR v47;
__int64 v48;
bool v49;
__int64 v50;
int DeviceRegProp;
int ObjectProperty;
char v53;
ULONG v54;
int v55;
UINT64 OldConfigFlags;
int v57;
UINT64 NewConfigFlags;
__int64 v59;
unsigned int v60;
unsigned int v61;
__int64 v62;
struct _UNICODE_STRING DestinationString;
__int64 v64;
__int128 v65;
GUID Guid;
v62 = a1;
v11 = a3;
v59 = a4;
v64 = a5;
v61 = 0;
v13 = 0;
v60 = 0;
v54 = 0;
v57 = 0;
OldConfigFlags = 0i64;
LODWORD(NewConfigFlags) = 0;
v55 = 0;
v53 = 0;
DestinationString = 0i64;
Guid = 0i64;
v65 = 0i64;
if( (_DWORD)a3 != 1 )
{
if( (_DWORD)a3 == 3 )
{
if( *(_DWORD *)(a6 + 16) == 256 )
{
v48 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_InstanceId.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_InstanceId.fmtid.Data1 )
v48 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_InstanceId.fmtid.Data4;
v49 = v48 == 0;
LABEL_95:
if( v49 )
return(unsigned int)-1073741790;
}
}
else if( (_DWORD)a3 == 5 )
{
v29 = *(_DWORD *)(a6 + 16);
v30 = PiPnpRtlContainerReadOnlyProps;
v31 = 0;
while( 1 )
{
v32 = *(_QWORD **)v30;
if( v29 == *(_DWORD *)(*(_QWORD *)v30 + 16i64) )
{
v43 = *(_QWORD *)a6 - *v32;
if( *(_QWORD *)a6 == *v32 )
v43 = *(_QWORD *)(a6 + 8) - v32[1];
if( !v43 )
return(unsigned int)-1073741790;
}
++v31;
v30 = (INT64(__stdcall *)(PVOID))((char *)v30 + 8);
if( v31 >= 2 )
{
if( v29 == 105 )
{
v33 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_DeviceContainer_ConfigFlags.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_DeviceContainer_ConfigFlags.fmtid.Data1 )
v33 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_DeviceContainer_ConfigFlags.fmtid.Data4;
if( !v33 )
{
v34 = (_DWORD)a7 == 7;
goto LABEL_43;
}
}
break;
}
}
}
LABEL_9:
v18 = *(_QWORD *)DEVPKEY_Device_ConfigFlags.fmtid.Data4;
v19 = *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1;
goto LABEL_10;
}
v14 = *(_DWORD *)(a6 + 16);
v15 = (char *)&PiPnpRtlDeviceReadOnlyProps;
for( i = 0; i < 0xD; ++i )
{
v17 = *(_QWORD **)v15;
if( v14 == *(_DWORD *)(*(_QWORD *)v15 + 16i64) )
{
v28 = *(_QWORD *)a6 - *v17;
if( *(_QWORD *)a6 == *v17 )
v28 = *(_QWORD *)(a6 + 8) - v17[1];
if( !v28 )
return(unsigned int)-1073741790;
}
v15 += 8;
}
if( v14 != 12 )
{
if( v14 == 3 )
{
v36 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_HardwareIds.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_HardwareIds.fmtid.Data1 )
v36 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_HardwareIds.fmtid.Data4;
if( !v36 )
goto LABEL_94;
}
if( v14 == 4 )
{
v42 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_CompatibleIds.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_CompatibleIds.fmtid.Data1 )
v42 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_CompatibleIds.fmtid.Data4;
if( !v42 )
{
LABEL_94:
v49 = CmIsRootEnumeratedDevice(a2) == 0;
goto LABEL_95;
}
}
else if( v14 == 2 )
{
v35 = *(_QWORD *)a6 - DEVPKEY_Device_PanelId;
if( *(_QWORD *)a6 == DEVPKEY_Device_PanelId )
v35 = *(_QWORD *)(a6 + 8) + 0x5292C1A216403965i64;
if( !v35 )
{
if( !pszSrc
|| (unsigned int)a9 < 2
|| (_DWORD)a7 != 18
|| pszSrc[((unsigned __int64)(unsigned int)a9 >> 1) - 1]
|| (int)CmSplitDevicePanelId(pszSrc, &Guid, &v61, &v60) < 0
|| (int)PnpGetObjectProperty(
a1,
(__int64)a2,
1i64,
v59,
0i64,
(__int64)&DEVPKEY_Device_ContainerId,
&v55,
(unsigned __int64)&v65,
16,
&v54,
0) < 0
|| v55 != 13
|| v54 != 16 )
{
return(unsigned int)-1073741811;
}
v50 = v65 - *(_QWORD *)&Guid.Data1;
if( (_QWORD)v65 == *(_QWORD *)&Guid.Data1 )
v50 = *((_QWORD *)&v65 + 1) - *(_QWORD *)Guid.Data4;
v34 = v50 == 0;
LABEL_43:
if( !v34 )
return(unsigned int)-1073741811;
}
}
goto LABEL_9;
}
v19 = *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1;
v18 = *(_QWORD *)DEVPKEY_Device_ConfigFlags.fmtid.Data4;
v44 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1 )
v44 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_ConfigFlags.fmtid.Data4;
if( !v44 && (!pszSrc || (_DWORD)a9 != 4) )
return(unsigned int)-1073741811;
LABEL_10:
v20 = 5;
if( v11 == 1 )
{
v21 = *(_DWORD *)(a6 + 16);
switch( v21 )
{
case 10:
v37 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_ClassGuid.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_ClassGuid.fmtid.Data1 )
v37 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_ClassGuid.fmtid.Data4;
if( !v37 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&PnpRegistryDeviceResource, 1u);
v53 = 1;
}
break;
case 12:
v45 = *(_QWORD *)a6 - v19;
if( *(_QWORD *)a6 == v19 )
v45 = *(_QWORD *)(a6 + 8) - v18;
if( !v45 && (unsigned __int8)SeAuditingWithTokenForSubcategory(0x89ui64, 0i64) )
{
v54 = 4;
DeviceRegProp = CmGetDeviceRegProp(
v62,
a2,
v59,
11,
(__int64)&v57,
(__int64)&OldConfigFlags,
(__int64)&v54,
0);
if( DeviceRegProp < 0 || v54 != 4 || v57 != 4 )
LODWORD(OldConfigFlags) = 0;
LODWORD(NewConfigFlags) = *(_DWORD *)pszSrc;
}
break;
case 5:
v39 = *(_QWORD *)a6 - DEVPKEY_Device_InstallError;
if( *(_QWORD *)a6 == DEVPKEY_Device_InstallError )
v39 = *(_QWORD *)(a6 + 8) - 0x293B573F92A15394i64;
if( !v39 && (unsigned __int8)SeAuditingWithTokenForSubcategory(0x89ui64, 0i64) )
{
v54 = 4;
ObjectProperty = PnpGetObjectProperty(
v62,
(__int64)a2,
1i64,
v59,
0i64,
(__int64)&DEVPKEY_Device_InstallError,
&v55,
(unsigned __int64)&OldConfigFlags + 4,
4,
&v54,
0);
if( ObjectProperty < 0 || v54 != 4 || v55 != 23 )
HIDWORD(OldConfigFlags) = 0;
if( (_DWORD)a9 == 4 && (_DWORD)a7 == 23 )
v13 = *(_DWORD *)pszSrc;
}
break;
}
}
v22 = v62;
v23 = PnpSetObjectProperty(v62, (__int64)a2, v11, v59, v64, a6, a7, (__int64)pszSrc, a9, a10);
v24 = v11 - 1;
if( v24 )
{
if( v24 == 2 && v23 >= 0 && *(_DWORD *)(a6 + 16) == 9 )
{
v27 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_PhysicalDeviceLocation.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_PhysicalDeviceLocation.fmtid.Data1 )
v27 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_PhysicalDeviceLocation.fmtid.Data4;
if( !v27 )
CmUpdateDevicePanelInterface(v22, (__int64)a2, v59);
}
goto LABEL_17;
}
v25 = *(_DWORD *)(a6 + 16);
if( v25 == 12 )
{
v46 = *(_QWORD *)a6 - *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1;
if( *(_QWORD *)a6 == *(_QWORD *)&DEVPKEY_Device_ConfigFlags.fmtid.Data1 )
v46 = *(_QWORD *)(a6 + 8) - *(_QWORD *)DEVPKEY_Device_ConfigFlags.fmtid.Data4;
if( !v46 && (unsigned __int8)SeAuditingWithTokenForSubcategory(0x89ui64, 0i64) )
{
RtlInitUnicodeString(&DestinationString, a2, v47);
PiAuditDeviceEnableDisableRequest(
&DestinationString,
(unsigned int)OldConfigFlags,
(unsigned int)NewConfigFlags,
v23 >= 0);
}
goto LABEL_17;
}
if( v25 == 5 )
{
v40 = *(_QWORD *)a6 - DEVPKEY_Device_InstallError;
if( *(_QWORD *)a6 == DEVPKEY_Device_InstallError )
v40 = *(_QWORD *)(a6 + 8) - 0x293B573F92A15394i64;
if( !v40 && (unsigned __int8)SeAuditingWithTokenForSubcategory(0x89ui64, 0i64) )
{
RtlInitUnicodeString(&DestinationString, a2, v41);
if( HIDWORD(OldConfigFlags) == -536870328 )
{
if( v13 == -536870328 )
goto LABEL_17;
v20 = 6;
}
else if( v13 != -536870328 )
{
goto LABEL_17;
}
PiAuditDeviceOperation((__int64)&DestinationString, v20, v23 >= 0);
}
}
LABEL_17:
if( v53 )
{
ExReleaseResourceLite(&PnpRegistryDeviceResource);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
return(unsigned int)v23;
}Referenced by:
PiCMSetObjectProperty
PiDevCfgSetObjectProperty
PiDqIrpPropertySet
PiSwPropertySet
PnpSetDeviceInterfacePropertyData
PnpSetDevicePropertyData