PipInitializeEarlyLaunchDrivers

VOID __stdcall PipInitializeEarlyLaunchDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  UINT64 v1; 
  const WCHAR *v2; 
  UNICODE_STRING *v3; 
  UNICODE_STRING *v4; 
  UNICODE_STRING *v6; 
  __int64 v7; 
  VOID *v8; 
  int DriverNameFromKeyNode; 
  INT64 v10; 
  INT64 v11; 
  PVOID P[2]; 
  HANDLE Handle; 
  INT64 v14; 
  v14 = 0i64;
  v3 = (UNICODE_STRING *)((char *)LoaderBlock + 64);
  Handle = 0i64;
  v4 = (UNICODE_STRING *)*((_QWORD *)LoaderBlock + 8);
  *(_OWORD *)P = 0i64;
  while( v4 != v3 )
  {
    v6 = v4;
    v4 = *(UNICODE_STRING **)&v4->Length;
    if( SLODWORD(v6[3].Buffer) >= 0 )
    {
      v7 = *(_QWORD *)&v6[3].Length;
      if( v7 )
      {
        v8 = *(VOID **)(v7 + 48);
        if( v8 )
          SeRegisterElamCertResources(v8, v1, 0, v2);
      }
      P[1] = 0i64;
      Handle = 0i64;
      DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, v6 + 2, 0x20019ui64);
      if( DriverNameFromKeyNode >= 0 )
      {
        DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, (UNICODE_STRING *)P);
        if( DriverNameFromKeyNode >= 0 )
        {
          LODWORD(v10) = 0;
          DriverNameFromKeyNode = PnpInitializeBootStartDriver(
                                    (UNICODE_STRING *)P,
                                    v6 + 2,
                                    *(_QWORD *)(*(_QWORD *)&v6[3].Length + 56i64),
                                    *(_QWORD *)&v6[3].Length,
                                    (LIST_ENTRY *)LoaderBlock + 1,
                                    0,
                                    v10,
                                    v11,
                                    &v14);
        }
      }
      if( Handle )
        ZwClose(Handle);
      if( P[1] )
        ExFreePoolWithTag(P[1], 0);
      if( DriverNameFromKeyNode < 0 )
        *(_DWORD *)(*(_QWORD *)&v6[3].Length + 104i64) |= 0x20000u;
    }
  }
}

Referenced by:

IopInitializeBootDrivers