mirror of
https://github.com/reactos/reactos.git
synced 2026-06-22 07:42:41 +08:00
And retrieve all its exported notification handlers. This reverts parts of commit5d4f69bf35. Because notification DLLs can keep internal state between successive notifications, they are kept loaded until Winlogon termination. The SFC notification DLL is also loaded. Because sfc.dll redirects to sfc_os.dll, the latter is then automatically loaded. This allows doing what commit88ee639b06(r68615) was aiming at, in a less hackish manner. CORE-9598 Test results: - Before: We observe the repeated loading/unloading of the DLL at each notification call: ``` WLNOTIFY(ac.b0): Entering `DllMain`(hInst: 0x10000000, dwReason: 0x1, pReserved: 0x00000000) ... WLNOTIFY(ac.b0): Entering `DllMain`(hInst: 0x10000000, dwReason: 0x0, pReserved: 0x00000000) ``` The global state of the notification DLL is lost between each notification, and such testing errors happen: ``` modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:786: Test failed: **** WLEventLogon: ERROR: Wrong state NON-INITIALIZED, expected Startup or Logoff err:(modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:1034) **** WLEventLogon: Changing state NON-INITIALIZED to Logon ``` The previous notification state is always reset to `NON-INITIALIZED` (its initial value). Test results for all the notifications: ``` WLEventStartup: 30 tests executed (0 marked as todo, 1 failure), 0 skipped. WLEventLogon: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. WLEventStartShell: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. (NOTE: WLEventPostShell isn't yet implemented in ReactOS) WLEventLock: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. WLEventUnlock: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. WLEventStartScreenSaver: 30 tests executed (0 marked as todo, 10 failures), 0 skipped. WLEventStopScreenSaver: 30 tests executed (0 marked as todo, 9 failures), 0 skipped. WLEventLogoff: 30 tests executed (0 marked as todo, 5 failures), 2 skipped. WLEventShutdown: 31 tests executed (0 marked as todo, 5 failures), 0 skipped. ``` - After: The DLL is loaded only once, at the first notification, then stays loaded for the whole life of winlogon.exe: ``` WLNOTIFY(ac.b0): Entering `DllMain`(hInst: 0x10000000, dwReason: 0x1, pReserved: 0x00000000) ``` and the global state of the notification DLL is now kept between each notification, there are no `ERROR: Wrong state NON-INITIALIZED, expected ...` errors anymore. Test results for all the notifications: ``` WLEventStartup: 30 tests executed (0 marked as todo, 1 failure), 0 skipped. WLEventLogon: 30 tests executed (0 marked as todo, 3 failures), 2 skipped. WLEventStartShell: 30 tests executed (0 marked as todo, 3 failures), 2 skipped. (NOTE: WLEventPostShell isn't yet implemented in ReactOS) WLEventLock: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. WLEventUnlock: 30 tests executed (0 marked as todo, 3 failures), 2 skipped. WLEventStartScreenSaver: 30 tests executed (0 marked as todo, 9 failures), 2 skipped. WLEventStopScreenSaver: 30 tests executed (0 marked as todo, 7 failures), 2 skipped. WLEventLogoff: 30 tests executed (0 marked as todo, 4 failures), 2 skipped. WLEventShutdown: 31 tests executed (0 marked as todo, 3 failures), 0 skipped. ```