PipClearDevNodeProblem

INT64 __fastcall PipClearDevNodeProblem(INT64 a1, const WCHAR *a2, INT64 a3){
  INT64 result; 
  unsigned int v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  GUID *v10; 
  void *retaddr; 
  PVOID P; 
  result = (INT64)&retaddr;
  P = 0i64;
  v5 = *(_DWORD *)(a1 + 404);
  v6 = *(_DWORD *)(a1 + 408);
  if( (*(_DWORD *)(a1 + 396) & 0x2000) != 0 || v5 )
  {
    PiPnpRtlBeginOperation((__int64 **)&P);
    PipClearDevNodeFlags((_DEVICE_NODE *)a1, 0x2000ui64);
    v8 = *(_QWORD *)(a1 + 48);
    *(_DWORD *)(a1 + 404) = 0;
    *(_DWORD *)(a1 + 408) = 0;
    if( v8 )
    {
      PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v7, v8, 12);
      if( *(_DWORD *)(a1 + 408) != v6 )
        PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v9, *(_QWORD *)(a1 + 48), 13);
      PnpTraceClearDevNodeProblem((UNICODE_STRING *)(a1 + 40), (UNICODE_STRING *)(a1 + 56), v5, v6, v10);
      if( v5 == 22 )
      {
        result = SeAuditingWithTokenForSubcategory(0x89ui64, 0i64);
        if( (_BYTE)result )
          PiAuditDeviceEnableDisableAction((UNICODE_STRING *)(a1 + 40), 0x16ui64, *(unsigned int *)(a1 + 404));
      }
    }
    if( P )
      PiPnpRtlEndOperation(P);
  }
  return result;
}

Referenced by:

IoReportDetectedDevice
IopInitializeDeviceInstanceKey
PiDevCfgProcessDevice
PiProcessClearDeviceProblem
PiProcessNewDeviceNode
PiProcessQueryRemoveNoFdo
PiProcessResourceRequirementsChanged
PiProfileUpdateDeviceTreeCallback
PiRestartRemovalRelations
PipAttemptDependentStart
PipCallDriverAddDevice
PnpDisableDevice
PnpProcessAssignResourcesWorker
PnpProcessQueryRemoveAndEject
PnpRemoveLockedDeviceNode