- Jan 31, 2023
-
-
Aaron Hill authored
Currently, apartment OXIDs are generated using the process ID (and the thread ID for a single threaded-apartment). This means that if an apartment is destroyed and re-created (using `CoUninitialize` followed by `CoInitializeEx`), the newly created apartment will end up with the same OXID as the old apartment. However, testing shows that Windows will generate a *new* OXID when an apartment is created in the above manner. This patch uses `rpcss` to generate a new OXID. The current process id is combined with an incrementing counter stored in rpcss. This ensures that re-creating an apartment will not re-use an OXID. Additionally, this fixes an issue that caused the .NET 4.8 installer to become stuck during the downloading stage under Wine. The installer appears to perform the following actions: 1. Call `IBackgroundCopyJob_SetNotify` interface on a BITS job. This causes us to create a proxy (in the other process hosting 'qmgr') for the `IBackgroundCopyCallback` pointer passed as a parameter. 2. Trigger MTA apartment re-creation (in the process running the setup, *not* the process with the `IBackgroundCopyCallback` proxy) through `CoUninitialize` followed by `CoInitializeEx`. 3. Call `IBackgroundCopyJob_SetNotify` on a newly created job, but with the same `IBackgroundCopyCallback` pointer parameter. When we deserialize the pointer passed to `IBackgroundCopyJob_SetNotify`, we will end up re-using the same `proxy_manager` that we created for the previous `IBackgroundCopyCallback`. This is due to the fact that the OIDs happen to match (due to the fact that the .NET 4.8 setup appears to perform actions in the same order between the old and new apartments), and the apartment OXIDs match as explained above. above. As a result, we will use the old IPID when we send RPC packets using this `proxy_manager`. However, the new and old IPIDs will *never* match, since their generation process includes `RtlGenRandom`. This will cause a fault packet to be generated on the listening side of the RPC connection. By avoiding re-using OXIDs across re-created apartments, we ensure that the proxy side will never incorrectly re-use a stale `proxy_manager`.
-
Aaron Hill authored
Wine currently re-uses the original OXID when an apartment is re-created, so this is marked with `todo_wine` for now.
-
- Jan 30, 2023
-
-
-
-
-
-
-
Instead of passing them from the stack. The async operation is executed in a thread pool, which might Release its reference asynchronously and call a stale function pointer if it is sequenced after the stack invalidation.
-
This informs the compiler that no code following an assertion failure will execute (unless NDEBUG is defined), which increases the accuracy of compiler warnings and static analyses. For assert.h, put DECLSPEC_NORETURN before the return type in the function declaration to remain consistent with other MSVCRT function declarations.
-
This informs the compiler that no code following a RtlRaiseStatus() call will execute, which increases the accuracy of compiler warnings and static analyses.
-
-
-
It shows the same behavior as the one marked by commit 2d19baa6. Wine-Bug: https://bugs.winehq.org//show_bug.cgi?id=51313
-
-
Make sure we pull in the definition of X11DRV_XRandR_Init(), in particular because it has DECLSPEC_HIDDEN.
-
-
-
-
-
-
-
-
-
According to the GCC documentation,[1] __attribute__((malloc)) may not be used on functions that return memory that contains one or more valid pointers. [1] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
-
Alexandre Julliard authored
-
Alexandre Julliard authored
-
PATH_MAX is used in FreeBSD-specific code in get_argv0_dir which otherwise fails.
-
- Jan 27, 2023
-
-
-
-
-
-
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
Signed-off-by:
Nikolay Sivov <nsivov@codeweavers.com>
-
-