mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-26 19:33:31 +00:00
- Validate the opened `WinSta0_DesktopSwitch` handle; - Don't pass the `ahEvents` array containing a NULL pointer to `MsgWaitForMultipleObjects()`, but provide the correct number of non-NULL handles, otherwise the function fails and the code ends up busy-looping. - Validate the `MsgWaitForMultipleObjects()` result: bail out if `WAIT_FAILED` is returned. - Validate the event index passed to `CRegWatcher::InitEvent()` and `CRegWatcher::OnEvent()`. - Rename `WATCHENTRY_MAX` to `WI_REGEVTS_MAX` and add it in the `WATCH_INDEX` enumeration. - Fix some code comments.
44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
/*
|
|
* PROJECT: ReactOS CTF Monitor
|
|
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
|
* PURPOSE: Registry watcher
|
|
* COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <[email protected]>
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
struct WATCHENTRY
|
|
{
|
|
HKEY hRootKey;
|
|
LPCTSTR pszSubKey;
|
|
HKEY hKey;
|
|
};
|
|
|
|
struct CRegWatcher
|
|
{
|
|
static HANDLE s_ahWatchEvents[WI_REGEVTS_MAX];
|
|
static WATCHENTRY s_WatchEntries[WI_REGEVTS_MAX];
|
|
static UINT s_nSysColorTimerId, s_nKbdToggleTimerId, s_nRegImxTimerId;
|
|
|
|
static BOOL Init();
|
|
static VOID Uninit();
|
|
static BOOL InitEvent(_In_ SIZE_T iEvent, _In_ BOOL bResetEvent);
|
|
static VOID UpdateSpTip();
|
|
static VOID KillInternat();
|
|
static VOID StartSysColorChangeTimer();
|
|
static VOID OnEvent(_In_ SIZE_T iEvent);
|
|
|
|
protected:
|
|
static BOOL CALLBACK
|
|
EnumWndProc(_In_ HWND hWnd, _In_ LPARAM lParam);
|
|
|
|
static VOID CALLBACK
|
|
SysColorTimerProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ UINT_PTR idEvent, _In_ DWORD dwTime);
|
|
|
|
static VOID CALLBACK
|
|
KbdToggleTimerProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ UINT_PTR idEvent, _In_ DWORD dwTime);
|
|
|
|
static VOID CALLBACK
|
|
RegImxTimerProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ UINT_PTR idEvent, _In_ DWORD dwTime);
|
|
};
|