ReactOS 0.4.16-dev-1273-g5b94656
regtreeoptions.cpp File Reference
#include "precomp.h"
Include dependency graph for regtreeoptions.cpp:

Go to the source code of this file.

Macros

#define HKEY_GRAYED   HKEY_REGTREEOPTION_GRAYED
 
#define MAXVALUEDATA   100
 

Enumerations

enum  {
  TYPE_CHECK = 0 , TYPE_RADIO , TYPE_GROUP , TYPE_INVALID ,
  STATEIMAGESPERTYPE = 4 , STATE_CHECKOFF = TYPE_CHECK * STATEIMAGESPERTYPE , STATE_CHECKON , STATE_RADIOOFF = TYPE_RADIO * STATEIMAGESPERTYPE ,
  STATE_RADIOON , STATE_GROUP = TYPE_GROUP * STATEIMAGESPERTYPE
}
 

Functions

 C_ASSERT ((STATE_CHECKON &1) &&(STATE_RADIOON &1) &&STATE_RADIOON< STATE_GROUP)
 
static HBITMAP CreatDibBitmap (HDC hDC, UINT cx, UINT cy, UINT bpp)
 
static HIMAGELIST CreateStateImages (UINT ImageSize)
 
static DWORD NormalizeRegType (DWORD Type)
 
static DWORD GetRegDWORD (HKEY hKey, LPCWSTR Name, PDWORD Data)
 
static DWORD GetRegDWORD (HKEY hKey, LPCWSTR Name, DWORD Default)
 
static HRESULT GetRegString (HKEY hKey, LPCWSTR Name, LPWSTR Buffer, DWORD cchBuffer)
 
static int AddIconFromRegistry (HIMAGELIST hIL, HKEY hKey, LPCWSTR Name)
 
static HRESULT GetDefaultValue (HKEY hKey, DWORD &Type, LPVOID Data, DWORD &Size)
 
static HRESULT GetSetState (HKEY hKey, DWORD &Type, LPBYTE Data, DWORD &Size, BOOL Set)
 
static HRESULT GetCheckState (HKEY hKey, BOOL UseDefault=FALSE)
 
static HRESULT SaveCheckState (HKEY hKey, BOOL Checked)
 
static void WalkTree (WALK_TREE_CMD Command, HWND hTree, HTREEITEM hTI)
 

Macro Definition Documentation

◆ HKEY_GRAYED

#define HKEY_GRAYED   HKEY_REGTREEOPTION_GRAYED

Definition at line 10 of file regtreeoptions.cpp.

◆ MAXVALUEDATA

#define MAXVALUEDATA   100

Definition at line 11 of file regtreeoptions.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
TYPE_CHECK 
TYPE_RADIO 
TYPE_GROUP 
TYPE_INVALID 
STATEIMAGESPERTYPE 
STATE_CHECKOFF 
STATE_CHECKON 
STATE_RADIOOFF 
STATE_RADIOON 
STATE_GROUP 

Definition at line 13 of file regtreeoptions.cpp.

Function Documentation

◆ AddIconFromRegistry()

static int AddIconFromRegistry ( HIMAGELIST  hIL,
HKEY  hKey,
LPCWSTR  Name 
)
static

Definition at line 141 of file regtreeoptions.cpp.

142{
143 WCHAR Path[MAX_PATH + 42];
144 if (GetRegString(hKey, Name, Path, _countof(Path)) > 0) // Will %expand% for us
145 {
147 HICON hIcon = NULL;
148 if (ExtractIconExW(Path, idx * -1, NULL, &hIcon, 1)) // Note: Index/Id is opposite of DefaultIcon style
149 {
152 if (idx != -1)
153 return idx;
154 }
155 }
156 return I_IMAGENONE;
157}
PRTL_UNICODE_STRING_BUFFER Path
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
unsigned int idx
Definition: utils.c:41
#define MAX_PATH
Definition: compat.h:34
int WINAPI PathParseIconLocationW(WCHAR *path)
Definition: path.c:2587
FxAutoRegKey hKey
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:855
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define I_IMAGENONE
Definition: commctrl.h:2391
static HRESULT GetRegString(HKEY hKey, LPCWSTR Name, LPWSTR Buffer, DWORD cchBuffer)
#define _countof(array)
Definition: sndvol32.h:70
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2390
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CRegTreeOptions::AddItemsFromRegistry().

