Yesterday we released Wine Staging 1.7.54. The release contains fixes for the widl compiler, the handling of APCs and various additional improvements for other parts of wine.
In this releases we added multiple improvements and bug fixes for the wine IDL (widl) compiler. The widl compiler reads files in the Microsoft Interface Definition Language (MIDL) and converts them into different output formats. One possible output format are typelibs. Those files contain a binary definition of the interfaces described in the input file and are often used by scripting languages in order to communicate with COM objects. So far the widl compiler contained various bugs and the typelibs shipped with Wine were not completely correct, causing scripts to fail. Some of those problems have been fixed.
One concept of the windows API which might be even unknown to some programmers, are Asynchronous Procedure Calls (APCs). They provide a way to pause a thread, execute a function and resume the execution. Those APCs can either be initiated from some other thread/process (user APCs) or from the windows kernel. Although Wine does not have a kernel, the idea of kernel APCs is still used, for example if you try to allocate memory in a different process. The POSIX API does not provide such a feature, so Wine needs a way to execute the memory allocation in the target process. To accomplish this, Wine can use two different ways to notify a thread about a kernel APC. This lead to a race condition in which one kernel APC could be interrupted by a different kernel APC. Although this does not lead to a crash, processing them in a wrong order can cause deadlocks. This problem has been fixed in Wine Staging 1.7.54.
Besides various patches accepted upstream, here is a list of all new feature and fixes added since the last release:
- Add stub for SetCoalescableTimer (OneDrive for Business, Wine Bug #39509)
- Add stub for SetConsoleKeyShortcuts (FarManager v3, Wine Bug #35702)
- Add stub for SfcGetNextProtectedFile (FreshDiagnose, Wine Bug #38097)
- Do not allow interruption of system APC in server_select (OllyDbg 2, Wine Bug #14697)
- Fix multiple issues in widl typelib generation
- IEnumSTATSTG::Next should zero out returned stats when enumeration ends
- Implement FileNamesInformation class support for NtQueryDirectoryFile
- Implement SystemHandleInformation info class (ProtectDISC 6)
- Implement hal.KeQueryPerformanceCounter (Secret Files: Tunguska, Wine Bug #39500)
- Implement kernel32.GetConsoleFontSize
- Implement stub for ProcessQuotaLimits info class (MSYS2, Wine Staging Bug #570)
- Improve INetFwAuthorizedApplication::get_ProcessImageFileName stub (VoipBuster)
All the changes (including removed/upstream accepted patches) are listed in our changelog.