IopDoDeferredSetInterfaceState

VOID __fastcall IopDoDeferredSetInterfaceState(_DEVICE_NODE *DeviceNode){
  INT64 v1; 
  _ETHREAD *CurrentThread; 
  _LIST_ENTRY *p_PendedSetInterfaceState; 
  _UNICODE_STRING *Flink; 
  _LIST_ENTRY *v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 6688, 1, v1);
  PpMarkDeviceStackExtensionFlag(DeviceNode->PhysicalDeviceObject, 0x10ui64, 0);
  p_PendedSetInterfaceState = &DeviceNode->PendedSetInterfaceState;
  while( 1 )
  {
    Flink = (_UNICODE_STRING *)p_PendedSetInterfaceState->Flink;
    if( p_PendedSetInterfaceState->Flink == p_PendedSetInterfaceState )
      break;
    if( (_LIST_ENTRY *)Flink->Buffer != p_PendedSetInterfaceState
      || (v6 = *(_LIST_ENTRY **)&Flink->Length, *(_UNICODE_STRING **)(*(_QWORD *)&Flink->Length + 8i64) != Flink) )
    {
      __fastfail(3u);
    }
    p_PendedSetInterfaceState->Flink = v6;
    v6->Blink = p_PendedSetInterfaceState;
    IopProcessSetInterfaceState(Flink + 1, 1u, 0);
    ExFreePoolWithTag(Flink[1].Buffer, 0);
    ExFreePoolWithTag(Flink, 0);
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

IoReportDetectedDevice
PipProcessStartPhase2