◆ C_ASSERT()

C_ASSERT ( )

◆ CreatDibBitmap()

static HBITMAP CreatDibBitmap ( HDC  hDC,
UINT  cx,
UINT  cy,
UINT  bpp 
)
static

Definition at line 28 of file regtreeoptions.cpp.

29{
30 BITMAPINFO bi;
31 PVOID pvBits;
32
33 ZeroMemory(&bi, sizeof(bi));
34 bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
35 bi.bmiHeader.biWidth = cx;
37 bi.bmiHeader.biPlanes = 1;
40 return CreateDIBSection(hDC, &bi, DIB_RGB_COLORS, &pvBits, NULL, 0);
41}
static HDC hDC
Definition: 3dtext.c:33
DWORD bpp
Definition: surface.c:185
#define BI_RGB
Definition: precomp.h:56
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
USHORT biBitCount
Definition: precomp.h:46
ULONG biCompression
Definition: precomp.h:47
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
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 DIB_RGB_COLORS
Definition: wingdi.h:367

Referenced by CreateStateImages().

◆ CreateStateImages()

static HIMAGELIST CreateStateImages ( UINT  ImageSize)
static

Definition at line 43 of file regtreeoptions.cpp.

44{
45 enum { bpp = 32 };
47 HIMAGELIST hIL = ImageList_Create(ImageSize, ImageSize, ILC_MASK | bpp, 8, 0);
48 if (!hIL)
49 return hIL;
50
51 INT BorderSize = max(1, min(ImageSize / 16, 4));
52 RECT Rect;
54
55 HBITMAP hbmMask = CreateBitmap(ImageSize, ImageSize, 1, 1, NULL);
56 Failed |= hbmMask == NULL;
57
58 HBITMAP hbmData = CreatDibBitmap(hDC, ImageSize, ImageSize, bpp);
59 Failed |= hbmData == NULL;
60
61 const HGDIOBJ hbmOld = SelectObject(hDC, hbmMask);
62 Failed |= hbmOld == NULL;
63
64 // Create the check images
65 SetRect(&Rect, 0, 0, ImageSize, ImageSize);
67 InflateRect(&Rect, -BorderSize, -BorderSize);
69
70 SelectObject(hDC, hbmData);
73 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
75 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
77 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
79 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
80
81 // Create the radio images
82 SelectObject(hDC, hbmMask);
83 SetRect(&Rect, 0, 0, ImageSize, ImageSize);
85 InflateRect(&Rect, -BorderSize, -BorderSize);
87
88 SelectObject(hDC, hbmData);
91 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
93 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
95 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
97 Failed |= ImageList_Add(hIL, hbmData, hbmMask) < 0;
98
99 SelectObject(hDC, hbmOld);
100 DeleteObject(hbmMask);
101 DeleteObject(hbmData);
102 DeleteDC(hDC);
103 if (Failed)
104 {
106 hIL = NULL;
107 }
108 return hIL;
109}
#define FALSE
Definition: types.h:117
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
pKey DeleteObject()
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
#define ILC_MASK
Definition: commctrl.h:351
static HBITMAP CreatDibBitmap(HDC hDC, UINT cx, UINT cy, UINT bpp)
@ Failed
Definition: arc.h:79
#define max(a, b)
Definition: svc.c:63
int32_t INT
Definition: typedefs.h:58
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)
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 DFCS_BUTTONRADIOMASK
Definition: winuser.h:498
#define DFCS_BUTTONRADIOIMAGE
Definition: winuser.h:497
#define DFCS_CHECKED
Definition: winuser.h:504
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by CRegTreeOptions::InitTree().

