Implement SystemLoadGdiDriverInSystemSpaceInformation case of NtSetSystemInformation() function.
According to https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/gdi_driver.htm, it does the similar thing to SystemLoadGdiDriverInformation (these two cases even have the same shared SYSTEM_GDI_DRIVER_INFORMATION structure).
The only difference is, SystemLoadGdiDriverInSystemSpaceInformation uses the global system space (without passing an additional flag to MmLoadSystemImage()), while SystemLoadGdiDriverInformation uses the session space instead.
Since the session space is not supported yet, for now simply redirect SystemLoadGdiDriverInSystemSpaceInformation to SystemLoadGdiDriverInformation case, which we have already implemented. However, this code needs to be updated appropriately (an additional flag should be passed to MmLoadSystemImage() call for SystemGdiDriverInformation as well) once a support for session space is implemented.
This fixes VM starting failure for VirtualBox 3.1.0 - 4.0.24 and 4.3.0 - 4.3.12 versions. Newer versions of VirtualBox still don't work because of another blocking bugs.
CORE-20257
Related to #8145. We shouldn't use
user32 functions in
DllMain.DLL_PROCESS_ATTACH.
This bug affects Global Hook. See
DllMain and "Dynamic-Link Library
Best Practices" on MS Learn.
JIRA issue: CORE-20242
Don't use user32!FindWindow in
DllMain.DLL_PROCESS_ATTACH,
but in KbSwitchSetHooks function.
It's frustrating when windows open
during a test and remain after the test
is over.
JIRA issue: ROSTESTS-402
- Delete closewnd.cpp. Enhance
closewnd.h.
- Modify ShellExecCmdLine,
ShellExec_RunDLL, ShellExecuteEx,
and ShellExecuteW testcases.
- Certainly close the newly-opened
windows.
A bit clearer code. A bit faster execution.
- NtUserGetTitleBarInfo(): Add/Use early returns.
Addendum to
3b4c9ded42 (r33657).
- NtUserTrackPopupMenuEx():
Check flags a bit earlier.
Addendum to
3c35117f97
(0.4.16-dev-1275).
- NtUserThunkedMenuItemInfo():
Sort out code and comments
- menu.c: Move UserLeave() a bit earlier.
- MSGINA: The `pMprNotifyInfo` and `pProfile` structures returned by
`WlxLoggedOutSAS()`, as well as all of their pointer fields, are
allocated by `LocalAlloc()`[^1][^2]. This is what Windows' Winlogon
expects (and ours too, for interoperability with GINA dlls written
for Windows), as it then frees them using `LocalFree()`.
- WINLOGON: In `HandleLogon()`, free the cached `MprNotifyInfo` and
`Profile` buffers (and all their members) obtained from a previous
call to `WlxLoggedOutSAS()`.
[^1]: https://learn.microsoft.com/en-us/windows/win32/api/winwlx/nf-winwlx-wlxloggedoutsas
[^2]: 3rd-party GINAs rely on this as well. One example can be found at:
https://www.codeproject.com/Articles/20656/Winlogon-using-Mobile-Disk
CORE-12686
Test the following compilation scenarii:
- using the `pathcch_static` library (function implementations
statically linked into the test);
- using the `pathcch_kernelbase` library (linking directly to
kernelbase.dll);
- using the `pathcch` MS PSDK-compatible library (linking to
the api-ms-win-core-path-l1-1-0.dll APISET dll).
CORE-12686
This collection of libraries consist in:
- a down-level `pathcch_static` PathCch library, to be used for programs
that need to run on Windows 7 and below;
- Windows 8+ compatible libraries importing from either kernelbase.dll
(`pathcch_kernelbase`), or from the corresponding APISET
api-ms-win-core-path-l1-1-0.dll (`pathcch`, which is Win8+ PSDK
compatible).
The down-level static library is compiled by reusing the newly-introduced
kernelbase's path.c, instead of using a specific pathcch.c.
Unrelated functions are excluded from compilation by putting them into
`#ifndef STATIC_PATHCCH ..... #endif` blocks.
Since VS 17.14.36203.30 / MSVC 19.44.35209.0 the default behavior on ARM64 is to not inline _Interlocked* functions. Until we have those implemented, we disable this feature, going back to the old behavior.
For additional details / tracking of the implementation see CORE-20255