Compatibilidade
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:
| Variante | SHA-256 de Omsi.exe | Tamanho | Versão do ficheiro PE / produto | Estado |
|---|---|---|---|---|
Executável perfilado (ALTERNATE_LAA) | 692EBFBF2CD32FAB05A8B934E52C2BE14594E939882F3DBF2BA4E2B66CCC6243 | 8 503 440 bytes | 2.2.032 / 2.3.004 | STABLE_BETA; todas as validações em runtime da matriz foram executadas sobre este ficheiro |
Steam LAA (STEAM_LAA) | 7DAB063D1F62E73B3A2C7A6AC1921D7EDF5E5DB0FBC731481D117EEC8DE7D759 | não verificado | Aceite 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#
| Fase | Verificação | Resultado |
|---|---|---|
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.exe | Um 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ção | Telemetria 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:
| Requisito | Verificação | Erro quando não é cumprido |
|---|---|---|
| Windows | OperatingSystem.IsWindows() | OL_E_UNSUPPORTED_OPERATING_SYSTEM |
| Windows 10 ou posterior | Environment.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 bits | OSArchitecture == X64 e ProcessArchitecture == X64 | OL_E_UNSUPPORTED_OS_ARCHITECTURE |
| Instalação com permissão de escrita | O 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#
| Componente | Runtime | Notas |
|---|---|---|
Controlador (OmsiLaunch.exe, OmsiLaunchW.exe -> OmsiLaunch.Controller.dll) | .NET 6, x64 | O 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.exe | Requer 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 nativo | Carregada 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 comoPARTIAL. - O Steam lança o próprio OMSI; uma sessão tem de ser iniciada através de
OmsiLaunch.exepara 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.exealtera o seu hash e torna-o uma build desconhecida.