◆ GetCheckState()

static HRESULT GetCheckState ( HKEY  hKey,
BOOL  UseDefault = FALSE 
)
static

Definition at line 289 of file regtreeoptions.cpp.

290{
291 BYTE CurrData[MAXVALUEDATA], CheckData[MAXVALUEDATA];
292 DWORD CurrType, CheckType, CurrSize, CheckSize, Err, Checked;
293
294 if (hKey == HKEY_GRAYED)
296
297 CheckSize = sizeof(CheckData);
298 Err = SHRegGetValueW(hKey, NULL, L"CheckedValue", SRRF_RT_ANY, &CheckType, CheckData, &CheckSize);
299 if (Err)
300 return HRESULT_FROM_WIN32(Err);
301
302 HRESULT hr = E_FAIL;
303 if (!UseDefault)
304 {
305 CurrSize = sizeof(CurrData);
306 hr = GetSetState(hKey, CurrType, CurrData, CurrSize, FALSE);
307 }
308 if (FAILED(hr))
309 {
310 CurrSize = sizeof(CurrData);
311 hr = GetDefaultValue(hKey, CurrType, CurrData, CurrSize);
312 }
313 if (FAILED(hr))
314 {
315 return hr;
316 }
317
318 CurrType = NormalizeRegType(CurrType);
319 CheckType = NormalizeRegType(CheckType);
320 if (CurrType != CheckType)
321 {
323 }
324 else if (CheckType == REG_SZ)
325 {
326 *(LPWSTR)(&CheckData[sizeof(CheckData) - sizeof(WCHAR)]) = UNICODE_NULL;
327 if (CheckSize <= sizeof(CheckData) - sizeof(WCHAR))
328 *(LPWSTR)(&CheckData[CheckSize]) = UNICODE_NULL;
329 Checked = !lstrcmpiW((LPWSTR)CheckData, (LPWSTR)CurrData);
330 }
331 else if (CheckType == REG_BINARY)
332 {
333 Checked = CheckSize == CurrSize && !memcmp(CheckData, CurrData, CurrSize);
334 }
335 else
336 {
338 }
339 return Checked ? S_OK : S_FALSE;
340}
VOID CheckSize(ULONG_PTR Base, SIZE_T InSize, SIZE_T ExpectedSize)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define REG_SZ
Definition: layer.c:22
@ Checked
Definition: olepro.idl:92
#define REG_BINARY
Definition: nt_native.h:1496
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
#define HKEY_GRAYED
#define MAXVALUEDATA
static HRESULT GetSetState(HKEY hKey, DWORD &Type, LPBYTE Data, DWORD &Size, BOOL Set)
static DWORD NormalizeRegType(DWORD Type)
static HRESULT GetDefaultValue(HKEY hKey, DWORD &Type, LPVOID Data, DWORD &Size)
HRESULT hr
Definition: shlfolder.c:183
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_ANY
Definition: shlwapi.h:260
#define S_FALSE
Definition: winerror.h:2357
#define ERROR_BAD_FORMAT
Definition: winerror.h:114
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WCHAR * LPWSTR
Definition: xmlstorage.h:184
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CRegTreeOptions::AddItemsFromRegistry(), and WalkTree().

◆ GetDefaultValue()

static HRESULT GetDefaultValue ( HKEY  hKey,
DWORD Type,
LPVOID  Data,
DWORD Size 
)
static

Definition at line 159 of file regtreeoptions.cpp.

160{
161 DWORD Err = SHRegGetValueW(hKey, NULL, L"DefaultValue", SRRF_RT_ANY, &Type, Data, &Size);
162 return HRESULT_FROM_WIN32(Err);
163}
Type
Definition: Type.h:7
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533

Referenced by GetCheckState(), and GetSetState().

