Compatibilidade

Documentação da versão v0.1.0-beta.3Ver código-fonte no GitHub

Tradução da página original em inglês do OmsiLaunch 0.1.0-beta3. A página em inglês é a referência normativa: em caso de divergência, prevalecem a página em inglês e o código.

O OmsiLaunch controla o OMSI aplicando patches em endereços perfilados dentro de uma build de executável exata. Esta página indica que builds do OMSI são suportadas, o que acontece com qualquer outra build e quais são os requisitos de sistema operativo e de runtime do host e do plugin. Fontes: src/OmsiLaunch.Builds.Omsi23004/Profile.cs, src/OmsiLaunch.Core/SessionPlanner.cs, src/OmsiLaunch.Process/RuntimePlatform.cs, src/OmsiLaunch.Plugin/CurrentDnneAdapter.cs e os ficheiros de projeto.

Builds do OMSI suportadas#

Existe exatamente um perfil de build, Omsi23004_692EBFBF (família OMSI_2_3_004_COMMON). Aceita dois executáveis pelo SHA-256 exato:

VarianteSHA-256 de Omsi.exeTamanhoVersão do ficheiro PE / produtoEstado
Executável perfilado (ALTERNATE_LAA)692EBFBF2CD32FAB05A8B934E52C2BE14594E939882F3DBF2BA4E2B66CCC62438 503 440 bytes2.2.032 / 2.3.004STABLE_BETA; todas as validações em runtime da matriz foram executadas sobre este ficheiro
Steam LAA (STEAM_LAA)7DAB063D1F62E73B3A2C7A6AC1921D7EDF5E5DB0FBC731481D117EEC8DE7D759não verificadoAceite por lista de permissões porque partilha a disposição nativa perfilada e difere apenas nos cabeçalhos do executável; não validado em runtime (profiles reporta runtime_validated=false, validation_status=pending_beta_field_validation). PARTIAL.

OmsiLaunch.exe profiles imprime esta tabela em JSON. Os números de versão não são usados para a aceitação: apenas contam o SHA-256 (e, para o executável principal, o tamanho exato). Nenhuma outra build do OMSI 2, nenhum executável com patches e nenhuma cópia com o patch de 4 GB e um hash diferente é suportada.

O que acontece com uma build desconhecida#

FaseVerificaçãoResultado
Planeamento (PlanSessionAsync, /plan, /validate)Omsi23004.Profile.MatchesExecutable(<root>\Omsi.exe)A capacidade obrigatória omsi.profile.OMSI23004 é UNAVAILABLE; diagnóstico OL_E_UNSUPPORTED_BUILD; SessionPlan.IsRunnable=false. Saída 1 da CLI para um lançamento, ou 3 (UnsupportedProfile) quando o erro escapa como exceção.
Início (StartSessionAsync)A especificação é novamente planeada e é recalculado o hash de Omsi.exeUm plano que já não é executável (por exemplo, o executável mudou após o planeamento, ou um chamador alterou IsRunnable) é rejeitado com OL_E_PLAN_NOT_RUNNABLE; nenhuma transação é aberta, nenhum processo é iniciado.
No processo (PluginRuntime.Start)NativeServices.ValidateBuild exige que o BuildProfileId do handoff seja Omsi23004_692EBFBF e que NativeValidateBuild() tenha êxito sobre a imagem em execuçãoTelemetria plugin.build.invalid; o host faz falhar a sessão com OL_E_BUILD_VALIDATION_FAILED; nenhum hook nativo é ativado; o OMSI é terminado e a transação é restaurada.

Como o hash do executável é comparado com os tamanhos e bytes das variáveis globais perfiladas, a verificação no processo é a última linha de defesa contra uma cópia que passou a verificação do hash mas cuja imagem difere no momento do carregamento. Não existe perfil de recurso nem correspondência heurística.

Sistema operativo e arquitetura#

CurrentWindowsX64Platform.Detect calcula RuntimePlatformInfo. A plataforma atual só é suportada quando todas as condições seguintes se verificam:

RequisitoVerificaçãoErro quando não é cumprido
WindowsOperatingSystem.IsWindows()OL_E_UNSUPPORTED_OPERATING_SYSTEM
Windows 10 ou posteriorEnvironment.OSVersion.Version.Major >= 10 (Windows 10, Windows 11, Server 2016+)OL_E_PLATFORM_CAPABILITY_MISSING
Windows de 64 bits e um processo host de 64 bitsOSArchitecture == X64 e ProcessArchitecture == X64OL_E_UNSUPPORTED_OS_ARCHITECTURE
Instalação com permissão de escritaO diretório raiz existe, não é só de leitura e contém plugins\OL_E_INSTALLATION_NOT_WRITABLE

RuntimePlatformInfo também reporta OmsiArchitecture e PluginArchitecture como X86 (o OMSI é um processo de 32 bits; o conjunto fechado do plugin é x86 e é executado sob WOW64), LegacyPlatform=false e Wow64Available. O Windows ARM64 não é suportado, mesmo onde existe emulação x64, porque o próprio processo host tem de ser x64.

Requisitos do .NET#

ComponenteRuntimeNotas
Controlador (OmsiLaunch.exe, OmsiLaunchW.exe -> OmsiLaunch.Controller.dll).NET 6, x64O bootstrapper nativo localiza o runtime através de hostfxr, por meio do nethost.dll incluído no pacote. Um runtime em falta é reportado pelo shim (códigos de saída 100-106; ver CLI e códigos de saída).
Conjunto fechado do plugin (plugins\OmsiLaunch.Plugin.dll através de OmsiLaunch.PluginNE.dll).NET 6, x86 (net6.0-windows, win-x86), alojado pelo DNNE 2.0.6 dentro de Omsi.exeRequer que o runtime x86 do .NET 6 Desktop/Core esteja instalado na máquina; o runtime de 64 bits por si só não é suficiente para o plugin.
Ponte nativa (plugins\OmsiLaunch.Native.x86.dll)x86 nativoCarregada apenas a partir de plugins\ (ver plugin permanente).

Plataformas legadas#

O Windows 7, o Windows 8.x, o Windows XP e outros sistemas NT 6 e anteriores estão fora do limite de suporte atual. RuntimePlatformInfo.LegacyPlatform é sempre false e não existe nenhum adaptador legado; o campo e o ponto de extensão IPluginNativeServices existem apenas para que um futuro adaptador legado possa ser acrescentado sem alterar a API pública (ver docs/adr/ADR-0010-Legacy-Portability-Boundary.md). Nada nesta versão é executado nesses sistemas.

Notas sobre Steam e Large Address Aware#

  • A distribuição Steam do OMSI 2.3.004 com o cabeçalho LAA (7DAB063D...) consta da lista de permissões porque os seus endereços perfilados são idênticos aos do executável principal. Até que uma sessão de validação no terreno seja registada na matriz, deve tratar-se cada capacidade sobre esse ficheiro como PARTIAL.
  • O Steam lança o próprio OMSI; uma sessão tem de ser iniciada através de OmsiLaunch.exe para que o handoff exista. Quando o OMSI é iniciado a partir do Steam, o plugin permanente permanece inerte (sem handoff, sem hooks).
  • Aplicar um patcher LAA diferente a Omsi.exe altera o seu hash e torna-o uma build desconhecida.