mirror of
https://github.com/reactos/reactos
synced 2025-10-06 00:12:51 +02:00
CORE-19104 This fixes failure to create or open the `PowerProfileRegistrySemaphore`, when it has been first created by a Process1 using powrprof from a "User1", and while this process stays running, the semaphore is attempted to be re-created (or opened) by another Process2 using powrprof from a different "User2". For example, this happens when "User1" is either the LocalSystem account with the Process1 being Winlogon.exe (via the msgina.dll -> powrprof.dll dependency), or, "Administrator" with the explorer.exe process when opening the "Shutdown" dialog (via the shell32.dll -> runtime-loading of msgina.dll -> powrprof.dll dependency), AND, "User2" being a non-administrator user and Process2 being explorer.exe, again when opening the "Shutdown" dialog. In this situation, msgina.dll fails to be loaded, because powrprof.dll fails in its `DllMain()` routine -- see log excerpt below --, and the shell falls back to a minimal shutdown confirmation dialog. ``` err:(dll\win32\powrprof\powrprof.c:1420) Couldn't create Semaphore: 5 (dll\ntdll\ldr\ldrinit.c:879) LDR: DLL_PROCESS_ATTACH for dll "powrprof.dll" (InitRoutine: 7ADC6DB0) failed (dll\win32\kernel32\client\loader.c:386) LoadLibraryExW(msgina.dll) failing with status c0000142 err:(dll\win32\powrprof\powrprof.c:1420) Couldn't create Semaphore: 5 (dll\ntdll\ldr\ldrinit.c:879) LDR: DLL_PROCESS_ATTACH for dll "powrprof.dll" (InitRoutine: 7ADC6DB0) failed (dll\win32\kernel32\client\loader.c:386) LoadLibraryExW(msgina.dll) failing with status c0000142 (dll\ntdll\ldr\ldrutils.c:2340) Image explorer.exe has no exports, but were trying to get procedure (null). BaseAddress asked 0x00400000, got entry BA 0x00400000 err:(win32ss\user\user32\windows\messagebox.c:1048) MessageBox: L"Do you want to shutdown?" ```