◆ GetRegDWORD() [1/2]

static DWORD GetRegDWORD ( HKEY  hKey,
LPCWSTR  Name,
DWORD  Default 
)
static

Definition at line 127 of file regtreeoptions.cpp.

128{
129 DWORD Data = Default, Size = sizeof(Data);
131 return Err ? Default : Data;
132}
@ Default
Definition: stdole2.idl:392
#define SRRF_RT_DWORD
Definition: shlwapi.h:258

◆ GetRegDWORD() [2/2]

static DWORD GetRegDWORD ( HKEY  hKey,
LPCWSTR  Name,
PDWORD  Data 
)
inlinestatic

Definition at line 121 of file regtreeoptions.cpp.

122{
123 DWORD Size = sizeof(*Data);
125}

Referenced by CRegTreeOptions::AddItemsFromRegistry(), and GetSetState().

◆ GetRegString()

static HRESULT GetRegString ( HKEY  hKey,
LPCWSTR  Name,
LPWSTR  Buffer,
DWORD  cchBuffer 
)
static

Definition at line 134 of file regtreeoptions.cpp.

135{
136 DWORD Size = cchBuffer * sizeof(*Buffer);
138 return Err ? HRESULT_FROM_WIN32(Err) : Size / sizeof(*Buffer);
139}
Definition: bufpool.h:45
static DWORD cchBuffer
Definition: fusion.c:85
#define SRRF_RT_REG_SZ
Definition: shlwapi.h:251
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList

Referenced by AddIconFromRegistry(), and GetSetState().

◆ GetSetState()

static HRESULT GetSetState ( HKEY  hKey,
DWORD Type,
LPBYTE  Data,
DWORD Size,
BOOL  Set 
)
static

Definition at line 165 of file regtreeoptions.cpp.

