IopInitializePlugPlayServices

NTSTATUS __stdcall IopInitializePlugPlayServices(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 Phase){
  unsigned int *v3; 
  WCHAR v4; 
  unsigned int *v5; 
  WCHAR v6; 
  NTSTATUS result; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  INT64 v11; 
  NTSTATUS CachedContextBaseKey; 
  INT64 v13; 
  INT64 v14; 
  INT64 v15; 
  INT64 v16; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  HANDLE v20; 
  HANDLE v21; 
  LPGUID v22; 
  _DEVICE_OBJECT *v23; 
  PDEVICE_OBJECT v24; 
  UNICODE_STRING *v25; 
  _PNP_DEVNODE_STATE *v26; 
  INT64 v27; 
  INT64 v28; 
  INT64 v29; 
  INT64 v30; 
  unsigned __int64 v31; 
  __int64 v32; 
  INT64 v33; 
  INT64 v34; 
  WCHAR v35; 
  PUNICODE_STRING Class; 
  struct _OBJECT_ATTRIBUTES *Classa; 
  PUNICODE_STRING Classb; 
  UINT64 CreateOptions; 
  UINT8 SystemFirmwareUpdated[8]; 
  HANDLE Handle; 
  PVOID P; 
  UNICODE_STRING KeyName; 
  void *KeyHandle; 
  PVOID v45; 
  PVOID BaseHandle; 
  PVOID v47; 
  PVOID v48; 
  PVOID v49; 
  HANDLE v50; 
  PDEVICE_OBJECT DeviceObject; 
  UINT64 Disposition; 
  UNICODE_STRING v53; 
  UNICODE_STRING GuidString; 
  UNICODE_STRING InsertionString2; 
  struct _UNICODE_STRING DestinationString; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  struct _EVENT_DATA_DESCRIPTOR UserData; 
  struct _EVENT_DATA_DESCRIPTOR v59; 
  PDEVICE_OBJECT *p_DeviceObject; 
  __int64 v61; 
  HANDLE *v62; 
  __int64 v63; 
  PVOID *v64; 
  __int64 v65; 
  PVOID *v66; 
  __int64 v67; 
  PVOID *v68; 
  __int64 v69; 
  PVOID *p_BaseHandle; 
  __int64 v71; 
  PVOID *v72; 
  __int64 v73; 
  PVOID *p_P; 
  __int64 v75; 
  UNICODE_STRING *v76; 
  __int64 v77; 
  v50 = 0i64;
  Handle = 0i64;
  BaseHandle = 0i64;
  *(_DWORD *)(&KeyName.MaximumLength + 1) = 0;
  DeviceObject = 0i64;
  LODWORD(Disposition) = 0;
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  v45 = 0i64;
  P = 0i64;
  v47 = 0i64;
  v48 = 0i64;
  v49 = 0i64;
  KeyHandle = 0i64;
  *(_DWORD *)(&v53.MaximumLength + 1) = 0;
  *(_DWORD *)(&GuidString.MaximumLength + 1) = 0;
  SystemFirmwareUpdated[0] = 0;
  DestinationString = 0i64;
  InsertionString2 = 0i64;
  if( (_DWORD)Phase )
  {
    if( (_DWORD)Phase != 1 )
      return -1073741584;
    result = PnpDiagInitialize((INT64)LoaderBlock, Phase);
    if( result >= 0 )
    {
      PnpTraceInitialize();
      result = PiDcInit(1ui64);
      if( result >= 0 )
      {
        result = PiUEventInit(1ui64);
        if( result >= 0 )
        {
          v31 = *((_QWORD *)LoaderBlock + 30) + 136i64;
          *(_QWORD *)&UserData.Size = 80i64;
          UserData.Ptr = v31;
          PnpDiagnosticTrace(&KMPnPEvt_OsLoader_Time, 1ui64, &UserData);
          if( (unsigned int)dword_140C02E30 > 4 && tlgKeywordOn((__int64)&dword_140C02E30, 0x400000000000i64) )
          {
            v32 = *((_QWORD *)LoaderBlock + 30);
            DeviceObject = *(PDEVICE_OBJECT *)(v32 + 136);
            p_DeviceObject = &DeviceObject;
            v61 = 8i64;
            v50 = *(HANDLE *)(v32 + 144);
            v62 = &v50;
            v63 = 8i64;
            v49 = *(PVOID *)(v32 + 152);
            v64 = &v49;
            v65 = 8i64;
            v48 = *(PVOID *)(v32 + 160);
            v66 = &v48;
            v67 = 8i64;
            v47 = *(PVOID *)(v32 + 184);
            v68 = &v47;
            v69 = 8i64;
            BaseHandle = *(PVOID *)(v32 + 192);
            p_BaseHandle = &BaseHandle;
            v71 = 8i64;
            v45 = *(PVOID *)(v32 + 168);
            v72 = &v45;
            v73 = 8i64;
            P = *(PVOID *)(v32 + 176);
            p_P = &P;
            v75 = 8i64;
            *(_QWORD *)&v53.Length = *(_QWORD *)(v32 + 2496);
            v76 = &v53;
            v77 = 8i64;
            tlgWriteTransfer_EtwWriteTransfer(
              (__int64)&dword_140C02E30,
              (unsigned __int8 *)byte_14002408B,
              0i64,
              0i64,
              0xBu,
              &v59);
          }
          TraceLoggingUnregister_EtwUnregister((INT64)&dword_140C02E30);
          result = PiPnpRtlInit(1ui64);
          if( result >= 0 )
          {
            result = PiCslInitialize(v34, v33, v35);
            if( result >= 0 )
            {
              CachedContextBaseKey = PiDmaGuardInitialize(1i64);
              if( CachedContextBaseKey >= 0 )
              {
                result = PiKsrInitialize();
                if( result < 0 )
                  return result;
                PnpRequestDeviceAction(
                  *((_DEVICE_OBJECT **)IopRootDeviceNode + 4),
                  ReenumerateRootDevices,
                  0,
                  0i64,
                  0i64,
                  0i64);
                KeInitializeEvent(&PnpShutdownEvent, NotificationEvent, 0);
                if( (*(_DWORD *)(*((_QWORD *)LoaderBlock + 30) + 132i64) & 0x400) == 0 )
                  PpInitializeBootDDB(LoaderBlock, 1ui64);
                return 0;
              }
              return CachedContextBaseKey;
            }
          }
        }
      }
    }
  }
  else
  {
    PnPInitialized = 0;
    PnpSystemHiveLimits = 80;
    dword_140C50A54 = 90;
    CmRegisterSystemHiveLimitCallback(LoaderBlock);
    PnpSystemHiveTooLarge = 0;
    ObjectAttributes.ObjectName = &CmRegistryMachineHardwareDescriptionSystemName;
    ObjectAttributes.Length = 48;
    LODWORD(CreateOptions) = 0;
    ObjectAttributes.RootDirectory = 0i64;
    ObjectAttributes.Attributes = 576;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    if( ZwCreateKey(&KeyHandle, 0xF003Fui64, &ObjectAttributes, 0i64, 0i64, CreateOptions, &Disposition) >= 0 )
    {
      if( IopGetRegistryValue(KeyHandle, (PWCHAR)L"OldSystemBiosDate", 0i64, (KEY_VALUE_FULL_INFORMATION **)&v45) >= 0 )
      {
        v3 = (unsigned int *)v45;
        if( v45 )
        {
          if( IopGetRegistryValue(KeyHandle, (PWCHAR)L"SystemBiosDate", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
          {
            v5 = (unsigned int *)P;
            if( P )
            {
              RtlInitUnicodeString(&DestinationString, (PCWSTR)((char *)v3 + v3[2]), v4);
              RtlInitUnicodeString(&InsertionString2, (PCWSTR)((char *)v5 + v5[2]), v6);
              LODWORD(Class) = 0;
              PnpLogEvent(&DestinationString, &InsertionString2, 1073741868i64, 0i64, (UINT64)Class);
              ExFreePoolWithTag(v5, 0);
            }
          }
          ExFreePoolWithTag(v3, 0);
        }
      }
      ZwClose(KeyHandle);
    }
    result = PnpDeviceCompletionQueueInitialize();
    if( result >= 0 )
    {
      PiInitFirmwareResources(LoaderBlock);
      if( (*(_DWORD *)(*((_QWORD *)LoaderBlock + 30) + 132i64) & 0x400) == 0 )
        PpInitializeBootDDB(LoaderBlock, 0i64);
      PipInitDeviceOverrideCache();
      KeInitializeEvent(&PnpSystemDeviceEnumerationComplete, NotificationEvent, 0);
      result = PiInitCacheGroupInformation();
      if( result >= 0 )
      {
        KeInitializeSemaphore(&PpRegistrySemaphore, 1i64, 1i64);
        result = PnpInitializeLegacyBusInformationTable();
        if( result >= 0 )
        {
          IopInitializeResourceMap(LoaderBlock);
          IopAllocateBootResourcesRoutine = (__int64)IopReportBootResources;
          IopInitReservedResourceList = 0i64;
          PnpDefaultInterfaceType = 1;
          ArbInitializeOsInaccessibleRange((unsigned int)dword_140C4DC20);
          CachedContextBaseKey = IopPortInitialize(v9, v8);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = IopMemInitialize(v11, v10);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = IopDmaInitialize(v14, v13);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = IopIrqInitialize(v16, v15);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = IopBusNumberInitialize(v18, v17);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PiPnpRtlInit(0i64);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          PipMigratePnpState();
          CachedContextBaseKey = PiDmInit();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(PiPnpRtlCtx, 4, (__int64 *)&BaseHandle);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          KeyName.Buffer = L"Control\\Pnp";
          *(_DWORD *)&KeyName.Length = 1572886;
          LODWORD(Class) = 0;
          if( IopCreateRegistryKeyEx(&Handle, BaseHandle, &KeyName, 0xF003Fui64, (UINT64)Class, 0i64) >= 0 )
          {
            if( IopGetRegistryValue(Handle, (PWCHAR)L"AsynchronousOptions", 0i64, (KEY_VALUE_FULL_INFORMATION **)&v47) >= 0 )
            {
              if( *((_DWORD *)v47 + 1) == 4 && *((_DWORD *)v47 + 3) == 4 )
                PnpAsyncOptions = *(_DWORD *)((char *)v47 + *((unsigned int *)v47 + 2));
              ExFreePoolWithTag(v47, 0);
            }
            if( IopGetRegistryValue(Handle, (PWCHAR)L"BootOptions", 0i64, (KEY_VALUE_FULL_INFORMATION **)&v48) >= 0 )
            {
              if( *((_DWORD *)v48 + 1) == 4 && *((_DWORD *)v48 + 3) == 4 )
                PnpBootOptions = *(_DWORD *)((char *)v48 + *((unsigned int *)v48 + 2));
              ExFreePoolWithTag(v48, 0);
            }
            if( IopGetRegistryValue(
                   Handle,
                   (PWCHAR)L"FindBestConfigurationTimeout",
                   0i64,
                   (KEY_VALUE_FULL_INFORMATION **)&v49) >= 0 )
            {
              if( *((_DWORD *)v49 + 1) == 4 && *((_DWORD *)v49 + 3) == 4 )
                PnpFindBestConfigurationTimeout = *(_DWORD *)((char *)v49 + *((unsigned int *)v49 + 2));
              ExFreePoolWithTag(v49, 0);
            }
            PiDmaGuardProcessRegistry(Handle);
            IopQueryDeviceResetRegistrySettings(Handle);
            ZwClose(Handle);
          }
          *(_DWORD *)&KeyName.Length = 4063292;
          KeyName.Buffer = L"\\Registry\\Machine\\System\\Setup";
          if( (int)IopOpenRegistryKeyEx(&Handle, 0i64, &KeyName, 0x20019ui64) >= 0 )
          {
            PipUpdateSetupInProgress(Handle);
            if( IopGetRegistryValue(Handle, (PWCHAR)L"Upgrade", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
            {
              if( *((_DWORD *)P + 1) == 4
                && *((_DWORD *)P + 3) == 4
                && *(_DWORD *)((char *)P + *((unsigned int *)P + 2)) )
              {
                PnpSetupUpgradeInProgress = 1;
              }
              ExFreePoolWithTag(P, 0);
            }
            if( IopGetRegistryValue(Handle, (PWCHAR)L"RollbackActive", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
            {
              if( *((_DWORD *)P + 1) == 4
                && *((_DWORD *)P + 3) == 4
                && *(_DWORD *)((char *)P + *((unsigned int *)P + 2)) )
              {
                PnpSetupRollbackActiveInProgress = 1;
              }
              ExFreePoolWithTag(P, 0);
            }
            if( PnpSetupInProgress || PnpSetupOOBEInProgress )
            {
              qword_140C454F0 = (__int64)PipUpdateSetupInProgressCallback;
              qword_140C454F8 = (__int64)Handle;
              *(_QWORD *)PnpSetupWorkItem = 0i64;
              PipUpdateSetupInProgressNotify(Handle);
            }
            else
            {
              ZwClose(Handle);
            }
            Handle = 0i64;
          }
          CachedContextBaseKey = PipHardwareConfigInit((PGUID)(*((_QWORD *)LoaderBlock + 30) + 2568i64));
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          PipCheckSystemFirmwareUpdated(SystemFirmwareUpdated);
          CachedContextBaseKey = PiDcInit(0i64);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PiAuCreateSecurityObjects();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PiDqInit();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PpDevCfgInit();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          PipResetDevices(v19);
          CachedContextBaseKey = CmCreateDevice(PiPnpRtlCtx, L"HTREE\\ROOT\\0", 983103, &v50, 0i64, 0);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          v20 = v50;
          CmSetDeviceRegProp(
            PiPnpRtlCtx,
            L"HTREE\\ROOT\\0",
            (__int64)v50,
            0x25u,
            1u,
            (__int64)L"{00000000-0000-0000-FFFF-FFFFFFFFFFFF}",
            0x4Eu,
            0);
          HIDWORD(Disposition) = 0;
          CmSetDeviceRegProp(PiPnpRtlCtx, L"HTREE\\ROOT\\0", (__int64)v20, 0xBu, 4u, (__int64)&Disposition + 4, 4u, 0);
          ZwClose(v20);
          qword_140C44A18 = (__int64)&IopPendingEjects;
          IopPendingEjects = (__int64)&IopPendingEjects;
          qword_140C44A28 = (__int64)&IopPendingSurpriseRemovals;
          IopPendingSurpriseRemovals = &IopPendingSurpriseRemovals;
          ExInitializeResourceLite(&IopDeviceTreeLock);
          ExInitializeResourceLite(&IopSurpriseRemoveListLock);
          ExInitializeResourceLite(&PnpDevicePropertyLock);
          ExInitializeResourceLite(&PiEngineLock);
          PnpSpinLock = 0i64;
          KeInitializeGuardedMutex(&PiResourceListLock);
          PnpRebuildPowerRelationsQueueLock.Count = 1;
          PnpRebuildPowerRelationsQueueLock.Event.Header.WaitListHead.Blink = &PnpRebuildPowerRelationsQueueLock.Event.Header.WaitListHead;
          PnpRebuildPowerRelationsQueueLock.Event.Header.WaitListHead.Flink = &PnpRebuildPowerRelationsQueueLock.Event.Header.WaitListHead;
          PnpRebuildPowerRelationsQueueLock.Owner = 0i64;
          PnpRebuildPowerRelationsQueueLock.Contention = 0;
          LOWORD(PnpRebuildPowerRelationsQueueLock.Event.Header.Lock) = 1;
          PnpRebuildPowerRelationsQueueLock.Event.Header.Size = 6;
          PnpRebuildPowerRelationsQueueLock.Event.Header.SignalState = 0;
          CachedContextBaseKey = PiDeviceDependencyInit();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          CachedContextBaseKey = PnpInitializeDeviceActions();
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          PpProfileInit();
          IopWarmEjectPdo = 0i64;
          KeInitializeEvent(&IopWarmEjectLock, SynchronizationEvent, 1u);
          *(_DWORD *)&KeyName.Length = 2490404;
          KeyName.Buffer = L"\\Driver\\PnpManager";
          CachedContextBaseKey = IoCreateDriver((PHANDLE)&KeyName, (ACCESS_MASK)PipPnPDriverEntry, v21, v22, Classa);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          LODWORD(Classb) = 0;
          CachedContextBaseKey = IoCreateDevice(PnpDriverObject, 0i64, 0i64, 4ui64, (UINT64)Classb, 0, &DeviceObject);
          if( CachedContextBaseKey < 0 )
            return CachedContextBaseKey;
          v23 = DeviceObject;
          v24 = DeviceObject;
          *((_DWORD *)DeviceObject + 12) |= 0x1000u;
          CachedContextBaseKey = PipAllocateDeviceNode((__int64)v24, &IopRootDeviceNode);
          if( !IopRootDeviceNode )
          {
            IoDeleteDevice(v23);
            IoDeleteDriver(PnpDriverObject);
LABEL_73:
            if( CachedContextBaseKey >= 0 )
            {
              CachedContextBaseKey = CmAddDeviceToContainer(
                                       PiPnpRtlCtx,
                                       L"{00000000-0000-0000-FFFF-FFFFFFFFFFFF}",
                                       L"{00000000-0000-0000-FFFF-FFFFFFFFFFFF}",
                                       L"HTREE\\ROOT\\0",
                                       0i64);
              if( CachedContextBaseKey >= 0 )
              {
                if( SystemFirmwareUpdated[0] )
                  PiDcHandleSystemFirmwareUpdate();
                PnpInitializePnpWatchdogs();
                CachedContextBaseKey = PnpInitializeDeviceEvents();
                if( CachedContextBaseKey >= 0 )
                {
                  PnpInitializeNotification();
                  CachedContextBaseKey = PnpBusTypeGuidInitialize();
                  if( CachedContextBaseKey >= 0 )
                  {
                    KeInitializeEvent(&PnpReplaceEvent, SynchronizationEvent, 1u);
                    CachedContextBaseKey = PiSwInit();
                    if( CachedContextBaseKey >= 0 )
                    {
                      CachedContextBaseKey = PiUEventInit(0i64);
                      if( CachedContextBaseKey >= 0 )
                      {
                        CachedContextBaseKey = PiDaInit(v28, v27, v29, v30);
                        if( CachedContextBaseKey >= 0 )
                        {
                          CachedContextBaseKey = PiDmaGuardInitialize(0i64);
                          if( CachedContextBaseKey >= 0 )
                          {
                            PipProcessPendingOperations();
                            PnpRequestDeviceAction(
                              *((_DEVICE_OBJECT **)IopRootDeviceNode + 4),
                              ReenumerateRootDevices,
                              0,
                              0i64,
                              0i64,
                              0i64);
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            return CachedContextBaseKey;
          }
          PipSetDevNodeFlags((__int64)IopRootDeviceNode, 305);
          PipSetDevNodeUserFlags((__int64)IopRootDeviceNode, 10);
          *((_DWORD *)IopRootDeviceNode + 165) = -2;
          CachedContextBaseKey = PnpAllocateDeviceInstancePath((__int64)IopRootDeviceNode, 0x1Au);
          if( CachedContextBaseKey >= 0 )
          {
            *(_DWORD *)&v53.Length = 1703960;
            v53.Buffer = (wchar_t *)L"HTREE\\ROOT\\0";
            PnpCopyDeviceInstancePath((__int64)IopRootDeviceNode, &v53, v25);
            CachedContextBaseKey = PnpMapDeviceObjectToDeviceInstance(
                                     *((DEVICE_OBJECT **)IopRootDeviceNode + 4),
                                     (UNICODE_STRING *)((char *)IopRootDeviceNode + 40));
            if( CachedContextBaseKey >= 0 )
            {
              *(_DWORD *)&GuidString.Length = 5111884;
              GuidString.Buffer = (wchar_t *)L"{00000000-0000-0000-FFFF-FFFFFFFFFFFF}";
              RtlGUIDFromString(&GuidString, (GUID *)((char *)IopRootDeviceNode + 664));
              PnpQueryAndSaveDeviceNodeCapabilities((__int64)IopRootDeviceNode);
              PipSetDevNodeState((_DEVICE_NODE *)IopRootDeviceNode, DeviceNodeStarted, v26);
              goto LABEL_73;
            }
          }
          return CachedContextBaseKey;
        }
      }
    }
  }
  return result;
}

Referenced by:

IoInitSystemPreDrivers