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

From ReactOS Wiki
Jump to: navigation, search
(Status)
(Compatibility apps)
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Mark Jassen implements this function in ReactOS.
+
Mark Jansen implements this function in ReactOS.
 
==NT 6.0 API support==
 
==NT 6.0 API support==
*{{JIRA|11288}} - Currently ReactOS targets only Windows 2003. 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.
+
*{{JIRA|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.
 
**{{JIRA|11289}} - Research and document Windows compatibility settings
 
**{{JIRA|11289}} - Research and document Windows compatibility settings
 
**{{JIRA|11290}} - Make sure the loader respects compatibility settings
 
**{{JIRA|11290}} - Make sure the loader respects compatibility settings
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}}
 
===NtApphelpCacheControl===
 
===NtApphelpCacheControl===
'''NtApphelpCacheControl''' kernel function used by AppHelp for save 200 last runed apps in RAM for more fastly search. After exit the list is saved tin the registry, and loaded back at running.
+
'''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.
 
*<del>{{JIRA|9914}}</del>
 
*<del>{{JIRA|9914}}</del>
  
===Implement apphelp sdb layer===
+
===Implementing apphelp sdb layer===
Implement most Sdb* api's, related to reading and writing of Sdb files.
+
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.
 
Sdb files are application compatibility databases, containing information about known bad applications, and a list of 'shims' to be applied to those applications.
  
As base used is http://github.com/krofna/wine/tree/master/dlls/apphelp
+
This is used as base:
 +
http://github.com/krofna/wine/tree/master/dlls/apphelp
 
*<del>{{JIRA|10367}}</del>
 
*<del>{{JIRA|10367}}</del>
  
Line 24: Line 32:
  
 
===Tab in the explorer===
 
===Tab in the explorer===
In newer windows versions this is implemented as shell extension (acppage.dll). This uses the functions SetPermLayerState, SdbGetPermLayerKeys.
+
In newer Windows versions, this is implemented as shell extension (acppage.dll). It uses SetPermLayerState and SdbGetPermLayerKeys functions.
  
Now it's implemented with function which allows apply needed "layers".
+
Now it's implemented with a function which allows applying needed "layers".
 
*<del>{{JIRA|10375}}</del>
 
*<del>{{JIRA|10375}}</del>
  
===Integrate apphelp===
+
===Integrating apphelp===
Integrate apphelp 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 Integrate 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>
 
***June 27 first patch was published
 
***June 27 first patch was published
***June 29 function SdbpMatchExe was implemented
+
***June 29 SdbpMatchExe function was implemented
***July 1 integration apphelp to process creation was implemented
+
***July 1 integration of apphelp to process creation was implemented
  
 
===Shim infrastructure===
 
===Shim infrastructure===
It implement base infrastructure that shims can leverage to do their work.
+
It implements base infrastructure, so that shims can leverage to do their work.
 
*{{JIRA|10370}}
 
*{{JIRA|10370}}
  
===Provide default shims===
+
===Providing default shims===
 
*{{JIRA|10369}}
 
*{{JIRA|10369}}
It provide:
+
It provides:
*List of "emulated" OS API. (<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 51: Line 59:
 
===ShimLib===
 
===ShimLib===
 
*<s>{{JIRA|11329}}</s>
 
*<s>{{JIRA|11329}}</s>
It do helper functions to register shims, and to handle common tasks.
+
ShimLib contains helper functions registering shims and handling common tasks.
  
 
First commit - [http://github.com/reactos/reactos/commit/3da415c457d68745c20dc32c6be37bfe8d83bfb1 r73461].
 
First commit - [http://github.com/reactos/reactos/commit/3da415c457d68745c20dc32c6be37bfe8d83bfb1 r73461].
  
 
===Shim data in links===
 
===Shim data in links===
Apply compatibility environment for lnk, and not *exe-file.
+
Applies compatibility environment for shortcuts, but not *exe-file.
 
*{{JIRA|12678}}
 
*{{JIRA|12678}}
  
 
==Status==
 
==Status==
*05-09-2015 component '''NtApphelpCacheControl''' [http://github.com/reactos/reactos/commit/2565dcba2634cdf76559f7e85fcf91596a1ba1cc was implemented] in the kernel (<del>{{JIRA|9914}}</del>)
+
*05-09-2015 '''NtApphelpCacheControl''' function [http://github.com/reactos/reactos/commit/2565dcba2634cdf76559f7e85fcf91596a1ba1cc was implemented] in the kernel (<del>{{JIRA|9914}}</del>)
*31-03-2016 library '''apphelp.dll''' [http://github.com/reactos/reactos/commit/3a5f8b5d7eee1d38d1484a8033a6614399e6db08http://code.reactos.org/changelog/reactos?cs=71084 was added] (<del>{{JIRA|10367}}</del>)
+
*31-03-2016 '''apphelp.dll''' library [http://github.com/reactos/reactos/commit/3a5f8b5d7eee1d38d1484a8033a6614399e6db08http://code.reactos.org/changelog/reactos?cs=71084 was added] (<del>{{JIRA|10367}}</del>)
 
*28-05-2016 List of "emulated" API versions [http://github.com/reactos/reactos/commit/cc1a5a5932b1f599459948cdecd0214d010933ce was added] (<del>{{JIRA|11299}}</del>)
 
*28-05-2016 List of "emulated" API versions [http://github.com/reactos/reactos/commit/cc1a5a5932b1f599459948cdecd0214d010933ce was added] (<del>{{JIRA|11299}}</del>)
*16-12-2016 [http://github.com/reactos/reactos/commit/71d5b09683e6f97b36aa9fe4ae8c32345205770b settings] for '''Resolution'''/'''Bitdepth'''/'''DisableThemes''' [http://github.com/reactos/reactos/commit/b7add401e93e88e15f10a0f3108ae93e35a26e72 was] [http://github.com/reactos/reactos/commit/f3f43843fe5a102367bd581b90f28323bf271ff3 added] (<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 implement] custom compatibility mode selection as shell extension '''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], allowing to match 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:
**tab for explorer was [http://github.com/reactos/reactos/commit/1fa3c1a922e132061dda703b00cca986d8695271 fully implemented]
+
**Tab for explorer was [http://github.com/reactos/reactos/commit/1fa3c1a922e132061dda703b00cca986d8695271 fully implemented]
**most of the required functions are implemented, the rest will be implemented when they are needed
+
**Most of the required functions are implemented, the rest will be implemented when they are needed
**[http://jira.reactos.org/browse/CORE-13284 apphelp] [http://github.com/reactos/reactos/commit/711a1cb3414768c59419bb0454a1265403f7a5a6 was integrated] to creating 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, he can't will be applied to system files - in '''system32''' and '''WinSxS''')
+
*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 Forced] [http://github.com/reactos/reactos/pull/273 launch] of NT6 applications was implemented (info in [http://www.reactos.org/archives/public/ros-general/2018-January/002984.html mailing list])
+
*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==
Apps, which works in compatibility mode:
+
Apps, which are known to work in compatibility mode:
 
*VMware Horizon Client for 32-bit Windows[http://github.com/reactos/reactos/commit/1eee5db1a53b0ff65a7bbe938d5be82f0aa7c845][http://vk.com/wall-1086956_45871]
 
*VMware Horizon Client for 32-bit Windows[http://github.com/reactos/reactos/commit/1eee5db1a53b0ff65a7bbe938d5be82f0aa7c845][http://vk.com/wall-1086956_45871]
 
*Windows Media Player 6.4[http://vk.com/wall-1086956_50195]
 
*Windows Media Player 6.4[http://vk.com/wall-1086956_50195]
 +
*Windows Media Player 7[http://vk.com/wall-1086956_50259]
 +
*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]
 +
*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 sources are libraries advapi32_vista, kernel32_vista, ntoskrnl_vista and ntdll_vista. You can think, what they are for implementation Vista+ API in ReactOS, but it's mistake. Right now these are there to provide needed functions for linking Wine's dlls which project use. [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==
 
*Discussion on the forum: [http://reactos.org/forum/viewtopic.php?f=2&t=14589], [http://reactos.org/forum/viewtopic.php?f=2&t=16621]
 
*Discussion on the forum: [http://reactos.org/forum/viewtopic.php?f=2&t=14589], [http://reactos.org/forum/viewtopic.php?f=2&t=16621]
 
*[http://www.reactos.org/pipermail/ros-dev/2015-March/017216.html ReactOS versioning on mailing list]
 
*[http://www.reactos.org/pipermail/ros-dev/2015-March/017216.html ReactOS versioning on mailing list]
*[http://technet.microsoft.com/en-us/library/bb457032.aspx About compatibility mode on the Microsoft site]
+
*[http://technet.microsoft.com/en-us/library/bb457032.aspx Information about compatibility mode on the Microsoft site]
*[[User:Learn more/Appcompat|About compatibility mode by developer]]
+
*[[User:Learn more/Appcompat|Information about compatibility mode by developer]]

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