166{
167 HRESULT hr;
168 UINT SysParam = GetRegDWORD(hKey, Set ? L"SPIActionSet" : L"SPIActionGet", DWORD(0));
169 if (SysParam)
170 {
171 Size = sizeof(BOOL);
172 Type = REG_DWORD;
174 return S_OK;
175 }
176
177#if 0 // TODO
178 // learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-iregtreeitem
179 CLSID clsid;
180 if (SUCCEEDED(GetRegString(hKey, "CLSID", Temp, _countof(Temp))) && ..(Temp, &clsid))
181 {
182 IRegTreeItem *pRTI;
183 if (SUCCEEDED(hr = IUnknown_QueryService(m_pUnkSite, clsid, IID_PPV_ARG(IRegTreeItem, &pti))) ||
184 SUCCEEDED(hr = SHCoCreateInstance(NULL, &clsid, NULL, IID_PPV_ARG(IRegTreeItem, &pRTI))))
185 {
186 BOOL *boolptr = (BOOL*)Data;
187 Size = sizeof(BOOL);
188 Type = REG_DWORD;
189 hr = Set ? pRTI->SetCheckState(*boolptr) : pRTI->GetCheckState(boolptr);
190 pRTI->Release();
191 }
192 return hr;
193 }
194#endif
195
196 DWORD Mask = ~DWORD(0), Offset = 0;
197 BOOL HasMask = GetRegDWORD(hKey, L"Mask", &Mask) == ERROR_SUCCESS;
198 BOOL HasOffset = GetRegDWORD(hKey, L"Offset", &Offset) == ERROR_SUCCESS;
199
201 WCHAR SubKey[MAX_PATH], Name[100];
202 hr = GetRegString(hKey, L"RegPath", SubKey, _countof(SubKey));
203 if (FAILED(hr))
204 return hr;
205 hr = GetRegString(hKey, L"ValueName", Name, _countof(Name));
206 if (FAILED(hr))
207 return hr;
208 DWORD Err, cb;
209 if (Set)
210 Err = RegCreateKeyExW(hValueKey, SubKey, 0, NULL, 0, KEY_READ | KEY_SET_VALUE, NULL, &hValueKey, NULL);
211 else
212 Err = RegOpenKeyExW(hValueKey, SubKey, 0, KEY_READ, &hValueKey);
213 if (Err)
214 return HRESULT_FROM_WIN32(Err);
215
216 if (Set && (HasMask || HasOffset))
217 {
218 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, NULL, NULL, &cb);
219 hr = HRESULT_FROM_WIN32(Err);
220 if (Err == ERROR_FILE_NOT_FOUND)
221 {
222 DWORD DefaultData = 0;
223 cb = sizeof(DefaultData);
224 hr = GetDefaultValue(hKey, Type, &DefaultData, cb);
225 if (SUCCEEDED(hr))
226 {
227 Err = SHSetValueW(hValueKey, NULL, Name, Type, &DefaultData, cb);
228 hr = HRESULT_FROM_WIN32(Err);
229 }
230 }
231
232 if (SUCCEEDED(hr))
233 {
234 Err = ERROR_OUTOFMEMORY;
235 cb = max(cb, (Offset + 1) * sizeof(DWORD));
236 if (PDWORD pBigData = (PDWORD)LocalAlloc(LPTR, cb)) // LPTR to zero extended data
237 {
238 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, pBigData, &cb);
239 Size = cb;
240 if (Err == ERROR_SUCCESS)
241 {
242 pBigData[Offset] &= ~Mask;
243 pBigData[Offset] |= *((PDWORD)Data);
244 Err = SHSetValueW(hValueKey, NULL, Name, Type, pBigData, cb);
245 }
246 LocalFree(pBigData);
247 }
248 hr = HRESULT_FROM_WIN32(Err);
249 }
250 }
251 else if (Set)
252 {
253 Err = SHSetValueW(hValueKey, NULL, Name, Type, Data, Size);
254 hr = HRESULT_FROM_WIN32(Err);
255 }
256 else
257 {
258 if (Offset && HasOffset)
259 {
260 Size = sizeof(DWORD);
261 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, NULL, NULL, &cb);
262 if (Err == ERROR_SUCCESS)
263 {
264 Err = ERROR_OUTOFMEMORY;
265 if (PDWORD pBigData = (PDWORD)LocalAlloc(LPTR, cb))
266 {
267 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, pBigData, &cb);
268 if (Offset < cb / sizeof(DWORD) && Err == ERROR_SUCCESS)
269 *((PDWORD)Data) = pBigData[Offset];
270 else
271 *((PDWORD)Data) = 0; // Value not present or offset too large
272 LocalFree(pBigData);
273 }
274 }
275 }
276 else
277 {
278 Err = SHRegGetValueW(hValueKey, NULL, Name, SRRF_RT_ANY, &Type, Data, &Size);
279 }
280
281 hr = HRESULT_FROM_WIN32(Err);
282 if (HasMask && SUCCEEDED(hr))
283 *((PDWORD)Data) &= Mask;
284 }
285 RegCloseKey(hValueKey);
286 return hr;
287}
#define HandleToLong(h)
Definition: basetsd.h:80
#define LongToHandle(h)
Definition: basetsd.h:82
HANDLE HKEY
Definition: registry.h:26
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ERROR_SUCCESS
Definition: deptool.c:10
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
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID refiid, LPVOID *ppv)
Definition: shellole.c:105
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
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned int Mask
Definition: fpcontrol.c:82
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
REFCLSID clsid
Definition: msctf.c:82
#define BOOL
Definition: nt_native.h:43
#define KEY_READ
Definition: nt_native.h:1023
#define DWORD
Definition: nt_native.h:44
#define KEY_SET_VALUE
Definition: nt_native.h:1017
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
static BOOL Set
Definition: pageheap.c:10
DWORD * PDWORD
Definition: pedump.c:68
static DWORD GetRegDWORD(HKEY hKey, LPCWSTR Name, PDWORD Data)
#define REG_DWORD
Definition: sdbapi.c:596
EXTERN_C BOOL WINAPI SHBoolSystemParametersInfo(UINT uiAction, PVOID pvParam)
#define LPTR
Definition: winbase.h:414
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define IID_PPV_ARG(Itype, ppType)

