PipInitializeEarlyLaunchDrivers

VOID __stdcall PipInitializeEarlyLaunchDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  UINT8 v1; 
  const WCHAR *v2; 
  _LIST_ENTRY *p_EarlyLaunchListHead; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v6; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *v8; 
  NTSTATUS DriverNameFromKeyNode; 
  int v10; 
  _UNICODE_STRING DriverName; 
  VOID *Handle; 
  INT64 v13; 

  v13 = 0i64;
  p_EarlyLaunchListHead = &LoaderBlock->EarlyLaunchListHead;
  Handle = 0i64;
  Flink = LoaderBlock->EarlyLaunchListHead.Flink;
  DriverName = 0i64;
  while( Flink != p_EarlyLaunchListHead )
  {
    v6 = Flink;
    Flink = Flink->Flink;
    if( SLODWORD(v6[3].Blink) >= 0 )
    {
      v7 = v6[3].Flink;
      if( v7 )
      {
        v8 = v7[3].Flink;
        if( v8 )
          SeRegisterElamCertResources(v8, v1, 0i64, v2);
      }
      DriverName.Buffer = 0i64;
      Handle = 0i64;
      DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, (_UNICODE_STRING *)&v6[2], 0x20019ui64);
      if( DriverNameFromKeyNode >= 0 )
      {
        DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, &DriverName);
        if( DriverNameFromKeyNode >= 0 )
          DriverNameFromKeyNode = PnpInitializeBootStartDriver(
                                    &DriverName,
                                    (INT64)&v6[2],
                                    (INT64)v6[3].Flink[3].Blink,
                                    (INT64)v6[3].Flink,
                                    &LoaderBlock->LoadOrderListHead,
                                    0,
                                    0,
                                    v10,
                                    (INT64)&v13);
      }
      if( Handle )
        ZwClose((_HANDLE)Handle);
      if( DriverName.Buffer )
        ExFreePoolWithTag(DriverName.Buffer, 0);
      if( DriverNameFromKeyNode < 0 )
        LODWORD(v6[3].Flink[6].Blink) |= 0x20000u;
    }
  }
}

Referenced by:

IopInitializeBootDrivers