PipInitializeCoreDriversByGroup

void __fastcall PipInitializeCoreDriversByGroup(int a1, __int64 a2){
  int v2; 
  __int64 v4; 
  UNICODE_STRING **v5; 
  UNICODE_STRING *v6; 
  UNICODE_STRING *v7; 
  int DriverNameFromKeyNode; 
  INT64 v9; 
  UNICODE_STRING *v10; 
  UINT64 *v11; 
  HANDLE v12; 
  INT64 v13; 
  PVOID P[2]; 
  HANDLE Handle; 
  INT64 v16; 
  v16 = 0i64;
  v2 = 0;
  Handle = 0i64;
  *(_OWORD *)P = 0i64;
  if( a1 )
  {
    if( a1 == 1 )
    {
      v4 = 96i64;
      v2 = 1;
    }
    else
    {
      if( a1 != 2 )
        return;
      v4 = 112i64;
    }
  }
  else
  {
    v4 = 80i64;
  }
  v5 = (UNICODE_STRING **)(v4 + a2);
  if( v4 + a2 )
  {
    v6 = *v5;
    PnpCoreDriverGroupLoadPhase = a1;
    while( v6 != (UNICODE_STRING *)v5 )
    {
      v7 = v6;
      v6 = *(UNICODE_STRING **)&v6->Length;
      if( SLODWORD(v7[3].Buffer) >= 0 )
      {
        P[1] = 0i64;
        Handle = 0i64;
        DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, v7 + 2, 0x20019ui64);
        if( DriverNameFromKeyNode >= 0 )
        {
          DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, (UNICODE_STRING *)P);
          if( DriverNameFromKeyNode >= 0 )
          {
            LODWORD(v12) = v2;
            DriverNameFromKeyNode = PnpInitializeBootStartDriver(
                                      (UNICODE_STRING *)P,
                                      v7 + 2,
                                      *(_QWORD *)(*(_QWORD *)&v7[3].Length + 56i64),
                                      *(_QWORD *)&v7[3].Length,
                                      (LIST_ENTRY *)(a2 + 16),
                                      0,
                                      (INT64)v12,
                                      v13,
                                      &v16);
            if( DriverNameFromKeyNode >= 0 )
            {
              v9 = v16;
              if( v16 )
              {
                PnpLockDeviceActionQueue();
                PipApplyFunctionToServiceInstances(v10, (PVOID)(*(_QWORD *)(v9 + 48) + 24i64));
                PnpUnlockDeviceActionQueue();
                PnpWaitForEmptyDeviceActionQueue(v11);
                HIDWORD(v12) = 0;
                PnpRequestDeviceAction(0i64, ReenumerateBootDevices, 0, 0i64, 0i64, 0i64);
                if( (int)PnpWaitForEmptyDeviceEventQueue() < 0 && HeadlessGlobals && HeadlessGlobals[1] )
                  HdlspKernelAddLogEntry(0x12ui64, 0i64);
              }
            }
          }
        }
        if( Handle )
          ZwClose(Handle);
        if( P[1] )
          ExFreePoolWithTag(P[1], 0);
        if( DriverNameFromKeyNode < 0 )
          *(_DWORD *)(*(_QWORD *)&v7[3].Length + 104i64) |= 0x20000u;
      }
    }
  }
}

Referenced by:

IopInitializeBootDrivers