PipSetDevNodeProblem
void __fastcall PipSetDevNodeProblem(__int64 a1, int a2, int a3){
int v3;
unsigned int v5;
int v7;
__int64 v8;
__int64 v9;
UINT64 LastProblem;
INT64 LastProblemStatus;
GUID *ProblemStatus;
UINT64 v13;
INT64 v14;
PVOID P;
P = 0i64;
v3 = a3;
v5 = *(_DWORD *)(a1 + 404);
v7 = *(_DWORD *)(a1 + 408);
if( (*(_DWORD *)(a1 + 396) & 0x2000) == 0 || v5 != a2 || v7 != a3 )
{
PiPnpRtlBeginOperation((__int64 **)&P);
PipSetDevNodeFlags(a1, 0x2000);
v9 = *(_QWORD *)(a1 + 48);
*(_DWORD *)(a1 + 404) = a2;
*(_DWORD *)(a1 + 408) = v3;
if( v9 )
{
if( a2 != v5 )
{
PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v8, v9, 12);
v3 = *(_DWORD *)(a1 + 408);
}
if( v3 != v7 )
{
PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v8, *(_QWORD *)(a1 + 48), 13);
v3 = *(_DWORD *)(a1 + 408);
}
LODWORD(ProblemStatus) = v7;
LODWORD(LastProblemStatus) = v5;
LODWORD(LastProblem) = v3;
PnpTraceSetDevNodeProblem(
(UNICODE_STRING *)(a1 + 40),
(UNICODE_STRING *)(a1 + 56),
*(unsigned int *)(a1 + 300),
*(unsigned int *)(a1 + 404),
LastProblem,
LastProblemStatus,
ProblemStatus,
v13,
v14);
if( *(_DWORD *)(a1 + 404) == 22 && (unsigned __int8)SeAuditingWithTokenForSubcategory(0x89ui64, 0i64) )
PiAuditDeviceEnableDisableAction((UNICODE_STRING *)(a1 + 40), v5, *(unsigned int *)(a1 + 404));
}
if( P )
PiPnpRtlEndOperation(P);
}
}Referenced by:
IoReportDetectedDevice
IopInitializeDeviceInstanceKey
PiDevCfgProcessDevice
PiInitializeDevice
PiProcessNewDeviceNode
PiProcessQueryRemoveNoFdo
PiProcessSetDeviceProblem
PiProfileUpdateDeviceTreeCallback
PipCallDriverAddDevice
PipCallDriverAddDeviceQueryRoutine
PipProcessDevNodeTree
PipProcessEnumeratedChildDevice
PnpDisableDevice
PnpDriverLoadingFailed
PnpProcessAssignResources
PnpQueryID
PnpRemoveLockedDeviceNode
PnpSurpriseRemoveLockedDeviceNode