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

From ReactOS Wiki
Jump to: navigation, search
(Grammar fixes. Thanks for this precious article!)
(Compatibility apps)
(6 intermediate revisions by 3 users not shown)
Line 7: Line 7:
 
**{{JIRA|11292}} - Core win32 API organization
 
**{{JIRA|11292}} - Core win32 API organization
 
**{{JIRA|11293}} - Research kernel requirements for NT 6+ user mode APIs
 
**{{JIRA|11293}} - Research kernel requirements for NT 6+ user mode APIs
 +
 +
----
 +
 +
{{JIRA|11292}} - [http://github.com/reactos/reactos/pull/397 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==
 
==Compatibility mode implementation==
 
{{JIRA|10366}}
 
{{JIRA|10366}}
Line 31: Line 38:
  
 
===Integrating apphelp===
 
===Integrating apphelp===
Apphelp is integrated in <s>process creation (LDR)</s>, COM, msi and driver loading.
+
Apphelp is integrated in <s>process creation (LDR)</s>, COM, MSI and driver loading.
 
*{{JIRA|10368}}
 
*{{JIRA|10368}}
 
**03-06-2017 Integration of apphelp in process creation was started <s>{{JIRA|13284}}</s>
 
**03-06-2017 Integration of apphelp in process creation was started <s>{{JIRA|13284}}</s>
Line 45: Line 52:
 
*{{JIRA|10369}}
 
*{{JIRA|10369}}
 
It provides:
 
It provides:
*List of "emulated" OS APIs. (<del>{{JIRA|11299}}</del>)
+
*List of "emulated" OS APIs (''VersionLie'') (<del>{{JIRA|11299}}</del>)
 
*Resolution/Bitdepth/DisableThemes shims (<del>{{JIRA|11927}}</del>)
 
*Resolution/Bitdepth/DisableThemes shims (<del>{{JIRA|11927}}</del>)
 
*IgnoreChromeSandbox {{JIRA|13409}}
 
*IgnoreChromeSandbox {{JIRA|13409}}
Line 57: Line 64:
  
 
===Shim data in links===
 
===Shim data in links===
Applies compatibility environment for shortcuts, and not *exe-file.
+
Applies compatibility environment for shortcuts, but not *exe-file.
 
*{{JIRA|12678}}
 
*{{JIRA|12678}}
  
Line 66: Line 73:
 
*16-12-2016 [http://github.com/reactos/reactos/commit/71d5b09683e6f97b36aa9fe4ae8c32345205770b Settings] for '''Resolution'''/'''Bitdepth'''/'''DisableThemes''' was added [http://github.com/reactos/reactos/commit/b7add401e93e88e15f10a0f3108ae93e35a26e72 1] [http://github.com/reactos/reactos/commit/f3f43843fe5a102367bd581b90f28323bf271ff3 2] (<del>{{JIRA|11927}}</del>)
 
*16-12-2016 [http://github.com/reactos/reactos/commit/71d5b09683e6f97b36aa9fe4ae8c32345205770b Settings] for '''Resolution'''/'''Bitdepth'''/'''DisableThemes''' was added [http://github.com/reactos/reactos/commit/b7add401e93e88e15f10a0f3108ae93e35a26e72 1] [http://github.com/reactos/reactos/commit/f3f43843fe5a102367bd581b90f28323bf271ff3 2] (<del>{{JIRA|11927}}</del>)
 
*22-04-2017 - [http://github.com/reactos/reactos/commit/20756892b7414163fd56df7de1d70dbf42ff5257 Implemented] custom compatibility mode selection as shell extension in '''acppage'''
 
*22-04-2017 - [http://github.com/reactos/reactos/commit/20756892b7414163fd56df7de1d70dbf42ff5257 Implemented] custom compatibility mode selection as shell extension in '''acppage'''
*19-05-2017 Initial implementation of integrate apphelp to process creation (LDR), COM, msi and Driver loading [http://github.com/reactos/reactos/commit/bbe72b0163cfee85b8cdd63f64b31fc459ccb26e was added] ({{JIRA|10368}})
+
*19-05-2017 Initial implementation of integration of apphelp to process creation (LDR), COM, MSI and driver loading [http://github.com/reactos/reactos/commit/bbe72b0163cfee85b8cdd63f64b31fc459ccb26e was added] ({{JIRA|10368}})
 
*29-06-2017 '''SdbpMatchExe''' function [http://github.com/reactos/reactos/commit/af9601337012b0e6338dec15bdad7bede9e6ef53 was implemented], that allows matching applications/files based on properties ({{JIRA|13284}})
 
*29-06-2017 '''SdbpMatchExe''' function [http://github.com/reactos/reactos/commit/af9601337012b0e6338dec15bdad7bede9e6ef53 was implemented], that allows matching applications/files based on properties ({{JIRA|13284}})
 
*01-07-2017:
 
*01-07-2017:
Line 73: Line 80:
 
**[http://jira.reactos.org/browse/CORE-13284 Apphelp] [http://github.com/reactos/reactos/commit/711a1cb3414768c59419bb0454a1265403f7a5a6 was integrated] to create a process  
 
**[http://jira.reactos.org/browse/CORE-13284 Apphelp] [http://github.com/reactos/reactos/commit/711a1cb3414768c59419bb0454a1265403f7a5a6 was integrated] to create a process  
 
*30-07-2017 ShimLib implementation was finished
 
*30-07-2017 ShimLib implementation was finished
*17-08-2017 Compatibility mode [http://github.com/reactos/reactos/commit/9d8fe6f2381db5c877cc9d1858fae209bb77eb97 was enabled] default (but, it won't be able to be applied to system files - in '''system32''' and '''WinSxS''' folders)
+
*17-08-2017 Compatibility mode [http://github.com/reactos/reactos/commit/9d8fe6f2381db5c877cc9d1858fae209bb77eb97 was enabled] by default (but, it won't be able to be applied to system files - in '''system32''' and '''WinSxS''' folders)
 
*10-01-2018 [http://github.com/reactos/reactos/commit/63a3a2cbb8d67c1afe8b283880e75e0e5b5bed01 Beginnings] of support for [http://github.com/reactos/reactos/pull/273 NT6 applications] was implemented (details in [http://www.reactos.org/archives/public/ros-general/2018-January/002984.html mailing list]) (Colin Finck)
 
*10-01-2018 [http://github.com/reactos/reactos/commit/63a3a2cbb8d67c1afe8b283880e75e0e5b5bed01 Beginnings] of support for [http://github.com/reactos/reactos/pull/273 NT6 applications] was implemented (details in [http://www.reactos.org/archives/public/ros-general/2018-January/002984.html mailing list]) (Colin Finck)
 +
*24-02-2018:
 +
**''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]
  
 
==Compatibility apps==
 
==Compatibility apps==
Line 83: Line 93:
 
*Krita 3.2.1.0[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129165]
 
*Krita 3.2.1.0[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129165]
 
*QuickTime Player 7.7.9[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129166]
 
*QuickTime Player 7.7.9[http://reactos.org/forum/viewtopic.php?f=2&t=10972&start=1125#p129166]
 +
*Sound Forge Pro 11.0 build 299[http://www.reactos.org/forum/viewtopic.php?f=2&t=10972&start=1140#p131866]
  
 
==*_vista-libraries==
 
==*_vista-libraries==
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+ APIa in ReactOS, but it's a mistake. For now these are present to provide needed functions for linking Wine's dlls which ReactOS uses. [http://reactos.org/forum/viewtopic.php?f=2&t=16678]
+
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. [http://reactos.org/forum/viewtopic.php?f=2&t=16678]
  
 
==Links==
 
==Links==

Revision as of 07:36, 14 July 2018

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

CORE-10366

NtApphelpCacheControl

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

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.

Status

  • 05-09-2015 NtApphelpCacheControl function was implemented in the kernel (CORE-9914)
  • 31-03-2016 apphelp.dll library was added (CORE-10367)
  • 28-05-2016 List of "emulated" API versions was added (CORE-11299)
  • 16-12-2016 Settings for Resolution/Bitdepth/DisableThemes was added 1 2 (CORE-11927)
  • 22-04-2017 - Implemented custom compatibility mode selection as shell extension in acppage
  • 19-05-2017 Initial implementation of integration of apphelp to process creation (LDR), COM, MSI and driver loading was added (CORE-10368)
  • 29-06-2017 SdbpMatchExe function was implemented, that allows matching applications/files based on properties (CORE-13284)
  • 01-07-2017:
  • 30-07-2017 ShimLib implementation was finished
  • 17-08-2017 Compatibility mode was enabled by default (but, it won't be able to be applied to system files - in system32 and WinSxS folders)
  • 10-01-2018 Beginnings of support for NT6 applications was implemented (details in mailing list) (Colin Finck)
  • 24-02-2018:
    • VersionLie for WIN8 and WIN8.1 was implemented[1][2]
    • NT6+ systems was added to acppage[3]

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 3.2.1.0[8]
  • QuickTime Player 7.7.9[9]
  • Sound Forge Pro 11.0 build 299[10]

*_vista-libraries

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]

Links