Referenced by GetCheckState(), and SaveCheckState().

◆ NormalizeRegType()

static DWORD NormalizeRegType ( DWORD  Type)
inlinestatic

Definition at line 111 of file regtreeoptions.cpp.

112{
113 switch (Type)
114 {
115 case REG_EXPAND_SZ: return REG_SZ;
116 case REG_DWORD: return REG_BINARY;
117 default: return Type;
118 }
119}
#define REG_EXPAND_SZ
Definition: nt_native.h:1494

Referenced by GetCheckState().

◆ SaveCheckState()

static HRESULT SaveCheckState ( HKEY  hKey,
BOOL  Checked 
)
static

Definition at line 342 of file regtreeoptions.cpp.

343{
345 DWORD Type = REG_DWORD, Size = sizeof(Data);
346 *((PDWORD)Data) = Checked;
347 LPCWSTR Name = Checked ? L"CheckedValue" : L"UncheckedValue";
349 if (Err == ERROR_FILE_NOT_FOUND)
350 Err = ERROR_SUCCESS;
351 return Err ? HRESULT_FROM_WIN32(Err) : GetSetState(hKey, Type, Data, Size, TRUE);
352}
#define TRUE
Definition: types.h:120
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by WalkTree().

◆ WalkTree()

static void WalkTree ( WALK_TREE_CMD  Command,
HWND  hTree,
HTREEITEM  hTI 
)
static

Definition at line 354 of file regtreeoptions.cpp.

355{
356 for (HTREEITEM hChildTI = TreeView_GetChild(hTree, hTI); hChildTI;)
357 {
358 WalkTree(Command, hTree, hChildTI);
359 hChildTI = TreeView_GetNextSibling(hTree, hChildTI);
360 }
361
362 TVITEM tvi;
364 tvi.hItem = hTI;
365 if (!TreeView_GetItem(hTree, &tvi))
366 return;
367
368 HKEY hKey = (HKEY)tvi.lParam;
369 UINT State = tvi.iImage;
371 {
372 case WALK_TREE_SAVE:
375 else if (State == STATE_CHECKOFF)
377 break;
378
380 if (hKey && hKey != HKEY_GRAYED)
381 {
383 tvi.lParam = 0;
384 tvi.mask = TVIF_PARAM;
385 TreeView_SetItem(hTree, &tvi);
386 }
387 break;
388
391 if (State < STATE_GROUP)
392 {
394 if (SUCCEEDED(hr))
395 {
396 tvi.iImage = tvi.iSelectedImage = (tvi.iImage & ~1) | (hr == S_OK);
397 TreeView_SetItem(hTree, &tvi);
398 }
399 }
400 break;
401 }
402}
switch(r->id)
Definition: btrfs.c:3046
#define TVITEM
Definition: commctrl.h:3370
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3471
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3495
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3472
#define TVIF_PARAM
Definition: commctrl.h:3273
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3502
static void WalkTree(WALK_TREE_CMD Command, HWND hTree, HTREEITEM hTI)
static HRESULT SaveCheckState(HKEY hKey, BOOL Checked)
static HRESULT GetCheckState(HKEY hKey, BOOL UseDefault=FALSE)
@ WALK_TREE_REFRESH
Definition: shlobj_undoc.h:459
@ WALK_TREE_DESTROY
Definition: shlobj_undoc.h:457
@ WALK_TREE_DEFAULT
Definition: shlobj_undoc.h:458
@ WALK_TREE_SAVE
Definition: shlobj_undoc.h:456
Definition: shell.h:41
static HWND hTree
Definition: systempage.cpp:52

Referenced by DECLARE_INTERFACE_(), and WalkTree().