IopDoDeferredSetInterfaceState

void __fastcall IopDoDeferredSetInterfaceState(_DEVICE_NODE *DeviceNode){
  _ETHREAD *CurrentThread; 
  UNICODE_STRING **v3; 
  UNICODE_STRING *v4; 
  UNICODE_STRING *v5; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(&PnpRegistryDeviceResource, 1u);
  PpMarkDeviceStackExtensionFlag(*((DEVICE_OBJECT **)DeviceNode + 4), 0x10ui64, 0);
  v3 = (UNICODE_STRING **)((char *)DeviceNode + 608);
  while( 1 )
  {
    v4 = *v3;
    if( *v3 == (UNICODE_STRING *)v3 )
      break;
    if( (UNICODE_STRING **)v4->Buffer != v3
      || (v5 = *(UNICODE_STRING **)&v4->Length, *(UNICODE_STRING **)(*(_QWORD *)&v4->Length + 8i64) != v4) )
    {
      __fastfail(3u);
    }
    *v3 = v5;
    v5->Buffer = (wchar_t *)v3;
    IopProcessSetInterfaceState(v4 + 1, 1u, 0);
    ExFreePoolWithTag(v4[1].Buffer, 0);
    ExFreePoolWithTag(v4, 0);
  }
  ExReleaseResourceLite(&PnpRegistryDeviceResource);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

IoReportDetectedDevice
PipProcessStartPhase2