ReactOS 0.4.16-dev-1537-g4e425b5
regtreeoptions.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: browseui
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: Common registry based settings editor
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 */
7
8#include "precomp.h"
9
10#define HKEY_GRAYED HKEY_REGTREEOPTION_GRAYED
11#define MAXVALUEDATA 100 // Max size for CheckedValue/UncheckedValue/DefaultValue
12
13enum {
25};
26
28
30{
31 BITMAPINFO bi;
32 PVOID pvBits;
33
34 ZeroMemory(&bi, sizeof(bi));
35 bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
36 bi.bmiHeader.biWidth = cx;
38 bi.bmiHeader.biPlanes = 1;
41 return CreateDIBSection(hDC, &bi, DIB_RGB_COLORS, &pvBits, NULL, 0);
42}
43
45{
46 enum { bpp = 32 };
48 HIMAGELIST hIL = ImageList_Create(ImageSize, ImageSize, ILC_MASK | bpp, 8, 0);
49 if (!hIL)
50 return hIL;
51
52 INT BorderSize = max(1, min(ImageSize / 16, 4));
53 RECT Rect;
55
56 HBITMAP hbmMask = CreateBitmap(ImageSize, ImageSize, 1, 1, NULL);
57 Failed |= hbmMask == NULL;
58
59 HBITMAP hbmData = CreatDibBitmap(hDC, ImageSize, ImageSize, bpp);
60 Failed |= hbmData == NULL;
61
62 const HGDIOBJ hbmOld = SelectObject(hDC, hbmMask);
63 Failed |= hbmOld == NULL;
64
65 // Create the check images
66 SetRect(&Rect, 0, 0, ImageSize, ImageSize);
68 InflateRect(&Rect, -BorderSize, -BorderSize);
70
71 SelectObject(hDC, hbmData);
74 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
76 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
78 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
80 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
81
82 // Create the radio images
83 SelectObject(hDC, hbmMask);
84 SetRect(&Rect, 0, 0, ImageSize, ImageSize);
86 InflateRect(&Rect, -BorderSize, -BorderSize);
88
89 SelectObject(hDC, hbmData);
92 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
94 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
96 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
98 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
99
100 SelectObject(hDC, hbmOld);
101 DeleteObject(hbmMask);
102 DeleteObject(hbmData);
103 DeleteDC(hDC);
104 if (Failed)
105 {
107 hIL = NULL;
108 }
109 return hIL;
110}
111
113{
114 switch (Type)
115 {
116 case REG_EXPAND_SZ: return REG_SZ;
117 case REG_DWORD: return REG_BINARY;
118 default: return Type;
119 }
120}
121
123{
124 DWORD Size = sizeof(*Data);
126}
127
129{
130 DWORD Data = Default, Size = sizeof(Data);
132 return Err ? Default : Data;
133}
134
136{
137 DWORD Size = cchBuffer * sizeof(*Buffer);
139 return Err ? HRESULT_FROM_WIN32(Err) : Size / sizeof(*Buffer);
140}
141
143{
144 WCHAR Path[MAX_PATH + 42];
145 if (GetRegString(hKey, Name, Path, _countof(Path)) > 0) // Will %expand% for us
146 {
148 HICON hIcon = NULL;
149 if (ExtractIconExW(Path, idx * -1, NULL, &hIcon, 1)) // Note: Index/Id is opposite of DefaultIcon style
150 {
153 if (idx != -1)
154 return idx;
155 }
156 }
157 return I_IMAGENONE;
158}
159
161{
162 DWORD Err = SHRegGetValueW(hKey, NULL, L"DefaultValue", SRRF_RT_ANY, &Type, Data, &Size);
163 return HRESULT_FROM_WIN32(Err);
164}
165
167{
168 HRESULT hr;
169 UINT SysParam = GetRegDWORD(hKey, Set ? L"SPIActionSet" : L"SPIActionGet", DWORD(0));
170 if (SysParam)
171 {
172 Size = sizeof(BOOL);
173 Type = REG_DWORD;
175 return S_OK;
176 }
177
178 // learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-iregtreeitem
179 WCHAR szTemp[42];
180 CLSID clsid;
181 if (SUCCEEDED(GetRegString(hKey, L"CLSID", szTemp, _countof(szTemp))) &&
183 {
184 IRegTreeItem *pRTI;
185 if (SUCCEEDED(hr = IUnknown_QueryService(m_pUnkSite, clsid, IID_PPV_ARG(IRegTreeItem, &pRTI))) ||
186 SUCCEEDED(hr = SHCoCreateInstance(NULL, &clsid, NULL, IID_PPV_ARG(IRegTreeItem, &pRTI))))
187 {
188 BOOL *boolptr = (BOOL*)Data;
189 Size = sizeof(BOOL);
191 hr = Set ? pRTI->SetCheckState(*boolptr) : pRTI->GetCheckState(boolptr);
192 pRTI->Release();
193 }
194 return hr;
195 }
196
197 DWORD Mask = ~DWORD(0), Offset = 0;
198 BOOL HasMask = GetRegDWORD(hKey, L"Mask", &Mask) == ERROR_SUCCESS;
199 BOOL HasOffset = GetRegDWORD(hKey, L"Offset", &Offset) == ERROR_SUCCESS;
200
202 WCHAR SubKey[MAX_PATH], Name[100];
203 hr = GetRegString(hKey, L"RegPath", SubKey, _countof(SubKey));
204 if (FAILED(hr))
205 return hr;
206 hr = GetRegString(hKey, L"ValueName", Name, _countof(Name));
207 if (FAILED(hr))
208 return hr;
209 DWORD Err, cb;
210 if (Set)
211 Err = RegCreateKeyExW(hValueKey, SubKey, 0, NULL, 0, KEY_READ | KEY_SET_VALUE, NULL, &hValueKey, NULL);
212 else
213 Err = RegOpenKeyExW(hValueKey, SubKey, 0, KEY_READ, &hValueKey);
214 if (Err)
215 return HRESULT_FROM_WIN32(Err);
216
217 if (Set && (HasMask || HasOffset))
218 {
219 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, NULL, NULL, &cb);
220 hr = HRESULT_FROM_WIN32(Err);
221 if (Err == ERROR_FILE_NOT_FOUND)
222 {
223 DWORD DefaultData = 0;
224 cb = sizeof(DefaultData);
225 hr = GetDefaultValue(hKey, Type, &DefaultData, cb);
226 if (SUCCEEDED(hr))
227 {
228 Err = SHSetValueW(hValueKey, NULL, Name, Type, &DefaultData, cb);
229 hr = HRESULT_FROM_WIN32(Err);
230 }
231 }
232
233 if (SUCCEEDED(hr))
234 {
235 Err = ERROR_OUTOFMEMORY;
236 cb = max(cb, (Offset + 1) * sizeof(DWORD));
237 if (PDWORD pBigData = (PDWORD)LocalAlloc(LPTR, cb)) // LPTR to zero extended data
238 {
239 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, pBigData, &cb);
240 Size = cb;
241 if (Err == ERROR_SUCCESS)
242 {
243 pBigData[Offset] &= ~Mask;
244 pBigData[Offset] |= *((PDWORD)Data);
245 Err = SHSetValueW(hValueKey, NULL, Name, Type, pBigData, cb);
246 }
247 LocalFree(pBigData);
248 }
249 hr = HRESULT_FROM_WIN32(Err);
250 }
251 }
252 else if (Set)
253 {
254 Err = SHSetValueW(hValueKey, NULL, Name, Type, Data, Size);
255 hr = HRESULT_FROM_WIN32(Err);
256 }
257 else
258 {
259 if (Offset && HasOffset)
260 {
261 Size = sizeof(DWORD);
262 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, NULL, NULL, &cb);
263 if (Err == ERROR_SUCCESS)
264 {
265 Err = ERROR_OUTOFMEMORY;
266 if (PDWORD pBigData = (PDWORD)LocalAlloc(LPTR, cb))
267 {
268 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, pBigData, &cb);
269 if (Offset < cb / sizeof(DWORD) && Err == ERROR_SUCCESS)
270 *((PDWORD)Data) = pBigData[Offset];
271 else
272 *((PDWORD)Data) = 0; // Value not present or offset too large
273 LocalFree(pBigData);
274 }
275 }
276 }
277 else
278 {
279 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, Data, &Size);
280 }
281
282 hr = HRESULT_FROM_WIN32(Err);
283 if (HasMask && SUCCEEDED(hr))
284 *((PDWORD)Data) &= Mask;
285 }
286 RegCloseKey(hValueKey);
287 return hr;
288}
289
291{
292 BYTE CurrData[MAXVALUEDATA], CheckData[MAXVALUEDATA];
293 DWORD CurrType, CheckType, CurrSize, CheckSize, Err, Checked;
294
295 if (hKey == HKEY_GRAYED)
297
298 CheckSize = sizeof(CheckData);
299 Err = SHRegGetValueW(hKey, NULL, L"CheckedValue", SRRF_RT_ANY, &CheckType, CheckData, &CheckSize);
300 if (Err)
301 return HRESULT_FROM_WIN32(Err);
302
303 HRESULT hr = E_FAIL;
304 if (!UseDefault)
305 {
306 CurrSize = sizeof(CurrData);
307 hr = GetSetState(hKey, CurrType, CurrData, CurrSize, FALSE);
308 }
309 if (FAILED(hr))
310 {
311 CurrSize = sizeof(CurrData);
312 hr = GetDefaultValue(hKey, CurrType, CurrData, CurrSize);
313 }
314 if (FAILED(hr))
315 {
316 return hr;
317 }
318
319 CurrType = NormalizeRegType(CurrType);
320 CheckType = NormalizeRegType(CheckType);
321 if (CurrType == (UINT)REG_GET_DIRECT)
322 {
323 Checked = *(BOOL*)CurrData;
324 }
325 else if (CurrType != CheckType)
326 {
328 }
329 else if (CheckType == REG_SZ)
330 {
331 *(LPWSTR)(&CheckData[sizeof(CheckData) - sizeof(WCHAR)]) = UNICODE_NULL;
332 if (CheckSize <= sizeof(CheckData) - sizeof(WCHAR))
333 *(LPWSTR)(&CheckData[CheckSize]) = UNICODE_NULL;
334 Checked = !lstrcmpiW((LPWSTR)CheckData, (LPWSTR)CurrData);
335 }
336 else if (CheckType == REG_BINARY)
337 {
338 Checked = CheckSize == CurrSize && !memcmp(CheckData, CurrData, CurrSize);
339 }
340 else
341 {
343 }
344 return Checked ? S_OK : S_FALSE;
345}
346
348{
350 DWORD Type = REG_DWORD, Size = sizeof(Data);
351 *((PDWORD)Data) = Checked;
352 LPCWSTR Name = Checked ? L"CheckedValue" : L"UncheckedValue";
354 if (Err == ERROR_FILE_NOT_FOUND)
355 Err = ERROR_SUCCESS;
356 return Err ? HRESULT_FROM_WIN32(Err) : GetSetState(hKey, Type, Data, Size, TRUE);
357}
358
360{
361 for (HTREEITEM hChildTI = TreeView_GetChild(hTree, hTI); hChildTI;)
362 {
363 WalkTree(Command, hTree, hChildTI);
364 hChildTI = TreeView_GetNextSibling(hTree, hChildTI);
365 }
366
367 TVITEM tvi;
369 tvi.hItem = hTI;
370 if (!TreeView_GetItem(hTree, &tvi))
371 return;
372
373 HKEY hKey = (HKEY)tvi.lParam;
374 UINT State = tvi.iImage;
376 {
377 case WALK_TREE_SAVE:
380 else if (State == STATE_CHECKOFF)
382 break;
383
385 if (hKey && hKey != HKEY_GRAYED)
386 {
388 tvi.lParam = 0;
389 tvi.mask = TVIF_PARAM;
390 TreeView_SetItem(hTree, &tvi);
391 }
392 break;
393
396 if (State < STATE_GROUP)
397 {
399 if (SUCCEEDED(hr))
400 {
401 tvi.iImage = tvi.iSelectedImage = (tvi.iImage & ~1) | (hr == S_OK);
402 TreeView_SetItem(hTree, &tvi);
403 }
404 }
405 break;
406 }
407}
408
410{
411 m_hTree = NULL;
412 m_hIL = NULL;
413}
414
416{
417 if (m_hIL && m_hTree)
419}
420
422{
423 for (DWORD Index = 0, cchName;;)
424 {
425 WCHAR Name[MAX_PATH], Temp[MAX_PATH];
428 break;
429
430 HKEY hItemKey, hCloseKey = NULL;
431 if (RegOpenKeyExW(hKey, Name, 0, KEY_READ, &hItemKey) != ERROR_SUCCESS)
432 continue;
433
434 TVINSERTSTRUCT tvis;
435 TVITEM &tvi = tvis.item;
437 tvi.lParam = (LPARAM)hItemKey;
439 if (GetRegString(hItemKey, L"Type", Temp, _countof(Temp)) > 0)
440 {
441 if (!lstrcmpi(Temp, L"checkbox"))
443 if (!lstrcmpi(Temp, L"radio"))
445 if (!lstrcmpi(Temp, L"group"))
447 }
448 BOOL Valid = Type != TYPE_INVALID;
449
450 if (Type == TYPE_GROUP)
451 {
452 tvi.lParam = 0;
453 hCloseKey = hItemKey;
454 tvi.iImage = AddIconFromRegistry(m_hIL, hItemKey, L"Bitmap");
455 }
456 else if (Valid)
457 {
458 HRESULT hr = GetCheckState(hItemKey);
459 Valid = SUCCEEDED(hr);
460 tvi.iImage = (Type * STATEIMAGESPERTYPE) | (hr == S_OK);
461 }
462
463 if (Valid)
464 {
465 if (SUCCEEDED(SHLoadRegUIStringW(hItemKey, L"Text", Temp, _countof(Temp))))
466 tvi.pszText = Temp;
467 else
468 tvi.pszText = Name;
469#ifdef __REACTOS__ // Grayed is a ROS extension
470 DWORD grayed = GetRegDWORD(hItemKey, L"Grayed", DWORD(FALSE));
471 if (grayed)
472 {
473 tvi.lParam = (LPARAM)HKEY_GRAYED;
474 hCloseKey = hItemKey;
475 tvi.iImage += 2; // Use disabled state image
476 if (grayed & 4)
477 tvi.iImage = (tvi.iImage & ~1) | ((grayed & 2) != 0); // Force a specific state
478 }
479#endif
480 tvi.iSelectedImage = tvi.iImage;
481 tvis.hParent = hParent;
482 tvis.hInsertAfter = hInsertAfter;
483 Valid = (tvi.hItem = TreeView_InsertItem(m_hTree, &tvis)) != NULL;
484 }
485
486 if (Valid && Type == TYPE_GROUP)
487 {
488 AddItemsFromRegistry(hItemKey, tvi.hItem, TVI_FIRST);
490 }
491 if (!Valid)
492 RegCloseKey(hItemKey);
493 if (hCloseKey && hItemKey != hCloseKey)
494 RegCloseKey(hCloseKey);
495 }
497}
498
500{
502 m_hTree = hTV;
503
506 if (hIL)
508
512 {
515 }
516
518 return E_NOTIMPL;
519}
520
522{
523 for (HTREEITEM hTI = TreeView_GetRoot(m_hTree); hTI;)
524 {
525 WalkTree(Command, m_hTree, hTI);
527 }
528 return S_OK;
529}
530
532{
533 TVITEM tvi;
535 tvi.hItem = hTI;
536 if (!tvi.hItem || !TreeView_GetItem(m_hTree, &tvi))
537 return E_INVALIDARG;
538
539 if (tvi.iImage >= STATE_GROUP || (HKEY)tvi.lParam == HKEY_GRAYED)
540 return S_FALSE;
541
542 if (tvi.iImage <= max(STATE_CHECKOFF, STATE_CHECKON))
543 {
544 tvi.iImage ^= 1;
545 }
546 else
547 {
549 while (hRadio) // Turn off everyone in this group
550 {
551 tvi.hItem = hRadio;
552 tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
553 if (TreeView_GetItem(m_hTree, &tvi) && tvi.iImage == STATE_RADIOON && hRadio != hTI)
554 {
555 tvi.iImage ^= 1;
556 tvi.iSelectedImage = tvi.iImage;
558 }
559 hRadio = TreeView_GetNextSibling(m_hTree, hRadio);
560 }
561 tvi.iImage = STATE_RADIOON;
562 }
563
564 tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
565 tvi.hItem = hTI;
566 tvi.iSelectedImage = tvi.iImage;
568 return S_OK;
569}
570
572{
573 return E_NOTIMPL;
574}
static HDC hDC
Definition: 3dtext.c:33
VOID CheckSize(ULONG_PTR Base, SIZE_T InSize, SIZE_T ExpectedSize)
PRTL_UNICODE_STRING_BUFFER Path
Type
Definition: Type.h:7
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
LPCWSTR GetRegString(CRegKey &Key, LPCWSTR Name, CStringW &Value)
Definition: misc.cpp:464
#define HandleToLong(h)
Definition: basetsd.h:80
#define LongToHandle(h)
Definition: basetsd.h:82
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
HANDLE HKEY
Definition: registry.h:26
#define RegCloseKey(hKey)
Definition: registry.h:49
Definition: bufpool.h:45
STDMETHOD() ShowHelp(HTREEITEM hTI, unsigned long Unknown) override
STDMETHOD() ToggleItem(HTREEITEM hTI) override
HRESULT GetSetState(HKEY hKey, DWORD &Type, LPBYTE Data, DWORD &Size, BOOL Set)
HIMAGELIST m_hIL
STDMETHOD() InitTree(HWND hTV, HKEY hKey, LPCSTR SubKey, char const *pUnknown) override
HRESULT SaveCheckState(HKEY hKey, BOOL Checked)
void AddItemsFromRegistry(HKEY hKey, HTREEITEM hParent, HTREEITEM hInsertAfter)
void WalkTree(WALK_TREE_CMD Command, HWND hTree, HTREEITEM hTI)
HRESULT GetCheckState(HKEY hKey, BOOL UseDefault=FALSE)
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
DWORD bpp
Definition: surface.c:185
unsigned int idx
Definition: utils.c:41
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
INT WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
Definition: imagelist.c:458
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:941
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:814
#define MAX_PATH
Definition: compat.h:34
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
static DWORD cchBuffer
Definition: fusion.c:85
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4265
int WINAPI PathParseIconLocationW(WCHAR *path)
Definition: path.c:2644
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppv)
Definition: shellole.c:197
HRESULT WINAPI SHLoadRegUIStringW(HKEY hkey, LPCWSTR value, LPWSTR buf, DWORD size)
Definition: ordinal.c:4396
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2673
#define BI_RGB
Definition: precomp.h:56
#define L(x)
Definition: resources.c:13
switch(r->id)
Definition: btrfs.c:3046
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned int Mask
Definition: fpcontrol.c:82
FxAutoRegKey hKey
pKey DeleteObject()
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
@ Unknown
Definition: i8042prt.h:114
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:855
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define REG_SZ
Definition: layer.c:22
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static HICON
Definition: imagelist.c:80
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
#define min(a, b)
Definition: monoChain.cc:55
HICON hIcon
Definition: msconfig.c:44
const CLSID * clsid
Definition: msctf.cpp:50
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define REG_BINARY
Definition: nt_native.h:1496
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
#define DWORD
Definition: nt_native.h:44
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define KEY_SET_VALUE
Definition: nt_native.h:1017
#define UNICODE_NULL
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
static BOOL Set
Definition: pageheap.c:10
DWORD * PDWORD
Definition: pedump.c:68
#define TVITEM
Definition: commctrl.h:3370
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define TVIF_TEXT
Definition: commctrl.h:3271
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3425
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3471
#define TVINSERTSTRUCT
Definition: commctrl.h:3407
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TVSIL_NORMAL
Definition: commctrl.h:3448
#define TreeView_EnsureVisible(hwnd, hitem)
Definition: commctrl.h:3550
_Out_opt_ int * cx
Definition: commctrl.h:585
#define TVI_FIRST
Definition: commctrl.h:3374
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3474
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3495
#define TVE_EXPAND
Definition: commctrl.h:3428
#define TVI_ROOT
Definition: commctrl.h:3373
#define TVM_SORTCHILDREN
Definition: commctrl.h:3546
#define TreeView_GetRoot(hwnd)
Definition: commctrl.h:3480
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3472
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define ILC_MASK
Definition: commctrl.h:351
#define TVIF_PARAM
Definition: commctrl.h:3273
#define TreeView_SetImageList(hwnd, himl, iImage)
Definition: commctrl.h:3452
#define TreeView_InsertItem(hwnd, lpis)
Definition: commctrl.h:3417
#define I_IMAGENONE
Definition: commctrl.h:2391
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3502
static int AddIconFromRegistry(HIMAGELIST hIL, HKEY hKey, LPCWSTR Name)
static HRESULT GetRegString(HKEY hKey, LPCWSTR Name, LPWSTR Buffer, DWORD cchBuffer)
@ TYPE_RADIO
@ TYPE_CHECK
@ STATEIMAGESPERTYPE
@ STATE_CHECKON
@ STATE_RADIOON
@ STATE_CHECKOFF
@ STATE_RADIOOFF
@ REG_GET_DIRECT
@ STATE_GROUP
@ TYPE_GROUP
@ TYPE_INVALID
#define HKEY_GRAYED
static HIMAGELIST CreateStateImages(UINT ImageSize)
C_ASSERT((STATE_CHECKON &1) &&(STATE_RADIOON &1) &&STATE_RADIOON< STATE_GROUP)
#define MAXVALUEDATA
static DWORD GetRegDWORD(HKEY hKey, LPCWSTR Name, PDWORD Data)
static DWORD NormalizeRegType(DWORD Type)
static HRESULT GetDefaultValue(HKEY hKey, DWORD &Type, LPVOID Data, DWORD &Size)
static HBITMAP CreatDibBitmap(HDC hDC, UINT cx, UINT cy, UINT bpp)
#define REG_DWORD
Definition: sdbapi.c:596
@ Failed
Definition: arc.h:79
HRESULT hr
Definition: shlfolder.c:183
@ WALK_TREE_REFRESH
Definition: shlobj_undoc.h:498
@ WALK_TREE_DESTROY
Definition: shlobj_undoc.h:496
@ WALK_TREE_DEFAULT
Definition: shlobj_undoc.h:497
@ WALK_TREE_SAVE
Definition: shlobj_undoc.h:495
enum tagWALK_TREE_CMD WALK_TREE_CMD
LSTATUS WINAPI SHRegGetValueW(_In_ HKEY hkey, _In_opt_ LPCWSTR pszSubKey, _In_opt_ LPCWSTR pszValue, _In_ SRRF srrfFlags, _Out_opt_ LPDWORD pdwType, _Out_writes_bytes_to_opt_(*pcbData, *pcbData) LPVOID pvData, _Inout_opt_ LPDWORD pcbData)
#define SRRF_RT_REG_SZ
Definition: shlwapi.h:251
#define SRRF_RT_ANY
Definition: shlwapi.h:260
#define SRRF_RT_DWORD
Definition: shlwapi.h:258
EXTERN_C BOOL WINAPI SHBoolSystemParametersInfo(UINT uiAction, PVOID pvParam)
#define _countof(array)
Definition: sndvol32.h:70
Definition: shell.h:41
int iSelectedImage
Definition: treeview.c:148
USHORT biBitCount
Definition: precomp.h:46
ULONG biCompression
Definition: precomp.h:47
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1922
#define max(a, b)
Definition: svc.c:63
static HWND hTree
Definition: systempage.cpp:52
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define ZeroMemory
Definition: winbase.h:1753
#define LPTR
Definition: winbase.h:414
#define lstrcmpi
Definition: winbase.h:3914
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2808
LONG_PTR LPARAM
Definition: windef.h:208
#define S_FALSE
Definition: winerror.h:3452
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:211
#define ERROR_BAD_FORMAT
Definition: winerror.h:237
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HGDIOBJ WINAPI GetStockObject(_In_ int)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define WHITE_BRUSH
Definition: wingdi.h:902
#define BLACK_BRUSH
Definition: wingdi.h:896
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_CURRENT_USER
Definition: winreg.h:11
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DFCS_FLAT
Definition: winuser.h:510
#define DFCS_BUTTONCHECK
Definition: winuser.h:496
#define DFCS_INACTIVE
Definition: winuser.h:502
#define DFC_BUTTON
Definition: winuser.h:476
#define DFCS_MONO
Definition: winuser.h:511
#define SM_CXSMICON
Definition: winuser.h:1023
#define DFCS_BUTTONRADIOMASK
Definition: winuser.h:498
#define SendMessage
Definition: winuser.h:5954
#define DFCS_BUTTONRADIOIMAGE
Definition: winuser.h:497
#define DFCS_CHECKED
Definition: winuser.h:504
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2405
#define IID_PPV_ARG(Itype, ppType)
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193