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