Difference between revisions of "User:Petr-akhlamov/Compatibility mode"

From ReactOS Wiki
Jump to: navigation, search
Line 89: Line 89:
**''VersionLie'' for '''WIN8''' and '''WIN8.1''' was implemented[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146][http://github.com/reactos/reactos/commit/2ffc6846996748c7d81bd569ba44ffd8bf858bc4]
**''VersionLie'' for '''WIN8''' and '''WIN8.1''' was implemented[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146][http://github.com/reactos/reactos/commit/2ffc6846996748c7d81bd569ba44ffd8bf858bc4]
**NT6+ systems was added to acppage[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146]
**NT6+ systems was added to acppage[http://github.com/reactos/reactos/commit/9b55e647fae5c899f22699a6f432ae44e2c11146]
*28-05-2020 [Github PR https://github.com/reactos/reactos/pull/2872] - Initial Kernel Shim Engine groundwork
==Compatibility apps==
==Compatibility apps==

Revision as of 22:06, 18 July 2020

Mark Jansen implements this function in ReactOS.

NT 6.0 API support

  • CORE-11288 - Currently ReactOS targets only Windows Server 2003 SP2. Developer plans to implement a mechanism for user mode applications to be able to use APIs from Windows NT 6.0 and later, while still keeping the original 2k3 environment.
    • CORE-11289 - Research and document Windows compatibility settings
    • CORE-11290 - Make sure the loader respects compatibility settings
    • CORE-11291 - Create Windows 7 spec files for core DLLs
    • CORE-11292 - Core win32 API organization
    • CORE-11293 - Research kernel requirements for NT 6+ user mode APIs

CORE-11292 - PR-397 Timo Kreuzer will implement export versioning support.

"The idea is to allow building sets of "wrapper DLLs", one for each OS version. They all forward their exports to a base version (like "roskernelbase.dll") except for those that need special handling. All this can be done without creating half a dozen of copies of the spec file." - Timo Kreuzer, PR-397

Compatibility mode implementation



NtApphelpCacheControl is a kernel function used by apphelp.dll to save 200 last run apps in RAM for faster search. After logging out, the list is saved in the registry, and loaded back when logging on.

Implementing apphelp sdb layer

Implements most Sdb* API's that is related to reading and writing of Sdb files.

Sdb files are application compatibility databases, containing information about known bad applications, and a list of 'shims' to be applied to those applications.

This is used as base: http://github.com/krofna/wine/tree/master/dlls/apphelp

Tab in shortcut properties

Tab in the explorer

In newer Windows versions, this is implemented as shell extension (acppage.dll). It uses SetPermLayerState and SdbGetPermLayerKeys functions.

Now it's implemented with a function which allows applying needed "layers".

Integrating apphelp

Apphelp is integrated in process creation (LDR), COM, MSI and driver loading.

  • CORE-10368
    • 03-06-2017 Integration of apphelp in process creation was started CORE-13284
      • June 27 first patch was published
      • June 29 SdbpMatchExe function was implemented
      • July 1 integration of apphelp to process creation was implemented

Shim infrastructure

It implements base infrastructure, so that shims can leverage to do their work.

Providing default shims

It provides:


ShimLib contains helper functions registering shims and handling common tasks.

First commit - r73461.

Shim data in links

Applies compatibility environment for shortcuts, but not *exe-file.

Versioning system for DLLs

This PR will Implemented a system that allowe to make DLL exports version specific at runtime, based on the applications compatibility setting. It still will allowe ReactOS DLLs to statically import functions from higher versions, even if they are hidden to the application.


Compatibility apps

Apps, which are known to work in compatibility mode:

  • VMware Horizon Client for 32-bit Windows[4][5]
  • Windows Media Player 6.4[6]
  • Windows Media Player 7[7]
  • Krita[8]
  • QuickTime Player 7.7.9[9]
  • Sound Forge Pro 11.0 build 299[10]


In ReactOS there are some libraries such as advapi32_vista, kernel32_vista, ntoskrnl_vista and ntdll_vista. You can think that they are for the implementation of Vista+ APIs in ReactOS, but it's a mistake. For now these are present to provide needed functions for linking Wine's dlls which ReactOS uses. [11]