ReactOS  0.4.15-dev-1384-g878186b
main.h File Reference
#include "resource.h"
Include dependency graph for main.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ChildWnd
 

Macros

#define STATUS_WINDOW   2001
 
#define TREE_WINDOW   2002
 
#define LIST_WINDOW   2003
 
#define SPLIT_WIDTH   5
 
#define SPLIT_MIN   30
 
#define COUNT_OF(a)   (sizeof(a)/sizeof(a[0]))
 
#define PM_MODIFYVALUE   0
 
#define PM_NEW   1
 
#define PM_TREECONTEXT   2
 
#define PM_ROOTITEM   3
 
#define PM_HEXEDIT   4
 
#define MAX_NEW_KEY_LEN   128
 

Enumerations

enum  OPTION_FLAGS {
  OPTIONS_AUTO_REFRESH = 0x01, OPTIONS_READ_ONLY_MODE = 0x02, OPTIONS_CONFIRM_ON_DELETE = 0x04, OPTIONS_SAVE_ON_EXIT = 0x08,
  OPTIONS_DISPLAY_BINARY_DATA = 0x10, OPTIONS_VIEW_TREE_ONLY = 0x20, OPTIONS_VIEW_DATA_ONLY = 0x40
}
 

Functions

void ShowAboutBox (HWND hWnd)
 
LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM)
 
void ResizeWnd (int cx, int cy)
 
LPCWSTR get_root_key_name (HKEY hRootKey)
 
VOID UpdateAddress (HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath)
 
int ErrorMessageBox (HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode,...)
 
int InfoMessageBox (HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage,...)
 
void FindDialog (HWND hWnd)
 
BOOL FindNext (HWND hWnd)
 
LRESULT CALLBACK FrameWndProc (HWND, UINT, WPARAM, LPARAM)
 
void SetupStatusBar (HWND hWnd, BOOL bResize)
 
void UpdateStatusBar (void)
 
BOOL CopyKeyName (HWND hWnd, HKEY hRootKey, LPCWSTR keyName)
 
BOOL ExportRegistryFile (HWND hWnd)
 
HWND CreateListView (HWND hwndParent, HMENU id, INT cx)
 
BOOL RefreshListView (HWND hwndLV, HKEY hKey, LPCWSTR keyPath)
 
LPCWSTR GetValueName (HWND hwndLV, int iStartAt)
 
BOOL ListWndNotifyProc (HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
 
BOOL TreeWndNotifyProc (HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
 
BOOL IsDefaultValue (HWND hwndLV, int i)
 
LPCWSTR getAppName (void)
 
HWND CreateTreeView (HWND hwndParent, LPWSTR pHostName, HMENU id)
 
BOOL RefreshTreeView (HWND hWndTV)
 
BOOL RefreshTreeItem (HWND hwndTV, HTREEITEM hItem)
 
BOOL OnTreeExpanding (HWND hWnd, NMTREEVIEW *pnmtv)
 
LPCWSTR GetItemPath (HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
 
BOOL DeleteNode (HWND hwndTV, HTREEITEM hItem)
 
HTREEITEM InsertNode (HWND hwndTV, HTREEITEM hItem, LPWSTR name)
 
HWND StartKeyRename (HWND hwndTV)
 
BOOL CreateNewKey (HWND hwndTV, HTREEITEM hItem)
 
BOOL SelectNode (HWND hwndTV, LPCWSTR keyPath)
 
void DestroyTreeView (HWND hwndTV)
 
void DestroyListView (HWND hwndLV)
 
void DestroyMainMenu (void)
 
BOOL ModifyValue (HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
 
BOOL DeleteKey (HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath)
 
LONG RenameKey (HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewName)
 
LONG RenameValue (HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpDestValue, LPCWSTR lpSrcValue)
 
LONG QueryStringValue (HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR pszBuffer, DWORD dwBufferLen)
 
BOOL GetKeyName (LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
 
BOOL RegKeyEditPermissions (HWND hWndOwner, HKEY hKey, LPCWSTR lpMachine, LPCWSTR lpKeyName)
 
void LoadSettings (void)
 
void SaveSettings (void)
 

Variables

HINSTANCE hInst
 
ChildWndg_pChildWnd
 
HWND hFrameWnd
 
HMENU hMenuFrame
 
HWND hStatusBar
 
HMENU hPopupMenus
 
HFONT hFont
 
enum OPTION_FLAGS Options
 
WCHAR szTitle []
 
WCHAR szFrameClass []
 
WCHAR szChildClass []
 
const WCHAR g_szGeneralRegKey []
 

Macro Definition Documentation

◆ COUNT_OF

#define COUNT_OF (   a)    (sizeof(a)/sizeof(a[0]))

Definition at line 33 of file main.h.

◆ LIST_WINDOW

#define LIST_WINDOW   2003

Definition at line 28 of file main.h.

◆ MAX_NEW_KEY_LEN

#define MAX_NEW_KEY_LEN   128

Definition at line 41 of file main.h.

◆ PM_HEXEDIT

#define PM_HEXEDIT   4

Definition at line 39 of file main.h.

◆ PM_MODIFYVALUE

#define PM_MODIFYVALUE   0

Definition at line 35 of file main.h.

◆ PM_NEW

#define PM_NEW   1

Definition at line 36 of file main.h.

◆ PM_ROOTITEM

#define PM_ROOTITEM   3

Definition at line 38 of file main.h.

◆ PM_TREECONTEXT

#define PM_TREECONTEXT   2

Definition at line 37 of file main.h.

◆ SPLIT_MIN

#define SPLIT_MIN   30

Definition at line 31 of file main.h.

◆ SPLIT_WIDTH

#define SPLIT_WIDTH   5

Definition at line 30 of file main.h.

◆ STATUS_WINDOW

#define STATUS_WINDOW   2001

Definition at line 26 of file main.h.

◆ TREE_WINDOW

#define TREE_WINDOW   2002

Definition at line 27 of file main.h.

Enumeration Type Documentation

◆ OPTION_FLAGS

Enumerator
OPTIONS_AUTO_REFRESH 
OPTIONS_READ_ONLY_MODE 
OPTIONS_CONFIRM_ON_DELETE 
OPTIONS_SAVE_ON_EXIT 
OPTIONS_DISPLAY_BINARY_DATA 
OPTIONS_VIEW_TREE_ONLY 
OPTIONS_VIEW_DATA_ONLY 

Definition at line 47 of file main.h.

Function Documentation

◆ ChildWndProc()

LRESULT CALLBACK ChildWndProc ( HWND  ,
UINT  ,
WPARAM  ,
LPARAM   
)

Definition at line 301 of file childwnd.c.

302 {
303  BOOL Result;
304  RECT rc;
305 
306  switch (message)
307  {
308  case WM_CREATE:
309  {
310  WNDPROC oldproc;
311  HFONT hFont;
313  DWORD style;
314 
315  /* Load "My Computer" string */
317 
319  if (!g_pChildWnd) return 0;
320 
322  g_pChildWnd->nSplitPos = 190;
323  g_pChildWnd->hWnd = hWnd;
324 
328  hWnd, (HMENU)0, hInst, 0);
329 
332  g_pChildWnd->hAddressBtnWnd = CreateWindowExW(0, L"Button", L"\x00BB", style,
334  hWnd, (HMENU)0, hInst, 0);
336  IMAGE_ICON, 12, 12, 0);
338 
339  GetClientRect(hWnd, &rc);
343 
344  /* set the address bar and button font */
346  {
349  WM_SETFONT,
350  (WPARAM)hFont,
351  0);
353  WM_SETFONT,
354  (WPARAM)hFont,
355  0);
356  }
357  /* Subclass the AddressBar */
361  break;
362  }
363  case WM_COMMAND:
364  if(HIWORD(wParam) == BN_CLICKED)
365  {
367  }
368  break; //goto def;
369  case WM_SETCURSOR:
370  if (LOWORD(lParam) == HTCLIENT)
371  {
372  POINT pt;
373  GetCursorPos(&pt);
376  {
378  return TRUE;
379  }
380  }
381  goto def;
382  case WM_DESTROY:
385  DestroyMainMenu();
388  g_pChildWnd = NULL;
389  PostQuitMessage(0);
390  break;
391  case WM_LBUTTONDOWN:
392  {
393  RECT rt;
394  int x = (short)LOWORD(lParam);
395  GetClientRect(hWnd, &rt);
397  {
400  SetCapture(hWnd);
401  }
402  break;
403  }
404 
405  case WM_LBUTTONUP:
406  case WM_RBUTTONDOWN:
407  if (GetCapture() == hWnd)
408  {
410  }
411  break;
412 
413  case WM_CAPTURECHANGED:
414  if (GetCapture()==hWnd && last_split>=0)
416  break;
417 
418  case WM_KEYDOWN:
419  if (wParam == VK_ESCAPE)
420  if (GetCapture() == hWnd)
421  {
422  RECT rt;
424  GetClientRect(hWnd, &rt);
425  ResizeWnd(rt.right, rt.bottom);
426  last_split = -1;
427  ReleaseCapture();
429  }
430  break;
431 
432  case WM_MOUSEMOVE:
433  if (GetCapture() == hWnd)
434  {
435  HDC hdc;
436  RECT rt;
437  HGDIOBJ OldObj;
438  int x = LOWORD(lParam);
439  if(!SizingPattern)
440  {
441  const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
442  SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
443  }
444  if(!SizingBrush)
445  {
447  }
448 
449  GetClientRect(hWnd, &rt);
450  x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN);
451  if(last_split != x)
452  {
453  rt.left = last_split-SPLIT_WIDTH/2;
454  rt.right = last_split+SPLIT_WIDTH/2+1;
455  hdc = GetDC(hWnd);
456  OldObj = SelectObject(hdc, SizingBrush);
457  PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
458  last_split = x;
459  rt.left = x-SPLIT_WIDTH/2;
460  rt.right = x+SPLIT_WIDTH/2+1;
461  PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
462  SelectObject(hdc, OldObj);
463  ReleaseDC(hWnd, hdc);
464  }
465  }
466  break;
467 
468  case WM_SETFOCUS:
469  if (g_pChildWnd != NULL)
470  {
472  }
473  break;
474 
475  case WM_TIMER:
476  break;
477 
478  case WM_NOTIFY:
479  if (g_pChildWnd == NULL) break;
480 
481  if (((LPNMHDR)lParam)->idFrom == TREE_WINDOW)
482  {
484  {
485  goto def;
486  }
487 
488  return Result;
489  }
490  else
491  {
492  if (((LPNMHDR)lParam)->idFrom == LIST_WINDOW)
493  {
495  {
496  goto def;
497  }
498 
499  return Result;
500  }
501  else
502  {
503  goto def;
504  }
505  }
506  break;
507 
508  case WM_CONTEXTMENU:
509  {
510  POINT pt;
512  {
513  int i, cnt;
514  BOOL IsDefault;
515  pt.x = (short) LOWORD(lParam);
516  pt.y = (short) HIWORD(lParam);
519  if (pt.x == -1 && pt.y == -1)
520  {
521  RECT rc;
522  if (i != -1)
523  {
524  rc.left = LVIR_BOUNDS;
526  pt.x = rc.left + 8;
527  pt.y = rc.top + 8;
528  }
529  else
530  pt.x = pt.y = 0;
532  }
533  if(i == -1)
534  {
536  }
537  else
538  {
541  IsDefault = IsDefaultValue(g_pChildWnd->hListWnd, i);
542  if(cnt == 1)
544  else
548 
550  }
551  }
552  else if ((HWND)wParam == g_pChildWnd->hTreeWnd)
553  {
554  TVHITTESTINFO hti;
555  HMENU hContextMenu;
556  TVITEMW item;
557  MENUITEMINFOW mii;
558  WCHAR resource[256];
559  WCHAR buffer[256];
560  LPWSTR s;
561  LPCWSTR keyPath;
562  HKEY hRootKey;
563  int iLastPos;
564  WORD wID;
565  BOOL isRoot;
566 
567  pt.x = (short) LOWORD(lParam);
568  pt.y = (short) HIWORD(lParam);
569 
570  if (pt.x == -1 && pt.y == -1)
571  {
572  RECT rc;
574  if (hti.hItem != NULL)
575  {
577  pt.x = rc.left + 8;
578  pt.y = rc.top + 8;
580  hti.flags = TVHT_ONITEM;
581  }
582  else
583  hti.flags = 0;
584  }
585  else
586  {
587  hti.pt.x = pt.x;
588  hti.pt.y = pt.y;
591  }
592 
593  if (hti.flags & TVHT_ONITEM)
594  {
596 
597  isRoot = (TreeView_GetParent(g_pChildWnd->hTreeWnd, hti.hItem) == NULL);
598  hContextMenu = GetSubMenu(hPopupMenus, isRoot ? PM_ROOTITEM : PM_TREECONTEXT);
599 
600  memset(&item, 0, sizeof(item));
601  item.mask = TVIF_STATE | TVIF_CHILDREN;
602  item.hItem = hti.hItem;
604 
605  /* Set the Expand/Collapse menu item appropriately */
607  memset(&mii, 0, sizeof(mii));
608  mii.cbSize = sizeof(mii);
610  mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
612  mii.dwTypeData = (LPWSTR) buffer;
613  SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
614 
615  if (isRoot == FALSE)
616  {
617  /* Remove any existing suggestions */
618  memset(&mii, 0, sizeof(mii));
619  mii.cbSize = sizeof(mii);
620  mii.fMask = MIIM_ID;
621  GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
622  if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
623  {
624  do
625  {
626  iLastPos = GetMenuItemCount(hContextMenu) - 1;
627  GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
628  RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
629  }
630  while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
631  }
632 
633  /* Come up with suggestions */
634  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, NULL, &hRootKey);
635  SuggestKeys(hRootKey, keyPath, Suggestions, COUNT_OF(Suggestions));
636  if (Suggestions[0])
637  {
638  AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
639 
641 
642  s = Suggestions;
644  while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
645  {
647 
648  memset(&mii, 0, sizeof(mii));
649  mii.cbSize = sizeof(mii);
650  mii.fMask = MIIM_STRING | MIIM_ID;
651  mii.wID = wID++;
652  mii.dwTypeData = buffer;
653  InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
654 
655  s += wcslen(s) + 1;
656  }
657  }
658  }
659  TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd/*g_pChildWnd->hWnd*/, NULL);
660  }
661  }
662  break;
663  }
664 
665  case WM_SIZE:
666  if (wParam != SIZE_MINIMIZED && g_pChildWnd != NULL)
667  {
669  }
670  /* fall through */
671  default:
672 def:
674  }
675  return 0;
676 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define IDC_SIZEWE
Definition: winuser.h:689
#define IDS_GOTO_SUGGESTED_KEY
Definition: resource.h:194
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2430
#define max(a, b)
Definition: svc.c:63
#define PM_ROOTITEM
Definition: main.h:38
Definition: tftpd.h:59
static HICON
Definition: imagelist.c:84
#define MF_DISABLED
Definition: winuser.h:130
void DestroyListView(HWND hwndLV)
Definition: listview.c:653
#define IMAGE_ICON
Definition: winuser.h:212
#define ID_TREE_COLLAPSEBRANCH
Definition: resource.h:98
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3425
#define PATINVERT
Definition: wingdi.h:327
#define MF_BYCOMMAND
Definition: winuser.h:202
static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions, size_t iSuggestionsLength)
Definition: childwnd.c:139
long y
Definition: polytest.cpp:48
#define WM_CONTEXTMENU
Definition: richedit.h:64
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define WM_LBUTTONDOWN
Definition: winuser.h:1758
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:210
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
long x
Definition: polytest.cpp:48
static void finish_splitbar(HWND hWnd, int x)
Definition: childwnd.c:120
BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: treeview.c:628
HDC WINAPI GetDC(_In_opt_ HWND)
#define PM_MODIFYVALUE
Definition: main.h:35
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define TRUE
Definition: types.h:120
#define pt(x, y)
Definition: drawing.c:79
HWND hTreeWnd
Definition: main.h:61
#define WM_CAPTURECHANGED
Definition: winuser.h:1790
HWND hListWnd
Definition: main.h:62
static HDC
Definition: imagelist.c:92
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
GLuint buffer
Definition: glext.h:5915
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
HWND WINAPI SetFocus(_In_opt_ HWND)
LPWSTR dwTypeData
Definition: winuser.h:3244
#define LVNI_SELECTED
Definition: commctrl.h:2420
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
LONG left
Definition: windef.h:306
#define MFS_DEFAULT
Definition: winuser.h:743
#define VK_ESCAPE
Definition: winuser.h:2189
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2635
#define BS_CENTER
Definition: winuser.h:260
LONG right
Definition: windef.h:308
#define BM_SETIMAGE
Definition: winuser.h:1904
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define VK_RETURN
Definition: winuser.h:2176
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
#define SPLIT_WIDTH
Definition: eventvwr.c:62
HFONT hFont
Definition: main.c:53
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HBITMAP SizingPattern
Definition: childwnd.c:25
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
int nSplitPos
Definition: main.h:67
#define TPM_RIGHTBUTTON
Definition: winuser.h:2355
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define ListView_GetSelectedCount(hwndLV)
Definition: commctrl.h:2705
#define TVIF_CHILDREN
Definition: commctrl.h:3268
#define FALSE
Definition: types.h:117
#define ID_TREE_SUGGESTION_MIN
Definition: resource.h:159
#define MIIM_STATE
Definition: winuser.h:716
unsigned int BOOL
Definition: ntddk_ex.h:94
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
#define WM_SETCURSOR
Definition: winuser.h:1618
short SHORT
Definition: pedump.c:59
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL IsDefaultValue(HWND hwndLV, int i)
Definition: listview.c:107
HWND WINAPI GetCapture(void)
Definition: message.c:2880
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define TREE_WINDOW
Definition: main.h:27
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define CW_USEDEFAULT
Definition: winuser.h:225
#define GWLP_USERDATA
Definition: treelist.c:63
static void draw_splitbar(HWND hWnd, int x)
Definition: childwnd.c:90
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define WM_KEYDOWN
Definition: winuser.h:1697
#define MF_SEPARATOR
Definition: winuser.h:137
WCHAR Suggestions[256]
Definition: childwnd.c:27
LONG_PTR LPARAM
Definition: windef.h:208
#define SPLIT_MIN
Definition: main.h:31
#define LVNI_FOCUSED
Definition: commctrl.h:2419
#define ID_EDIT_RENAME
Definition: resource.h:61
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
#define WM_DESTROY
Definition: winuser.h:1591
HTREEITEM hItem
Definition: commctrl.h:3517
#define MIIM_ID
Definition: winuser.h:717
#define WM_RBUTTONDOWN
Definition: winuser.h:1761
#define GetMenuItemInfo
Definition: winuser.h:5763
HBRUSH WINAPI CreatePatternBrush(_In_ HBITMAP)
#define SetMenuItemInfo
Definition: winuser.h:5825
BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: listview.c:543
WCHAR szPath[MAX_PATH]
Definition: main.h:69
#define ID_TREE_SUGGESTION_MAX
Definition: resource.h:160
#define COUNT_OF(a)
Definition: main.h:33
static VOID DestroyTreeView(HWND hTreeView)
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3469
#define AppendMenu
Definition: winuser.h:5706
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3509
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define WM_SIZE
Definition: winuser.h:1593
static int last_split
Definition: childwnd.c:24
HMENU hPopupMenus
Definition: main.c:33
void DestroyMainMenu()
Definition: main.c:157
HWND hWnd
Definition: main.h:60
#define WM_TIMER
Definition: winuser.h:1724
#define MF_ENABLED
Definition: winuser.h:128
#define IDI_ARROW
Definition: resource.h:37
#define MAX_PATH
Definition: compat.h:34
#define PM_TREECONTEXT
Definition: main.h:37
#define WM_KEYUP
Definition: winuser.h:1698
unsigned short WORD
Definition: ntddk_ex.h:93
#define BN_CLICKED
Definition: winuser.h:1907
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IDS_MY_COMPUTER
Definition: resource.h:132
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define SIZE_MINIMIZED
Definition: winuser.h:2481
HWND CreateTreeView(HWND hwndParent, LPWSTR pHostName, HMENU id)
Definition: treeview.c:738
HWND hAddressBtnWnd
Definition: main.h:64
#define DEFAULT_GUI_FONT
Definition: wingdi.h:908
HICON hArrowIcon
Definition: main.h:65
void ResizeWnd(int cx, int cy)
Definition: childwnd.c:41
#define BS_ICON
Definition: winuser.h:264
static const WCHAR L[]
Definition: oid.c:1250
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
HDC hdc
Definition: main.c:9
#define MFS_GRAYED
Definition: winuser.h:746
GLdouble s
Definition: gl.h:2039
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3465
#define WS_TABSTOP
Definition: pedump.c:634
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define WM_COMMAND
Definition: winuser.h:1722
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define BS_VCENTER
Definition: winuser.h:279
#define LVM_GETITEMRECT
Definition: commctrl.h:2473
#define GWLP_WNDPROC
Definition: treelist.c:66
#define TVIS_EXPANDED
Definition: commctrl.h:3280
#define BS_FLAT
Definition: winuser.h:280
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
#define ID_EDIT_MODIFY
Definition: resource.h:65
#define MIIM_STRING
Definition: winuser.h:722
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND hFrameWnd
Definition: main.c:30
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define LVIR_BOUNDS
Definition: commctrl.h:2468
HINSTANCE hInst
Definition: dxdiag.c:13
static ATOM item
Definition: dde.c:856
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3477
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_LBUTTONUP
Definition: winuser.h:1759
#define PM_NEW
Definition: main.h:36
#define ID_TREE_EXPANDBRANCH
Definition: resource.h:96
#define min(a, b)
Definition: monoChain.cc:55
#define WM_MOUSEMOVE
Definition: winuser.h:1757
#define NULL
Definition: types.h:112
BOOL CreateListView(PMAIN_WND_INFO Info)
Definition: listview.c:355
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_SETFONT
Definition: winuser.h:1632
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define IDC_ARROW
Definition: winuser.h:682
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2889
HWND hAddressBarWnd
Definition: main.h:63
Definition: main.h:58
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1590
#define LIST_WINDOW
Definition: main.h:28
#define HIWORD(l)
Definition: typedefs.h:247
LONG bottom
Definition: windef.h:309
#define TVIF_STATE
Definition: commctrl.h:3265
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define GetWindowLongPtr
Definition: treelist.c:73
#define WM_SETFOCUS
Definition: winuser.h:1595
#define MF_GRAYED
Definition: winuser.h:129
#define HTCLIENT
Definition: winuser.h:2450
WCHAR * LPWSTR
Definition: xmlstorage.h:184
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define IDS_COLLAPSE
Definition: resource.h:191
#define IDS_EXPAND
Definition: resource.h:190
#define TVHT_ONITEM
Definition: commctrl.h:3523
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
#define ID_EDIT_MODIFY_BIN
Definition: resource.h:125
#define memset(x, y, z)
Definition: compat.h:39
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define LOWORD(l)
Definition: pedump.c:82
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3486
#define WM_NOTIFY
Definition: richedit.h:61
#define InsertMenuItem
Definition: winuser.h:5779
int nFocusPanel
Definition: main.h:66
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HBRUSH SizingBrush
Definition: childwnd.c:26

◆ CopyKeyName()

BOOL CopyKeyName ( HWND  hWnd,
HKEY  hRootKey,
LPCWSTR  keyName 
)

Definition at line 791 of file framewnd.c.

792 {
793  BOOL bClipboardOpened = FALSE;
794  BOOL bSuccess = FALSE;
795  WCHAR szBuffer[512];
796  HGLOBAL hGlobal;
797  LPWSTR s;
798 
799  if (!OpenClipboard(hWnd))
800  goto done;
801  bClipboardOpened = TRUE;
802 
803  if (!EmptyClipboard())
804  goto done;
805 
806  if (!GetKeyName(szBuffer, COUNT_OF(szBuffer), hRootKey, keyName))
807  goto done;
808 
809  hGlobal = GlobalAlloc(GMEM_MOVEABLE, (wcslen(szBuffer) + 1) * sizeof(WCHAR));
810  if (!hGlobal)
811  goto done;
812 
813  s = GlobalLock(hGlobal);
814  wcscpy(s, szBuffer);
815  GlobalUnlock(hGlobal);
816 
818  bSuccess = TRUE;
819 
820 done:
821  if (bClipboardOpened)
822  CloseClipboard();
823  return bSuccess;
824 }
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define TRUE
Definition: types.h:120
HWND hWnd
Definition: settings.c:17
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
static BOOLEAN bSuccess
Definition: drive.cpp:419
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define CF_UNICODETEXT
Definition: constants.h:408
#define COUNT_OF(a)
Definition: main.h:33
BOOL WINAPI EmptyClipboard(void)
Definition: ntwrapper.h:190
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
GLdouble s
Definition: gl.h:2039
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define GMEM_MOVEABLE
Definition: winbase.h:291
BOOL GetKeyName(LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
Definition: edit.c:1588

Referenced by _CmdWndProc().

◆ CreateListView()

HWND CreateListView ( HWND  hwndParent,
HMENU  id,
INT  cx 
)

Definition at line 630 of file listview.c.

631 {
632  RECT rcClient;
633  HWND hwndLV;
634 
635  /* Get the dimensions of the parent window's client area, and create the list view control. */
636  GetClientRect(hwndParent, &rcClient);
637  hwndLV = CreateWindowExW(WS_EX_CLIENTEDGE, WC_LISTVIEW, L"List View",
639  0, 0, rcClient.right, rcClient.bottom,
640  hwndParent, id, hInst, NULL);
641  if (!hwndLV) return NULL;
642 
643  /* Initialize the image list, and add items to the control. */
644  if (!CreateListColumns(hwndLV, cx)) goto fail;
645  if (!InitListViewImageLists(hwndLV)) goto fail;
646 
647  return hwndLV;
648 fail:
649  DestroyWindow(hwndLV);
650  return NULL;
651 }
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2263
#define LVS_REPORT
Definition: commctrl.h:2258
static BOOL CreateListColumns(HWND hWndListView, INT cxTotal)
Definition: listview.c:258
#define WS_CHILD
Definition: pedump.c:617
LONG right
Definition: windef.h:308
BOOL WINAPI DestroyWindow(_In_ HWND)
static HWND hwndParent
Definition: cryptui.c:300
static const WCHAR L[]
Definition: oid.c:1250
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_TABSTOP
Definition: pedump.c:634
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HINSTANCE hInst
Definition: dxdiag.c:13
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
static BOOL InitListViewImageLists(HWND hwndLV)
Definition: listview.c:280
#define LVS_EDITLABELS
Definition: commctrl.h:2269
#define NULL
Definition: types.h:112
#define WC_LISTVIEW
Definition: commctrl.h:2255
_Out_opt_ int * cx
Definition: commctrl.h:581
LONG bottom
Definition: windef.h:309
#define WS_VISIBLE
Definition: pedump.c:620

◆ CreateNewKey()

BOOL CreateNewKey ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 571 of file treeview.c.

572 {
573  WCHAR szNewKeyFormat[128];
574  WCHAR szNewKey[128];
575  LPCWSTR pszKeyPath;
576  int iIndex = 1;
577  LONG nResult;
578  HKEY hRootKey = NULL, hKey = NULL, hNewKey = NULL;
579  BOOL bSuccess = FALSE;
580  DWORD dwDisposition;
581  HTREEITEM hNewItem;
582 
583  pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey);
584  if (pszKeyPath[0] == L'\0')
585  hKey = hRootKey;
586  else if (RegOpenKeyW(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
587  goto done;
588 
589  if (LoadStringW(hInst, IDS_NEW_KEY, szNewKeyFormat, COUNT_OF(szNewKeyFormat)) <= 0)
590  goto done;
591 
592  /* Need to create a new key with a unique name */
593  do
594  {
595  wsprintf(szNewKey, szNewKeyFormat, iIndex++);
596  nResult = RegCreateKeyExW(hKey, szNewKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hNewKey, &dwDisposition);
597  if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY)
598  {
599  RegCloseKey(hNewKey);
600  hNewKey = NULL;
601  }
602  else if (!hNewKey)
603  {
604  InfoMessageBox(hFrameWnd, MB_OK | MB_ICONERROR, NULL, L"Cannot create new key!\n\nError Code: %d", nResult);
605  goto done;
606  }
607  }
608  while(!hNewKey);
609 
610  /* Insert the new key */
611  hNewItem = InsertNode(hwndTV, hItem, szNewKey);
612  if (!hNewItem)
613  goto done;
614 
615  /* The new key's name is probably not appropriate yet */
616  (void)TreeView_EditLabel(hwndTV, hNewItem);
617 
618  bSuccess = TRUE;
619 
620 done:
621  if (hKey != hRootKey && hKey)
622  RegCloseKey(hKey);
623  if (hNewKey)
624  RegCloseKey(hNewKey);
625  return bSuccess;
626 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define TreeView_EditLabel(hwnd, hitem)
Definition: commctrl.h:3500
int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage,...)
Definition: error.c:51
#define REG_OPENED_EXISTING_KEY
Definition: nt_native.h:1085
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static BOOLEAN bSuccess
Definition: drive.cpp:419
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:1091
#define IDS_NEW_KEY
Definition: resource.h:192
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define FALSE
Definition: types.h:117
HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name)
Definition: treeview.c:331
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define COUNT_OF(a)
Definition: main.h:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
#define MB_ICONERROR
Definition: winuser.h:781
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
HWND hFrameWnd
Definition: main.c:30
HINSTANCE hInst
Definition: dxdiag.c:13
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
#define MB_OK
Definition: winuser.h:784
#define wsprintf
Definition: winuser.h:5840

Referenced by _CmdWndProc().

◆ CreateTreeView()

HWND CreateTreeView ( HWND  hwndParent,
LPWSTR  pHostName,
HMENU  id 
)

Definition at line 738 of file treeview.c.

739 {
740  RECT rcClient;
741  HWND hwndTV;
742 
743  /* Get the dimensions of the parent window's client area, and create the tree view control. */
744  GetClientRect(hwndParent, &rcClient);
747  0, 0, rcClient.right, rcClient.bottom,
748  hwndParent, id, hInst, NULL);
749  if (!hwndTV) return NULL;
750 
751  /* Initialize the image list, and add items to the control. */
752  if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName))
753  {
754  DestroyWindow(hwndTV);
755  return NULL;
756  }
757  return hwndTV;
758 }
static BOOL InitTreeViewItems(HWND hwndTV, LPWSTR pHostName)
Definition: treeview.c:391
#define TVS_LINESATROOT
Definition: commctrl.h:3245
#define WS_CHILD
Definition: pedump.c:617
LONG right
Definition: windef.h:308
BOOL WINAPI DestroyWindow(_In_ HWND)
#define TVS_HASBUTTONS
Definition: commctrl.h:3243
static HWND hwndParent
Definition: cryptui.c:300
#define WC_TREEVIEW
Definition: commctrl.h:3241
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_TABSTOP
Definition: pedump.c:634
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
static BOOL InitTreeViewImageLists(HWND hwndTV)
Definition: treeview.c:438
HINSTANCE hInst
Definition: dxdiag.c:13
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define NULL
Definition: types.h:112
#define TVS_SHOWSELALWAYS
Definition: commctrl.h:3248
#define TVS_HASLINES
Definition: commctrl.h:3244
LONG bottom
Definition: windef.h:309
#define WS_VISIBLE
Definition: pedump.c:620
#define TVS_EDITLABELS
Definition: commctrl.h:3246

Referenced by ChildWndProc().

◆ DeleteKey()

BOOL DeleteKey ( HWND  hwnd,
HKEY  hKeyRoot,
LPCWSTR  keyPath 
)

Definition at line 1456 of file edit.c.

1457 {
1458  WCHAR msg[128], caption[128];
1459  BOOL result = FALSE;
1460  LONG lRet;
1461  HKEY hKey;
1462 
1463  lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
1464  if (lRet != ERROR_SUCCESS)
1465  {
1466  error_code_messagebox(hwnd, lRet);
1467  return FALSE;
1468  }
1469 
1472 
1474  goto done;
1475 
1476  lRet = SHDeleteKey(hKeyRoot, keyPath);
1477  if (lRet != ERROR_SUCCESS)
1478  {
1479  error(hwnd, IDS_BAD_KEY, keyPath);
1480  goto done;
1481  }
1482  result = TRUE;
1483 
1484 done:
1485  RegCloseKey(hKey);
1486  return result;
1487 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
void error(HWND hwnd, INT resId,...)
Definition: edit.c:42
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
#define IDS_BAD_KEY
Definition: resource.h:145
#define ERROR_SUCCESS
Definition: deptool.c:10
#define IDYES
Definition: winuser.h:829
#define KEY_SET_VALUE
Definition: nt_native.h:1017
GLuint64EXT * result
Definition: glext.h:11304
char caption[64]
Definition: dialog.c:2334
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define FALSE
Definition: types.h:117
#define MB_YESNO
Definition: winuser.h:811
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
static void error_code_messagebox(HWND hwnd, DWORD error_code)
Definition: edit.c:65
#define MB_ICONQUESTION
Definition: winuser.h:783
#define COUNT_OF(a)
Definition: main.h:33
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define IDS_QUERY_DELETE_KEY_CONFIRM
Definition: resource.h:158
HWND hWnd
Definition: main.h:60
#define IDS_QUERY_DELETE_KEY_ONE
Definition: resource.h:156
HINSTANCE hInst
Definition: dxdiag.c:13
FxAutoRegKey hKey
#define SHDeleteKey
Definition: shlwapi.h:44
#define msg(x)
Definition: auth_time.c:54
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366

Referenced by _CmdWndProc(), and DECLARE_INTERFACE_().

◆ DeleteNode()

BOOL DeleteNode ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 102 of file treeview.c.

103 {
104  if (!hItem) hItem = TreeView_GetSelection(hwndTV);
105  if (!hItem) return FALSE;
106  return TreeView_DeleteItem(hwndTV, hItem);
107 }
#define FALSE
Definition: types.h:117
#define TreeView_DeleteItem(hwnd, hitem)
Definition: commctrl.h:3411
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3469

Referenced by _CmdWndProc(), and RtlpDeleteAvlTreeNode().

◆ DestroyListView()

void DestroyListView ( HWND  hwndLV)

Definition at line 653 of file listview.c.

654 {
655  INT count, i;
656  LVITEMW item;
657 
658  count = ListView_GetItemCount(hwndLV);
659  for (i = 0; i < count; i++)
660  {
661  item.mask = LVIF_PARAM;
662  item.iItem = i;
663  (void)ListView_GetItem(hwndLV, &item);
664  free(((LINE_INFO*)item.lParam)->name);
665  HeapFree(GetProcessHeap(), 0, (void*)item.lParam);
666  }
667 
668 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define free
Definition: debug_ros.c:5
int32_t INT
Definition: typedefs.h:58
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2303
#define GetProcessHeap()
Definition: compat.h:595
static ATOM item
Definition: dde.c:856
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ListView_GetItem(hwnd, pitem)
Definition: commctrl.h:2390
#define LVIF_PARAM
Definition: commctrl.h:2307
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by ChildWndProc(), and RefreshListView().

◆ DestroyMainMenu()

void DestroyMainMenu ( void  )

Definition at line 157 of file main.c.

158 {
160 }
BOOL WINAPI DestroyMenu(_In_ HMENU)
HMENU hMenuFrame
Definition: main.c:32

Referenced by ChildWndProc().

◆ DestroyTreeView()

void DestroyTreeView ( HWND  hwndTV)

Definition at line 760 of file treeview.c.

761 {
763 
765 
766  /* Destroy the image list associated with the tree view control */
769 }
static LPWSTR pathBuffer
Definition: treeview.c:31
HIMAGELIST himl
#define TreeView_GetImageList(hwnd, iImage)
Definition: commctrl.h:3437
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
#define GetProcessHeap()
Definition: compat.h:595
#define TVSIL_NORMAL
Definition: commctrl.h:3439
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ ErrorMessageBox()

int ErrorMessageBox ( HWND  hWnd,
LPCWSTR  lpTitle,
DWORD  dwErrorCode,
  ... 
)

Definition at line 24 of file error.c.

25 {
26  int iRet = 0;
27  LPWSTR lpMsgBuf = NULL;
28  DWORD Status = 0;
29  va_list args;
30 
31  va_start(args, dwErrorCode);
32 
34  NULL,
35  dwErrorCode,
37  (LPWSTR)&lpMsgBuf,
38  0,
39  &args);
40 
41  va_end(args);
42 
43  iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message."), lpTitle, MB_OK | MB_ICONERROR);
44 
45  if (lpMsgBuf) LocalFree(lpMsgBuf);
46 
47  /* Return the MessageBoxW information */
48  return iRet;
49 }
#define args
Definition: format.c:66
#define LANG_NEUTRAL
Definition: nls.h:22
#define SUBLANG_DEFAULT
Definition: nls.h:168
HWND hWnd
Definition: settings.c:17
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Definition: match.c:390
#define va_end(ap)
Definition: acmsvcex.h:90
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
char * va_list
Definition: acmsvcex.h:78
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
Status
Definition: gdiplustypes.h:24
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
unsigned long DWORD
Definition: ntddk_ex.h:95
va_start(ap, x)
static const WCHAR L[]
Definition: oid.c:1250
#define MB_ICONERROR
Definition: winuser.h:781
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define NULL
Definition: types.h:112
#define MB_OK
Definition: winuser.h:784
TCHAR lpTitle[80]
Definition: ctm.c:69
#define MAKELANGID(p, s)
Definition: nls.h:15
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by error_code_messagebox(), ExportRegistryFile(), ImportRegistryFile(), LoadHive(), TreeWndNotifyProc(), and UnloadHive().

◆ ExportRegistryFile()

BOOL ExportRegistryFile ( HWND  hWnd)

Definition at line 587 of file framewnd.c.

588 {
589  BOOL bRet = FALSE;
591  WCHAR ExportKeyPath[_MAX_PATH] = {0};
592  WCHAR Caption[128], szTitle[512], szText[512];
593  HKEY hKeyRoot;
594  LPCWSTR pszKeyPath;
595 
596  /* Figure out which key path we are exporting */
597  pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
598  GetKeyName(ExportKeyPath, COUNT_OF(ExportKeyPath), hKeyRoot, pszKeyPath);
599 
601  LoadStringW(hInst, IDS_EXPORT_REG_FILE, Caption, COUNT_OF(Caption));
602  ofn.lpstrTitle = Caption;
603 
604  /* Only set the path if a key (not the root node) is selected */
605  if (hKeyRoot != 0)
606  {
607  ofn.lCustData = (LPARAM) ExportKeyPath;
608  }
612  if (GetSaveFileName(&ofn))
613  {
614  switch (ofn.nFilterIndex)
615  {
616  case 2: /* Registry Hive Files */
617  {
618  LONG lResult;
619  HKEY hSubKey;
620 
621  /* Open the subkey */
622  lResult = RegOpenKeyExW(hKeyRoot, pszKeyPath, 0, KEY_READ, &hSubKey);
623  if (lResult == ERROR_SUCCESS)
624  {
625  /* Enable the 'backup' privilege, save the hive then disable the privilege */
627  lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL);
628  if (lResult == ERROR_ALREADY_EXISTS)
629  {
630  /*
631  * We are here, that means that we already said "yes" to the confirmation dialog.
632  * So we absolutely want to replace the hive file.
633  */
635  {
636  /* Try again */
637  lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL);
638  }
639  }
641 
642  if (lResult != ERROR_SUCCESS)
643  {
644  /*
645  * If we are here, it's because RegSaveKeyW has failed for any reason.
646  * The problem is that even if it has failed, it has created or
647  * replaced the exported hive file with a new empty file. We don't
648  * want to keep this file, so we delete it.
649  */
651  }
652 
653  /* Close the subkey */
654  RegCloseKey(hSubKey);
655  }
656 
657  /* Set the return value */
658  bRet = (lResult == ERROR_SUCCESS);
659 
660  /* Display error, if any */
661  if (!bRet) ErrorMessageBox(hWnd, Caption, lResult);
662 
663  break;
664  }
665 
666  case 1: /* Windows Registry Editor Version 5.00 */
667  case 3: /* REGEDIT4 */
668  default: /* All files ==> use Windows Registry Editor Version 5.00 */
669  {
670  if (!export_registry_key(ofn.lpstrFile, ExportKeyPath,
672  : REG_FORMAT_5)))
673  {
674  /* Error creating the file */
678  bRet = FALSE;
679  }
680  else
681  {
682  bRet = TRUE;
683  }
684 
685  break;
686  }
687  }
688  }
689  else
690  {
692  }
693 
694  return bRet;
695 }
#define OFN_EXPLORER
Definition: commdlg.h:104
int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode,...)
Definition: error.c:24
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPARAM lCustData
Definition: commdlg.h:346
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
#define SE_BACKUP_NAME
HWND hTreeWnd
Definition: main.h:61
HWND hWnd
Definition: settings.c:17
OPENFILENAME ofn
Definition: main.cpp:37
int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage,...)
Definition: error.c:51
LPCSTR lpTemplateName
Definition: commdlg.h:348
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define GetSaveFileName
Definition: commdlg.h:666
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347
#define FALSE
Definition: types.h:117
static const WCHAR szText[]
Definition: dialog.c:139
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define IDS_EXPORT_REG_FILE
Definition: resource.h:134
#define _MAX_PATH
Definition: utility.h:77
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
#define OFN_ENABLETEMPLATE
Definition: commdlg.h:102
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
Definition: framewnd.c:533
static BOOL EnablePrivilege(LPCWSTR lpszPrivilegeName, LPCWSTR lpszSystemName, BOOL bEnablePrivilege)
Definition: framewnd.c:322
LONG_PTR LPARAM
Definition: windef.h:208
#define IDD_EXPORTRANGE
Definition: resource.h:42
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
#define COUNT_OF(a)
Definition: main.h:33
LONG WINAPI RegSaveKeyW(HKEY hKey, LPCWSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: reg.c:4630
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define REG_FORMAT_5
Definition: regproc.h:24
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
static BOOL CheckCommDlgError(HWND hWnd)
Definition: framewnd.c:198
#define MB_ICONERROR
Definition: winuser.h:781
HINSTANCE hInst
Definition: dxdiag.c:13
LPSTR lpstrFile
Definition: commdlg.h:336
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define REG_FORMAT_4
Definition: regproc.h:25
#define NULL
Definition: types.h:112
#define MB_OK
Definition: winuser.h:784
BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
Definition: regproc.c:1310
#define IDS_APP_TITLE
Definition: resource.h:10
LPCSTR lpstrTitle
Definition: commdlg.h:341
#define IDS_EXPORT_ERROR
Definition: resource.h:199
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
DWORD nFilterIndex
Definition: commdlg.h:335
static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME *pofn)
Definition: framewnd.c:265
DWORD Flags
Definition: commdlg.h:342
BOOL GetKeyName(LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
Definition: edit.c:1588

Referenced by _CmdWndProc().

◆ FindDialog()

void FindDialog ( HWND  hWnd)

Definition at line 813 of file find.c.

814 {
816  hWnd, FindDialogProc, 0) != 0)
817  {
818  if (!FindNext(hWnd))
819  {
820  WCHAR msg[128], caption[128];
821 
825  }
826  }
827 }
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
char caption[64]
Definition: dialog.c:2334
HWND hWnd
Definition: settings.c:17
BOOL FindNext(HWND hWnd)
Definition: find.c:631
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define COUNT_OF(a)
Definition: main.h:33
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define IDD_FIND
Definition: resource.h:51
static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: find.c:698
#define MB_ICONINFORMATION
Definition: winuser.h:796
#define IDS_FINISHEDFIND
Definition: resource.h:201
HINSTANCE hInst
Definition: dxdiag.c:13
#define GetModuleHandle
Definition: winbase.h:3667
#define NULL
Definition: types.h:112
#define IDS_APP_TITLE
Definition: resource.h:10
#define msg(x)
Definition: auth_time.c:54
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by _CmdWndProc(), and FindNext().

◆ FindNext()

BOOL FindNext ( HWND  hWnd)

Definition at line 631 of file find.c.

632 {
633  HKEY hKeyRoot;
634  LPCWSTR pszKeyPath;
635  BOOL fSuccess;
636  WCHAR szFullKey[512];
637  LPCWSTR pszValueName;
638  LPWSTR pszFoundSubKey, pszFoundValueName;
639 
640  if (wcslen(s_szFindWhat) == 0)
641  {
642  FindDialog(hWnd);
643  return TRUE;
644  }
645 
647 
648  pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
649  if (pszKeyPath == NULL)
650  {
651  hKeyRoot = HKEY_CLASSES_ROOT;
652  pszKeyPath = s_empty;
653  }
654 
655  /* Create abort find dialog */
658  if (s_hwndAbortDialog)
659  {
662  }
663  s_bAbort = FALSE;
664 
665  pszValueName = GetValueName(g_pChildWnd->hListWnd, -1);
666 
671 
672  fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
673  &pszFoundSubKey, &pszFoundValueName);
674 
679 
680  if (s_hwndAbortDialog)
681  {
684  }
685 
686  if (fSuccess)
687  {
688  GetKeyName(szFullKey, COUNT_OF(szFullKey), hKeyRoot, pszFoundSubKey);
689  SelectNode(g_pChildWnd->hTreeWnd, szFullKey);
690  SetValueName(g_pChildWnd->hListWnd, pszFoundValueName);
691  free(pszFoundSubKey);
692  free(pszFoundValueName);
694  }
695  return fSuccess || s_bAbort;
696 }
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
static WCHAR s_szFindWhat[256]
Definition: find.c:27
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
static HWND s_hwndAbortDialog
Definition: find.c:30
#define free
Definition: debug_ros.c:5
HWND hTreeWnd
Definition: main.h:61
HWND hListWnd
Definition: main.h:62
BOOL WINAPI UpdateWindow(_In_ HWND)
HWND hWnd
Definition: settings.c:17
#define IDD_FINDING
Definition: resource.h:52
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI DestroyWindow(_In_ HWND)
#define FALSE
Definition: types.h:117
static const WCHAR s_empty[]
Definition: find.c:36
VOID SetValueName(HWND hwndLV, LPCWSTR pszValueName)
Definition: listview.c:84
unsigned int BOOL
Definition: ntddk_ex.h:94
LPCWSTR GetValueName(HWND hwndLV, int iStartAt)
Definition: listview.c:55
static DWORD GetFindFlags(void)
Definition: find.c:556
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
#define SW_SHOW
Definition: winuser.h:769
static DWORD s_dwFlags
Definition: find.c:33
#define COUNT_OF(a)
Definition: main.h:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define CreateDialogW(h, n, w, f)
Definition: winuser.h:4256
static BOOL s_bAbort
Definition: find.c:31
void FindDialog(HWND hWnd)
Definition: find.c:813
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HWND hFrameWnd
Definition: main.c:30
#define GetModuleHandle
Definition: winbase.h:3667
BOOL RegFindWalk(HKEY *phKey, LPCWSTR pszSubKey, LPCWSTR pszValueName, LPWSTR *ppszFoundSubKey, LPWSTR *ppszFoundValueName)
Definition: find.c:356
#define NULL
Definition: types.h:112
HWND hAddressBarWnd
Definition: main.h:63
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
Definition: treeview.c:771
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
WCHAR * LPWSTR
Definition: xmlstorage.h:184
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static INT_PTR CALLBACK AbortFindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: find.c:603
BOOL GetKeyName(LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
Definition: edit.c:1588

Referenced by _CmdWndProc(), and FindDialog().

◆ FrameWndProc()

LRESULT CALLBACK FrameWndProc ( HWND  ,
UINT  ,
WPARAM  ,
LPARAM   
)

Definition at line 1349 of file framewnd.c.

1350 {
1351  RECT rc;
1352  switch (message)
1353  {
1354  case WM_CREATE:
1355  // For now, the Help dialog item is disabled because of lacking of HTML Help support
1357  GetClientRect(hWnd, &rc);
1359  rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
1360  hWnd, (HMENU)0, hInst, 0);
1361  break;
1362  case WM_COMMAND:
1365  break;
1366  case WM_ACTIVATE:
1367  if (LOWORD(hWnd) && g_pChildWnd)
1369  break;
1370  case WM_SIZE:
1372  break;
1373  case WM_TIMER:
1374  break;
1375  case WM_INITMENU:
1376  OnInitMenu(hWnd);
1377  break;
1378  case WM_ENTERMENULOOP:
1380  break;
1381  case WM_EXITMENULOOP:
1383  break;
1384  case WM_MENUSELECT:
1386  break;
1387  case WM_SYSCOLORCHANGE:
1388  /* Forward WM_SYSCOLORCHANGE to common controls */
1391  break;
1392  case WM_DESTROY:
1394  SaveSettings();
1395  PostQuitMessage(0);
1396  default:
1398  }
1399  return 0;
1400 }
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1608
Definition: tftpd.h:59
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
#define MF_BYCOMMAND
Definition: winuser.h:202
static void OnExitMenuLoop(HWND hWnd)
Definition: framewnd.c:136
static void resize_frame_client(HWND hWnd)
Definition: framewnd.c:62
#define HELP_QUIT
Definition: winuser.h:2389
HWND hTreeWnd
Definition: main.h:61
HWND hListWnd
Definition: main.h:62
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:307
static void OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
Definition: framewnd.c:144
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WS_CHILD
Definition: pedump.c:617
LONG left
Definition: windef.h:306
#define ID_HELP_HELPTOPICS
Definition: resource.h:77
LONG right
Definition: windef.h:308
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
void SaveSettings(void)
Definition: settings.c:115
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_ENTERMENULOOP
Definition: winuser.h:1786
#define WM_MENUSELECT
Definition: winuser.h:1729
#define WM_EXITMENULOOP
Definition: winuser.h:1787
#define WM_DESTROY
Definition: winuser.h:1591
static void OnEnterMenuLoop(HWND hWnd)
Definition: framewnd.c:124
#define WM_SIZE
Definition: winuser.h:1593
HWND hWnd
Definition: main.h:60
#define WM_TIMER
Definition: winuser.h:1724
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: framewnd.c:1030
static void OnInitMenu(HWND hWnd)
Definition: framewnd.c:72
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
WCHAR szChildClass[MAX_LOADSTRING]
Definition: main.c:40
#define WM_COMMAND
Definition: winuser.h:1722
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HINSTANCE hInst
Definition: dxdiag.c:13
#define WM_INITMENU
Definition: winuser.h:1727
#define WM_ACTIVATE
Definition: winuser.h:1594
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
LPCWSTR getAppName(void)
Definition: regedit.c:61
BOOL WINAPI WinHelpW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_ UINT, _In_ ULONG_PTR)
#define WM_CREATE
Definition: winuser.h:1590
#define HIWORD(l)
Definition: typedefs.h:247
LONG bottom
Definition: windef.h:309
#define MF_GRAYED
Definition: winuser.h:129
#define WS_VISIBLE
Definition: pedump.c:620
HMENU WINAPI GetMenu(_In_ HWND)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)

◆ get_root_key_name()

LPCWSTR get_root_key_name ( HKEY  hRootKey)

Definition at line 29 of file childwnd.c.

30 {
31  if (hRootKey == HKEY_CLASSES_ROOT) return L"HKEY_CLASSES_ROOT";
32  if (hRootKey == HKEY_CURRENT_USER) return L"HKEY_CURRENT_USER";
33  if (hRootKey == HKEY_LOCAL_MACHINE) return L"HKEY_LOCAL_MACHINE";
34  if (hRootKey == HKEY_USERS) return L"HKEY_USERS";
35  if (hRootKey == HKEY_CURRENT_CONFIG) return L"HKEY_CURRENT_CONFIG";
36  if (hRootKey == HKEY_DYN_DATA) return L"HKEY_DYN_DATA";
37 
38  return L"UNKNOWN HKEY, PLEASE REPORT";
39 }
#define HKEY_USERS
Definition: winreg.h:13
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
static const WCHAR L[]
Definition: oid.c:1250
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by SaveSettings(), and UpdateAddress().

◆ getAppName()

◆ GetItemPath()

LPCWSTR GetItemPath ( HWND  hwndTV,
HTREEITEM  hItem,
HKEY phRootKey 
)

Definition at line 83 of file treeview.c.

84 {
85  int pathLen = 0, maxLen;
86 
87  *phRootKey = NULL;
88  if (!pathBuffer) pathBuffer = HeapAlloc(GetProcessHeap(), 0, 1024);
89  if (!pathBuffer) return NULL;
90  *pathBuffer = 0;
91  maxLen = (int) HeapSize(GetProcessHeap(), 0, pathBuffer);
92  if (maxLen == -1) return NULL;
93  if (!hItem) hItem = TreeView_GetSelection(hwndTV);
94  if (!hItem) return NULL;
95  if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen))
96  {
97  return NULL;
98  }
99  return pathBuffer;
100 }
static LPWSTR pathBuffer
Definition: treeview.c:31
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)
static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY *phKey, LPWSTR *pKeyPath, int *pPathLen, int *pMaxLen)
Definition: treeview.c:35
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3469
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define NULL
Definition: types.h:112
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by _CmdWndProc(), ChildWndProc(), CreateNewKey(), ExportRegistryFile(), FindNext(), ImportRegistryFile(), ListWndNotifyProc(), LoadHive(), OnTreeExpanding(), RefreshTreeItem(), SaveSettings(), TreeWndNotifyProc(), UnloadHive(), UpdateAddress(), and UpdateStatusBar().

◆ GetKeyName()

BOOL GetKeyName ( LPWSTR  pszDest,
size_t  iDestLength,
HKEY  hRootKey,
LPCWSTR  lpSubKey 
)

Definition at line 1588 of file edit.c.

1589 {
1590  LPCWSTR pszRootKey;
1591 
1592  if (hRootKey == HKEY_CLASSES_ROOT)
1593  pszRootKey = L"HKEY_CLASSES_ROOT";
1594  else if (hRootKey == HKEY_CURRENT_USER)
1595  pszRootKey = L"HKEY_CURRENT_USER";
1596  else if (hRootKey == HKEY_LOCAL_MACHINE)
1597  pszRootKey = L"HKEY_LOCAL_MACHINE";
1598  else if (hRootKey == HKEY_USERS)
1599  pszRootKey = L"HKEY_USERS";
1600  else if (hRootKey == HKEY_CURRENT_CONFIG)
1601  pszRootKey = L"HKEY_CURRENT_CONFIG";
1602  else if (hRootKey == HKEY_DYN_DATA)
1603  pszRootKey = L"HKEY_DYN_DATA";
1604  else
1605  return FALSE;
1606 
1607  if (lpSubKey[0])
1608  _snwprintf(pszDest, iDestLength, L"%s\\%s", pszRootKey, lpSubKey);
1609  else
1610  _snwprintf(pszDest, iDestLength, L"%s", pszRootKey);
1611  return TRUE;
1612 }
#define HKEY_USERS
Definition: winreg.h:13
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define FALSE
Definition: types.h:117
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
static const WCHAR L[]
Definition: oid.c:1250
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by CopyKeyName(), ExportRegistryFile(), FindNext(), and ScControl().

◆ GetValueName()

LPCWSTR GetValueName ( HWND  hwndLV,
int  iStartAt 
)

Definition at line 55 of file listview.c.

56 {
57  int item;
58  LVITEMW LVItem;
59  PLINE_INFO lineinfo;
60 
61  /*
62  if a new item is inserted, then no allocation,
63  otherwise the heap block will be lost!
64  */
65  item = ListView_GetNextItem(hwndLV, iStartAt, LVNI_SELECTED);
66  if (item == -1) return NULL;
67 
68  /*
69  Should be always TRUE anyways
70  */
71  LVItem.iItem = item;
72  LVItem.iSubItem = 0;
73  LVItem.mask = LVIF_PARAM;
74  if (ListView_GetItem(hwndLV, &LVItem) == FALSE)
75  return NULL;
76 
77  lineinfo = (PLINE_INFO)LVItem.lParam;
78  if (lineinfo == NULL)
79  return NULL;
80 
81  return lineinfo->name;
82 }
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2430
#define LVNI_SELECTED
Definition: commctrl.h:2420
struct tagLINE_INFO * PLINE_INFO
#define FALSE
Definition: types.h:117
int iSubItem
Definition: commctrl.h:2358
LPARAM lParam
Definition: commctrl.h:2364
if(!(yy_init))
Definition: macro.lex.yy.c:714
UINT mask
Definition: commctrl.h:2356
LPWSTR name
Definition: listview.c:34
static ATOM item
Definition: dde.c:856
#define NULL
Definition: types.h:112
#define ListView_GetItem(hwnd, pitem)
Definition: commctrl.h:2390
#define LVIF_PARAM
Definition: commctrl.h:2307

Referenced by _CmdWndProc(), and FindNext().

◆ InfoMessageBox()

int InfoMessageBox ( HWND  hWnd,
UINT  uType,
LPCWSTR  lpTitle,
LPCWSTR  lpMessage,
  ... 
)

Definition at line 51 of file error.c.

52 {
53  int iRet = 0;
54  LPWSTR lpMsgBuf = NULL;
55  va_list args;
56 
57  va_start(args, lpMessage);
58 
59  if (lpMessage)
60  {
61  SIZE_T strLen = _vscwprintf(lpMessage, args);
62 
63  /* Create a buffer on the heap and zero it out (LPTR) */
64  lpMsgBuf = (LPWSTR)LocalAlloc(LPTR, (strLen + 1) * sizeof(WCHAR));
65  if (lpMsgBuf)
66  {
67  _vsnwprintf(lpMsgBuf, strLen, lpMessage, args);
68  }
69  }
70 
71  va_end(args);
72 
73  iRet = MessageBoxW(hWnd, (lpMessage && lpMsgBuf ? lpMsgBuf : L"Error displaying info message."), lpTitle, uType);
74 
75  if (lpMsgBuf) LocalFree(lpMsgBuf);
76 
77  /* Return the MessageBoxW information */
78  return iRet;
79 }
#define args
Definition: format.c:66
HWND hWnd
Definition: settings.c:17
Definition: match.c:390
#define va_end(ap)
Definition: acmsvcex.h:90
char * va_list
Definition: acmsvcex.h:78
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
va_start(ap, x)
static const WCHAR L[]
Definition: oid.c:1250
ULONG_PTR SIZE_T
Definition: typedefs.h:80
_Check_return_ _CRTIMP int __cdecl _vscwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest, size_t _Count, const wchar_t *_Format, va_list _Args)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define NULL
Definition: types.h:112
TCHAR lpTitle[80]
Definition: ctm.c:69
#define LPTR
Definition: winbase.h:362
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1373
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CreateNewKey(), ExportRegistryFile(), ImportRegistryFile(), PerformRegAction(), and ProcessCmdLine().

◆ InsertNode()

HTREEITEM InsertNode ( HWND  hwndTV,
HTREEITEM  hItem,
LPWSTR  name 
)

Definition at line 331 of file treeview.c.

332 {
334  HTREEITEM hNewItem = 0;
335  TVITEMEXW item;
336 
337  /* Default to the current selection */
338  if (!hItem)
339  {
340  hItem = TreeView_GetSelection(hwndTV);
341  if (!hItem)
342  return FALSE;
343  }
344 
345  memset(&item, 0, sizeof(item));
346  item.hItem = hItem;
348  if (!TreeView_GetItem(hwndTV, &item))
349  return FALSE;
350 
351  if ((item.state & TVIS_EXPANDEDONCE) && (item.cChildren > 0))
352  {
353  hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
354  SendMessageW(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM) hItem);
355  }
356  else
357  {
358  item.mask = TVIF_CHILDREN | TVIF_HANDLE;
359  item.hItem = hItem;
360  item.cChildren = 1;
361  if (!TreeView_SetItem(hwndTV, &item))
362  return FALSE;
363  }
364 
366  if (!hNewItem)
367  {
368  for(hNewItem = TreeView_GetChild(hwndTV, hItem); hNewItem; hNewItem = TreeView_GetNextSibling(hwndTV, hNewItem))
369  {
370  item.mask = TVIF_HANDLE | TVIF_TEXT;
371  item.hItem = hNewItem;
372  item.pszText = buf;
373  item.cchTextMax = COUNT_OF(buf);
374  if (!TreeView_GetItem(hwndTV, &item)) continue;
375  if (wcscmp(name, item.pszText) == 0) break;
376  }
377  }
378  if (hNewItem) (void)TreeView_SelectItem(hwndTV, hNewItem);
379 
380  return hNewItem;
381 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define TVM_SORTCHILDREN
Definition: commctrl.h:3537
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3462
#define TVIS_EXPANDEDONCE
Definition: commctrl.h:3281
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3463
static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
Definition: treeview.c:110
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define TVIF_CHILDREN
Definition: commctrl.h:3268
#define FALSE
Definition: types.h:117
HTREEITEM hItem
Definition: treelist.h:37
LONG_PTR LPARAM
Definition: windef.h:208
#define COUNT_OF(a)
Definition: main.h:33
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3469
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TVE_EXPAND
Definition: commctrl.h:3419
#define TVIF_HANDLE
Definition: commctrl.h:3266
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static ATOM item
Definition: dde.c:856
#define TVIF_TEXT
Definition: commctrl.h:3262
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3477
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3493
Definition: name.c:38
#define TVIF_STATE
Definition: commctrl.h:3265
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3416
#define memset(x, y, z)
Definition: compat.h:39
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3486
#define MAX_NEW_KEY_LEN
Definition: main.h:41

Referenced by CreateNewKey().

◆ IsDefaultValue()

BOOL IsDefaultValue ( HWND  hwndLV,
int  i 
)

Definition at line 107 of file listview.c.

108 {
109  PLINE_INFO lineinfo;
110  LVITEMW Item;
111 
112  Item.mask = LVIF_PARAM;
113  Item.iItem = i;
114  if(ListView_GetItem(hwndLV, &Item))
115  {
116  lineinfo = (PLINE_INFO)Item.lParam;
117  return lineinfo && (!lineinfo->name || !wcscmp(lineinfo->name, L""));
118  }
119  return FALSE;
120 }
struct tagLINE_INFO * PLINE_INFO
#define FALSE
Definition: types.h:117
static const WCHAR L[]
Definition: oid.c:1250
LPWSTR name
Definition: listview.c:34
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
#define ListView_GetItem(hwnd, pitem)
Definition: commctrl.h:2390
#define LVIF_PARAM
Definition: commctrl.h:2307

Referenced by ChildWndProc().

◆ ListWndNotifyProc()

BOOL ListWndNotifyProc ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam,
BOOL Result 
)

Definition at line 543 of file listview.c.

544 {
546  int iSortingColumn;
548  *Result = TRUE;
549  switch (((LPNMHDR)lParam)->code)
550  {
551  case LVN_GETDISPINFO:
553  return TRUE;
554  case LVN_COLUMNCLICK:
555  iSortingColumn = ((LPNMLISTVIEW)lParam)->iSubItem;
556  (void)ListView_Sort(hWnd, iSortingColumn, g_iSortedColumn);
557  g_iSortedColumn = iSortingColumn;
558  return TRUE;
559  case NM_DBLCLK:
560  case NM_RETURN:
561  {
563  }
564  return TRUE;
565  case NM_SETFOCUS:
567  break;
568  case LVN_BEGINLABELEDIT:
570  if(Info)
571  {
572  PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
573  if(!lineinfo->name || !wcscmp(lineinfo->name, L""))
574  {
575  *Result = TRUE;
576  }
577  else
578  {
579  *Result = FALSE;
580  }
581  }
582  else
583  *Result = TRUE;
584  return TRUE;
585  case LVN_ENDLABELEDIT:
587  if(Info && Info->item.pszText)
588  {
589  PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
590  if(!lineinfo->name || !wcscmp(lineinfo->name, L""))
591  {
592  *Result = FALSE;
593  }
594  else
595  {
596  if(wcslen(Info->item.pszText) == 0)
597  {
598  WCHAR msg[128], caption[128];
599 
602  MessageBoxW(0, msg, caption, 0);
603  *Result = TRUE;
604  }
605  else
606  {
607  HKEY hKeyRoot;
608  LPCWSTR keyPath;
609  LONG lResult;
610 
611  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
612  lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
613  lineinfo->name = realloc(lineinfo->name, (wcslen(Info->item.pszText)+1)*sizeof(WCHAR));
614  if (lineinfo->name != NULL)
615  wcscpy(lineinfo->name, Info->item.pszText);
616 
617  *Result = TRUE;
618  return (lResult == ERROR_SUCCESS);
619  }
620  }
621  }
622  else
623  *Result = TRUE;
624 
625  return TRUE;
626  }
627  return FALSE;
628 }
#define realloc
Definition: debug_ros.c:6
#define LVN_BEGINLABELEDIT
Definition: commctrl.h:3154
#define MAKEWPARAM(l, h)
Definition: winuser.h:3984
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char caption[64]
Definition: dialog.c:2334
#define TRUE
Definition: types.h:120
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
HWND hTreeWnd
Definition: main.h:61
LONG RenameValue(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpDestValue, LPCWSTR lpSrcValue)
Definition: edit.c:1522
HWND hWnd
Definition: settings.c:17
static void OnGetDispInfo(NMLVDISPINFO *plvdi)
Definition: listview.c:312
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
WPARAM wParam
Definition: combotst.c:138
struct tagLINE_INFO * PLINE_INFO
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:683
#define FALSE
Definition: types.h:117
long LONG
Definition: pedump.c:60
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
#define NMLVDISPINFO
Definition: commctrl.h:3178
#define COUNT_OF(a)
Definition: main.h:33
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NM_SETFOCUS
Definition: commctrl.h:135
#define IDS_ERR_RENVAL_TOEMPTY
Definition: resource.h:142
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define IDS_ERR_RENVAL_CAPTION
Definition: resource.h:141
static const WCHAR L[]
Definition: oid.c:1250
#define WM_COMMAND
Definition: winuser.h:1722
Definition: inflate.c:139
LPWSTR name
Definition: listview.c:34
#define LVN_GETDISPINFO
Definition: commctrl.h:3156
static INT g_iSortedColumn
Definition: listview.c:49
#define ID_EDIT_MODIFY
Definition: resource.h:65
#define NM_RETURN
Definition: commctrl.h:132
HWND hFrameWnd
Definition: main.c:30
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
HINSTANCE hInst
Definition: dxdiag.c:13
static BOOL ListView_Sort(HWND hListView, int iSortingColumn, int iSortedColumn)
Definition: listview.c:479
#define NM_DBLCLK
Definition: commctrl.h:131
struct tagNMLISTVIEW * LPNMLISTVIEW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
#define LVN_COLUMNCLICK
Definition: commctrl.h:3135
#define msg(x)
Definition: auth_time.c:54
#define LVN_ENDLABELEDIT
Definition: commctrl.h:3155
LPARAM lParam
Definition: combotst.c:139
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
int nFocusPanel
Definition: main.h:66

Referenced by ChildWndProc().

◆ LoadSettings()

void LoadSettings ( void  )

Definition at line 53 of file settings.c.

54 {
55  HKEY hKey = NULL;
56  int iItemIndex = -1;
57 
59  {
60  TCHAR szBuffer[MAX_PATH];
61  DWORD dwAdvancedChecked;
62  DWORD type, size = sizeof(dwAdvancedChecked);
63  LSTATUS lstatus;
64 
65  /* Restore last selected font */
66  if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("Font"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS)
67  {
68  //Get combobox handle
70 
71  //Search for match and return index if match found
72  iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer);
73  if(iItemIndex != CB_ERR)
74  {
75  ComboBox_SetCurSel(hWnd, iItemIndex);
77  }
78  }
79 
80  /* Restore last selected character set */
81  if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("CodePage"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS)
82  {
83  //Get combobox handle
85 
86  iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer);
87  if(iItemIndex != CB_ERR)
88  {
89  ComboBox_SetCurSel(hWnd, iItemIndex);
90  }
91  }
92 
93  lstatus = RegQueryValueEx(hKey, _T("Advanced"), NULL, &type, (LPBYTE)&dwAdvancedChecked, &size);
94  if (lstatus == ERROR_SUCCESS && type == REG_DWORD && dwAdvancedChecked != FALSE)
95  {
97  }
98 
100  }
101  else
102  {
103  /* Default font seems to be Arial */
105 
106  iItemIndex = ComboBox_FindStringExact(hWnd, -1, _T("Arial"));
107  if(iItemIndex != CB_ERR)
108  {
109  ComboBox_SetCurSel(hWnd, iItemIndex);
111  }
112  }
113 }
#define RegQueryValueEx
Definition: winreg.h:524
#define ERROR_SUCCESS
Definition: deptool.c:10
#define IDC_CHECK_ADVANCED
Definition: resource.h:26
#define KEY_READ
Definition: nt_native.h:1023
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND hWnd
Definition: settings.c:17
#define SendDlgItemMessage
Definition: winuser.h:5817
#define IDC_COMBO_CHARSET
Definition: resource.h:21
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind)
Definition: windowsx.h:22
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
const TCHAR g_szGeneralRegKey[]
Definition: settings.c:16
#define CB_ERR
Definition: winuser.h:2410
#define MF_CHECKED
Definition: winuser.h:132
char TCHAR
Definition: xmlstorage.h:189
#define BM_CLICK
Definition: winuser.h:1899
#define _T(x)
Definition: vfdio.h:22
GLsizeiptr size
Definition: glext.h:5919
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define ComboBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:41
#define IDC_FONTCOMBO
Definition: resource.h:12
VOID ChangeMapFont(HWND hDlg)
Definition: charmap.c:162
LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
Definition: settings.c:19
#define RegOpenKeyEx
Definition: winreg.h:520
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
HWND hCharmapDlg
Definition: charmap.c:22
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define REG_DWORD
Definition: sdbapi.c:596

◆ ModifyValue()

BOOL ModifyValue ( HWND  hwnd,
HKEY  hKey,
LPCWSTR  valueName,
BOOL  EditBin 
)

Definition at line 1072 of file edit.c.

1073 {
1074  DWORD type;
1075  LONG lRet;
1076  BOOL result = FALSE;
1077 
1078  if (!hKey)
1079  return FALSE;
1080 
1081  editValueName = valueName;
1082 
1083  lRet = RegQueryValueExW(hKey, valueName, 0, &type, 0, &valueDataLen);
1084  if (lRet != ERROR_SUCCESS && (valueName == NULL || !valueName[0]))
1085  {
1086  lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
1087  type = REG_SZ;
1088  valueDataLen = 0;
1090  binValueData = NULL;
1091  }
1092 
1093  if (lRet != ERROR_SUCCESS)
1094  {
1095  error(hwnd, IDS_BAD_VALUE, valueName);
1096  goto done;
1097  }
1098 
1099  if (EditBin == FALSE && ((type == REG_SZ) || (type == REG_EXPAND_SZ)))
1100  {
1101  if (valueDataLen > 0)
1102  {
1104  {
1106  goto done;
1107  }
1108  lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
1109  if (lRet != ERROR_SUCCESS)
1110  {
1111  error(hwnd, IDS_BAD_VALUE, valueName);
1112  goto done;
1113  }
1114  }
1115  else
1116  {
1118  }
1119 
1121  {
1122  if (stringValueData)
1123  {
1124  lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)stringValueData, (DWORD) (wcslen(stringValueData) + 1) * sizeof(WCHAR));
1125  }
1126  else
1127  {
1128  lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
1129  }
1130  if (lRet == ERROR_SUCCESS)
1131  result = TRUE;
1132  }
1133  }
1134  else if (EditBin == FALSE && type == REG_MULTI_SZ)
1135  {
1136  if (valueDataLen > 0)
1137  {
1138  size_t llen, listlen, nl_len;
1139  LPWSTR src, lines = NULL;
1140 
1142  {
1144  goto done;
1145  }
1146  lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
1147  if (lRet != ERROR_SUCCESS)
1148  {
1149  error(hwnd, IDS_BAD_VALUE, valueName);
1150  goto done;
1151  }
1152 
1153  /* convert \0 to \r\n */
1154  src = stringValueData;
1155  nl_len = wcslen(L"\r\n") * sizeof(WCHAR);
1156  listlen = sizeof(WCHAR);
1157  lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, listlen + sizeof(WCHAR));
1158  while(*src != L'\0')
1159  {
1160  llen = wcslen(src);
1161  if(llen == 0)
1162  break;
1163  listlen += (llen * sizeof(WCHAR)) + nl_len;
1165  wcscat(lines, src);
1166  wcscat(lines, L"\r\n");
1167  src += llen + 1;
1168  }
1171  }
1172  else
1173  {
1175  }
1176 
1178  {
1179  if (stringValueData)
1180  {
1181  /* convert \r\n to \0 */
1182  BOOL EmptyLines = FALSE;
1183  LPWSTR src, lines, nl;
1184  size_t linechars, buflen, c_nl, dest;
1185 
1186  src = stringValueData;
1187  buflen = sizeof(WCHAR);
1188  lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen + sizeof(WCHAR));
1189  c_nl = wcslen(L"\r\n");
1190  dest = 0;
1191  while(*src != L'\0')
1192  {
1193  if((nl = wcsstr(src, L"\r\n")))
1194  {
1195  linechars = nl - src;
1196  if(nl == src)
1197  {
1198  EmptyLines = TRUE;
1199  src = nl + c_nl;
1200  continue;
1201  }
1202  }
1203  else
1204  {
1205  linechars = wcslen(src);
1206  }
1207  if(linechars > 0)
1208  {
1209  buflen += ((linechars + 1) * sizeof(WCHAR));
1211  memcpy((lines + dest), src, linechars * sizeof(WCHAR));
1212  dest += linechars;
1213  lines[dest++] = L'\0';
1214  }
1215  else
1216  {
1217  EmptyLines = TRUE;
1218  }
1219  src += linechars + (nl != NULL ? c_nl : 0);
1220  }
1221  lines[++dest] = L'\0';
1222 
1223  if(EmptyLines)
1224  {
1226  }
1227 
1228  lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
1229  HeapFree(GetProcessHeap(), 0, lines);
1230  }
1231  else
1232  {
1233  lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
1234  }
1235  if (lRet == ERROR_SUCCESS)
1236  result = TRUE;
1237  }
1238  }
1239  else if (EditBin == FALSE && type == REG_DWORD)
1240  {
1241  lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&dwordValueData, &valueDataLen);
1242  if (lRet != ERROR_SUCCESS)
1243  {
1244  error(hwnd, IDS_BAD_VALUE, valueName);
1245  goto done;
1246  }
1247 
1249  {
1250  lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)&dwordValueData, sizeof(DWORD));
1251  if (lRet == ERROR_SUCCESS)
1252  result = TRUE;
1253  }
1254  }
1255  else if (EditBin == FALSE && type == REG_RESOURCE_LIST)
1256  {
1257  if (valueDataLen > 0)
1258  {
1260  if (resourceValueData == NULL)
1261  {
1263  goto done;
1264  }
1265 
1266  lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)resourceValueData, &valueDataLen);
1267  if (lRet != ERROR_SUCCESS)
1268  {
1269  error(hwnd, IDS_BAD_VALUE, valueName);
1270  goto done;
1271  }
1272  }
1273  else
1274  {
1276  }
1277 
1279  {
1280  }
1281  }
1282  else if (EditBin == FALSE && type == REG_FULL_RESOURCE_DESCRIPTOR)
1283  {
1284  if (valueDataLen > 0)
1285  {
1287  if (resourceValueData == NULL)
1288  {
1290  goto done;
1291  }
1292 
1293  lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&resourceValueData->List[0], &valueDataLen);
1294  if (lRet != ERROR_SUCCESS)
1295  {
1296  error(hwnd, IDS_BAD_VALUE, valueName);
1297  goto done;
1298  }
1299 
1300  resourceValueData->Count = 1;
1301  fullResourceIndex = 0;
1302  }
1303  else
1304  {
1306  }
1307 
1309  {
1310  }
1311  }
1312  else if ((EditBin != FALSE) || (type == REG_NONE) || (type == REG_BINARY))
1313  {
1314  if(valueDataLen > 0)
1315  {
1317  {
1319  goto done;
1320  }
1321 
1322  /* Use the unicode version, so editing strings in binary mode is correct */
1323  lRet = RegQueryValueExW(hKey, valueName,
1324  0, 0, (LPBYTE)binValueData, &valueDataLen);
1325  if (lRet != ERROR_SUCCESS)
1326  {
1328  error(hwnd, IDS_BAD_VALUE, valueName);
1329  goto done;
1330  }
1331  }
1332  else
1333  {
1334  binValueData = NULL;
1335  }
1336 
1338  {
1339  /* Use the unicode version, so editing strings in binary mode is correct */
1340  lRet = RegSetValueExW(hKey, valueName,
1342  if (lRet == ERROR_SUCCESS)
1343  result = TRUE;
1344  }
1345  if(binValueData != NULL)
1347  }
1348  else
1349  {
1351  }
1352 
1353 done:
1354  if (resourceValueData)
1357 
1358  if (stringValueData)
1361 
1362  return result;
1363 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static INT_PTR CALLBACK modify_resource_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:918
void error(HWND hwnd, INT resId,...)
Definition: edit.c:42
#define IDOK
Definition: winuser.h:824
#define ERROR_SUCCESS
Definition: deptool.c:10
GLuint64EXT * result
Definition: glext.h:11304
#define IDD_EDIT_BIN_DATA
Definition: resource.h:258
CM_FULL_RESOURCE_DESCRIPTOR List[1]
Definition: hwresource.cpp:165
#define REG_BINARY
Definition: nt_native.h:1496
#define TRUE
Definition: types.h:120
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define IDD_EDIT_RESOURCE
Definition: resource.h:280
static INT fullResourceIndex
Definition: edit.c:38
#define IDD_EDIT_STRING
Definition: resource.h:249
INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:165
static const WCHAR * editValueName
Definition: edit.c:33
static DWORD valueDataLen
Definition: edit.c:39
static PVOID binValueData
Definition: edit.c:35
static INT_PTR CALLBACK modify_resource_list_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:1039
unsigned char * LPBYTE
Definition: typedefs.h:53
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define IDS_MULTI_SZ_EMPTY_STRING
Definition: resource.h:127
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define IDD_EDIT_RESOURCE_LIST
Definition: resource.h:276
#define REG_RESOURCE_LIST
Definition: nt_native.h:1502
#define REG_FULL_RESOURCE_DESCRIPTOR
Definition: nt_native.h:1503
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4374
static PCM_RESOURCE_LIST resourceValueData
Definition: edit.c:37
eMaj lines
Definition: tritemp.h:206
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define IDS_TOO_BIG_VALUE
Definition: resource.h:124
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
#define IDS_BAD_VALUE
Definition: resource.h:11
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum src
Definition: glext.h:6340
INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:96
INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:388
#define IDD_EDIT_MULTI_STRING
Definition: resource.h:257
FxAutoRegKey hKey
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define HeapReAlloc
Definition: compat.h:593
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define NULL
Definition: types.h:112
static WCHAR * stringValueData
Definition: edit.c:34
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define IDS_UNSUPPORTED_TYPE
Definition: resource.h:123
unsigned int ULONG
Definition: retypes.h:1
INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:274
static char * dest
Definition: rtl.c:135
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define REG_NONE
Definition: nt_native.h:1492
void warning(HWND hwnd, INT resId,...)
Definition: edit.c:73
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDD_EDIT_DWORD
Definition: resource.h:253
#define REG_DWORD
Definition: sdbapi.c:596
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594
static DWORD dwordValueData
Definition: edit.c:36
#define REG_SZ
Definition: layer.c:22

Referenced by _CmdWndProc().

◆ OnTreeExpanding()

BOOL OnTreeExpanding ( HWND  hWnd,
NMTREEVIEW pnmtv 
)

Definition at line 503 of file treeview.c.

504 {
505  DWORD dwCount, dwIndex, dwMaxSubKeyLen;
506  HKEY hRoot, hNewKey, hKey;
507  LPCWSTR keyPath;
508  LPWSTR Name;
509  LONG errCode;
510  HCURSOR hcursorOld;
511 
512  static int expanding;
513  if (expanding) return FALSE;
514  if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE )
515  {
516  return TRUE;
517  }
518  expanding = TRUE;
519  hcursorOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
520  SendMessageW(hwndTV, WM_SETREDRAW, FALSE, 0);
521 
522  keyPath = GetItemPath(hwndTV, pnmtv->itemNew.hItem, &hRoot);
523  if (!keyPath) goto done;
524 
525  if (*keyPath)
526  {
527  errCode = RegOpenKeyExW(hRoot, keyPath, 0, KEY_READ, &hNewKey);
528  if (errCode != ERROR_SUCCESS) goto done;
529  }
530  else
531  {
532  hNewKey = hRoot;
533  }
534 
535  errCode = RegQueryInfoKeyW(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
536  if (errCode != ERROR_SUCCESS) goto done;
537  dwMaxSubKeyLen++; /* account for the \0 terminator */
538  Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR));
539  if (!Name) goto done;
540 
541  for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
542  {
543  DWORD cName = dwMaxSubKeyLen, dwSubCount;
544 
545  errCode = RegEnumKeyExW(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
546  if (errCode != ERROR_SUCCESS) continue;
547  errCode = RegOpenKeyExW(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
548  if (errCode == ERROR_SUCCESS)
549  {
550  errCode = RegQueryInfoKeyW(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
551  RegCloseKey(hKey);
552  }
553  if (errCode != ERROR_SUCCESS) dwSubCount = 0;
554  AddEntryToTree(hwndTV, pnmtv->itemNew.hItem, Name, NULL, dwSubCount);
555  }
556 
557  SendMessageW(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM)pnmtv->itemNew.hItem);
558 
559  RegCloseKey(hNewKey);
561 
562 done:
563  SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0);
564  SetCursor(hcursorOld);
565  expanding = FALSE;
566 
567  return TRUE;
568 }
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TVM_SORTCHILDREN
Definition: commctrl.h:3537
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
#define WM_SETREDRAW
Definition: winuser.h:1598
#define TVIS_EXPANDEDONCE
Definition: commctrl.h:3281
HICON HCURSOR
Definition: windef.h:299
static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
Definition: treeview.c:110
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define FALSE
Definition: types.h:117
long LONG
Definition: pedump.c:60
static HTREEITEM hRoot
Definition: treeview.c:381
struct NameRec_ * Name
Definition: cdprocs.h:459
#define IDC_WAIT
Definition: winuser.h:684
LONG_PTR LPARAM
Definition: windef.h:208
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3686
#define LoadCursor
Definition: winuser.h:5787
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
FxAutoRegKey hKey
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
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:2527
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by TreeWndNotifyProc().

◆ QueryStringValue()

LONG QueryStringValue ( HKEY  hKey,
LPCWSTR  lpSubKey,
LPCWSTR  lpValueName,
LPWSTR  pszBuffer,
DWORD  dwBufferLen 
)

Definition at line 1554 of file edit.c.

1555 {
1556  LONG lResult;
1557  HKEY hSubKey = NULL;
1558  DWORD cbData, dwType;
1559 
1560  if (lpSubKey)
1561  {
1562  lResult = RegOpenKeyW(hKey, lpSubKey, &hSubKey);
1563  if (lResult != ERROR_SUCCESS)
1564  goto done;
1565  hKey = hSubKey;
1566  }
1567 
1568  cbData = (dwBufferLen - 1) * sizeof(*pszBuffer);
1569  lResult = RegQueryValueExW(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData);
1570  if (lResult != ERROR_SUCCESS)
1571  goto done;
1572  if (dwType != REG_SZ)
1573  {
1574  lResult = -1;
1575  goto done;
1576  }
1577 
1578  pszBuffer[cbData / sizeof(*pszBuffer)] = L'\0';
1579 
1580 done:
1581  if (lResult != ERROR_SUCCESS)
1582  pszBuffer[0] = L'\0';
1583  if (hSubKey)
1584  RegCloseKey(hSubKey);
1585  return lResult;
1586 }
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
long LONG
Definition: pedump.c:60
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
#define REG_SZ
Definition: layer.c:22

◆ RefreshListView()

BOOL RefreshListView ( HWND  hwndLV,
HKEY  hKey,
LPCWSTR  keyPath 
)

Definition at line 670 of file listview.c.

671 {
672  DWORD max_sub_key_len;
673  DWORD max_val_name_len;
674  DWORD max_val_size;
675  DWORD val_count;
676  HKEY hNewKey;
677  LONG errCode;
678  INT i, c;
679  BOOL AddedDefault = FALSE;
680 
681  if (!hwndLV) return FALSE;
682 
683  (void)ListView_EditLabel(hwndLV, -1);
684 
685  SendMessageW(hwndLV, WM_SETREDRAW, FALSE, 0);
686  DestroyListView(hwndLV);
687 
688  (void)ListView_DeleteAllItems(hwndLV);
689 
690  if(!hKey) return FALSE;
691 
692  errCode = RegOpenKeyExW(hKey, keyPath, 0, KEY_READ, &hNewKey);
693  if (errCode != ERROR_SUCCESS) return FALSE;
694 
695  /* get size information and resize the buffers if necessary */
696  errCode = RegQueryInfoKeyW(hNewKey, NULL, NULL, NULL, NULL, &max_sub_key_len, NULL,
697  &val_count, &max_val_name_len, &max_val_size, NULL, NULL);
698 
699  if (errCode == ERROR_SUCCESS)
700  {
701  WCHAR* ValName = HeapAlloc(GetProcessHeap(), 0, ++max_val_name_len * sizeof(WCHAR));
702  DWORD dwValNameLen = max_val_name_len;
703  BYTE* ValBuf = HeapAlloc(GetProcessHeap(), 0, max_val_size + sizeof(WCHAR));
704  DWORD dwValSize = max_val_size;
705  DWORD dwIndex = 0L;
706  DWORD dwValType;
707  /* if (RegQueryValueExW(hNewKey, NULL, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) { */
708  /* AddEntryToList(hwndLV, L"(Default)", dwValType, ValBuf, dwValSize); */
709  /* } */
710  /* dwValSize = max_val_size; */
711  while (RegEnumValueW(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS)
712  {
713  /* Add a terminating 0 character. Usually this is only necessary for strings. */
714  ValBuf[dwValSize] = ValBuf[dwValSize + 1] = 0;
715 
716  AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE);
717  dwValNameLen = max_val_name_len;
718  dwValSize = max_val_size;
719  dwValType = 0L;
720  ++dwIndex;
721  if(!wcscmp(ValName, L""))
722  {
723  AddedDefault = TRUE;
724  }
725  }
726  HeapFree(GetProcessHeap(), 0, ValBuf);
727  HeapFree(GetProcessHeap(), 0, ValName);
728  }
729  RegCloseKey(hNewKey);
730 
731  if(!AddedDefault)
732  {
733  AddEntryToList(hwndLV, L"", REG_SZ, NULL, 0, 0, FALSE);
734  }
735  c = ListView_GetItemCount(hwndLV);
736  for(i = 0; i < c; i++)
737  {
739  }
743  (void)ListView_Sort(hwndLV, g_iSortedColumn, -1);
744  SendMessageW(hwndLV, WM_SETREDRAW, TRUE, 0);
745 
746  return TRUE;
747 }
void DestroyListView(HWND hwndLV)
Definition: listview.c:653
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
INT iListViewSelect
Definition: listview.c:29
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
#define WM_SETREDRAW
Definition: winuser.h:1598
static void AddEntryToList(HWND hwndLV, LPWSTR Name, DWORD dwValType, void *ValBuf, DWORD dwCount, int Position, BOOL ValExists)
Definition: listview.c:125
int32_t INT
Definition: typedefs.h:58
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define FALSE
Definition: types.h:117
#define ListView_SetItemState(hwndLV, i, data, mask)
Definition: commctrl.h:2669
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2853
#define LVIS_SELECTED
Definition: commctrl.h:2315
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2303
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
const GLubyte * c
Definition: glext.h:8905
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3686
static const WCHAR L[]
Definition: oid.c:1250
unsigned char BYTE
Definition: xxhash.c:193
static INT g_iSortedColumn
Definition: listview.c:49
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static BOOL ListView_Sort(HWND hListView, int iSortingColumn, int iSortedColumn)
Definition: listview.c:479
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
FxAutoRegKey hKey
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
#define c
Definition: ke_i.h:80
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define HeapFree(x, y, z)
Definition: compat.h:594
#define LVIS_FOCUSED
Definition: commctrl.h:2314
#define ListView_EditLabel(hwndLV, i)
Definition: commctrl.h:2536
#define ListView_DeleteAllItems(hwnd)
Definition: commctrl.h:2410
#define REG_SZ
Definition: layer.c:22

Referenced by _CmdWndProc(), CreateNewValue(), ImportRegistryFile(), LoadHive(), UnloadHive(), and UpdateAddress().

◆ RefreshTreeItem()

BOOL RefreshTreeItem ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 136 of file treeview.c.

137 {
138  HKEY hRoot, hKey, hSubKey;
139  HTREEITEM childItem;
140  LPCWSTR KeyPath;
141  DWORD dwCount, dwIndex, dwMaxSubKeyLen;
142  LPWSTR Name = NULL;
143  TVITEMW tvItem;
144  LPWSTR pszNodes = NULL;
145  BOOL bSuccess = FALSE;
146  LPWSTR s;
147  BOOL bAddedAny;
148 
149  KeyPath = GetItemPath(hwndTV, hItem, &hRoot);
150 
151  if (*KeyPath)
152  {
153  if (RegOpenKeyExW(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
154  {
155  goto done;
156  }
157  }
158  else
159  {
160  hKey = hRoot;
161  }
162 
163  if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
164  {
165  goto done;
166  }
167 
168  /* Set the number of children again */
169  tvItem.mask = TVIF_CHILDREN;
170  tvItem.hItem = hItem;
171  tvItem.cChildren = dwCount;
172  if (!TreeView_SetItem(hwndTV, &tvItem))
173  {
174  goto done;
175  }
176 
177  /* We don't have to bother with the rest if it's not expanded. */
178  if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0)
179  {
180  RegCloseKey(hKey);
181  bSuccess = TRUE;
182  goto done;
183  }
184 
185  dwMaxSubKeyLen++; /* account for the \0 terminator */
186  if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR))))
187  {
188  goto done;
189  }
190  tvItem.cchTextMax = dwMaxSubKeyLen;
191  /*if (!(tvItem.pszText = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)))) {
192  goto done;
193  }*/
194 
195  /* Get all of the tree node siblings in one contiguous block of memory */
196  {
197  DWORD dwPhysicalSize = 0;
198  DWORD dwActualSize = 0;
199  DWORD dwNewPhysicalSize;
200  LPWSTR pszNewNodes;
201  DWORD dwStep = 10000;
202 
203  for (childItem = TreeView_GetChild(hwndTV, hItem); childItem;
204  childItem = TreeView_GetNextSibling(hwndTV, childItem))
205  {
206 
207  if (dwActualSize + dwMaxSubKeyLen + 1 > dwPhysicalSize)
208  {
209  dwNewPhysicalSize = dwActualSize + dwMaxSubKeyLen + 1 + dwStep;
210 
211  if (pszNodes)
212  pszNewNodes = (LPWSTR) HeapReAlloc(GetProcessHeap(), 0, pszNodes, dwNewPhysicalSize * sizeof(WCHAR));
213  else
214  pszNewNodes = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, dwNewPhysicalSize * sizeof(WCHAR));
215  if (!pszNewNodes)
216  goto done;
217 
218  dwPhysicalSize = dwNewPhysicalSize;
219  pszNodes = pszNewNodes;
220  }
221 
222  tvItem.mask = TVIF_TEXT;
223  tvItem.hItem = childItem;
224  tvItem.pszText = &pszNodes[dwActualSize];
225  tvItem.cchTextMax = dwPhysicalSize - dwActualSize;
226  if (!TreeView_GetItem(hwndTV, &tvItem))
227  goto done;
228 
229  dwActualSize += (DWORD) wcslen(&pszNodes[dwActualSize]) + 1;
230  }
231 
232  if (pszNodes)
233  pszNodes[dwActualSize] = L'\0';
234  }
235 
236  /* Now go through all the children in the tree, and check if any have to be removed. */
237  childItem = TreeView_GetChild(hwndTV, hItem);
238  while (childItem)
239  {
240  HTREEITEM nextItem = TreeView_GetNextSibling(hwndTV, childItem);
241  if (RefreshTreeItem(hwndTV, childItem) == FALSE)
242  {
243  (void)TreeView_DeleteItem(hwndTV, childItem);
244  }
245  childItem = nextItem;
246  }
247 
248  /* Now go through all the children in the registry, and check if any have to be added. */
249  bAddedAny = FALSE;
250  for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
251  {
252  DWORD cName = dwMaxSubKeyLen, dwSubCount;
253  BOOL found;
254 
255  found = FALSE;
256  if (RegEnumKeyExW(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS)
257  {
258  continue;
259  }
260 
261  /* Check if the node is already in there. */
262  if (pszNodes)
263  {
264  for (s = pszNodes; *s; s += wcslen(s) + 1)
265  {
266  if (!wcscmp(s, Name))
267  {
268  found = TRUE;
269  break;
270  }
271  }
272  }
273 
274  if (found == FALSE)
275  {
276  /* Find the number of children of the node. */
277  dwSubCount = 0;
278  if (RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
279  {
280  if (RegQueryInfoKeyW(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
281  {
282  dwSubCount = 0;
283  }
284  RegCloseKey(hSubKey);
285  }
286 
287  AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount);
288  bAddedAny = TRUE;
289  }
290  }
291  RegCloseKey(hKey);
292 
293  if (bAddedAny)
294  SendMessageW(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM) hItem);
295 
296  bSuccess = TRUE;
297 
298 done:
299  if (pszNodes)
300  HeapFree(GetProcessHeap(), 0, pszNodes);
301  if (Name)
303  return bSuccess;
304 }
int cchTextMax
Definition: commctrl.h:3317
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TVM_SORTCHILDREN
Definition: commctrl.h:3537
#define KEY_READ
Definition: nt_native.h:1023
#define TRUE
Definition: types.h:120
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3462
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3463
UINT mask
Definition: commctrl.h:3312
LPWSTR pszText
Definition: commctrl.h:3316
#define DWORD
Definition: nt_native.h:44
static BOOLEAN bSuccess
Definition: drive.cpp:419
static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
Definition: treeview.c:110
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define TVIF_CHILDREN
Definition: commctrl.h:3268
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static HTREEITEM hRoot
Definition: treeview.c:381
HTREEITEM hItem
Definition: treelist.h:37
LONG_PTR LPARAM
Definition: windef.h:208
int cChildren
Definition: commctrl.h:3320
#define TreeView_DeleteItem(hwnd, hitem)
Definition: commctrl.h:3411
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TreeView_GetItemState(hwndTV, hti, mask)
Definition: commctrl.h:3591
BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
Definition: treeview.c:136
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3686
static const WCHAR L[]
Definition: oid.c:1250
GLdouble s
Definition: gl.h:2039
#define TVIS_EXPANDED
Definition: commctrl.h:3280
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define TVIF_TEXT
Definition: commctrl.h:3262
FxAutoRegKey hKey
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HeapReAlloc
Definition: compat.h:593
#define NULL
Definition: types.h:112
HTREEITEM hItem
Definition: commctrl.h:3313
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3493
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
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:2527
WCHAR * LPWSTR
Definition: xmlstorage.h:184
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3486

Referenced by RefreshTreeView().

◆ RefreshTreeView()

BOOL RefreshTreeView ( HWND  hWndTV)

Definition at line 306 of file treeview.c.

307 {
309  HTREEITEM hSelectedItem;
310  HCURSOR hcursorOld;
311 
312  hSelectedItem = TreeView_GetSelection(hwndTV);
313  hcursorOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
314  SendMessageW(hwndTV, WM_SETREDRAW, FALSE, 0);
315 
316  hItem = TreeView_GetChild(hwndTV, TreeView_GetRoot(hwndTV));
317  while (hItem)
318  {
319  RefreshTreeItem(hwndTV, hItem);
321  }
322 
323  SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0);
324  SetCursor(hcursorOld);
325 
326  /* We reselect the currently selected node, this will prompt a refresh of the listview. */
327  (void)TreeView_SelectItem(hwndTV, hSelectedItem);
328  return TRUE;
329 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
#define TRUE
Definition: types.h:120
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3462
#define WM_SETREDRAW
Definition: winuser.h:1598
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3463
HICON HCURSOR
Definition: windef.h:299
#define FALSE
Definition: types.h:117
HTREEITEM hItem
Definition: treelist.h:37
#define IDC_WAIT
Definition: winuser.h:684
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3469
BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
Definition: treeview.c:136
#define LoadCursor
Definition: winuser.h:5787
#define TreeView_GetRoot(hwnd)
Definition: commctrl.h:3471
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3477
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112

Referenced by _CmdWndProc(), ImportRegistryFile(), LoadHive(), and UnloadHive().

◆ RegKeyEditPermissions()

BOOL RegKeyEditPermissions ( HWND  hWndOwner,
HKEY  hKey,
LPCWSTR  lpMachine,
LPCWSTR  lpKeyName 
)

Definition at line 839 of file security.c.

843 {
844  BOOL Result = FALSE;
845  LPCWSTR lphKey = NULL;
846  LPWSTR lpKeyPath = NULL;
847  PCRegKeySecurity RegKeySecurity;
848  SI_OBJECT_INFO ObjectInfo;
849  size_t lnMachine = 0, lnKeyName = 0;
850 
851  if (pfnEditSecurity == NULL)
852  {
853  return FALSE;
854  }
855 
856  if (lpMachine != NULL)
857  lnMachine = wcslen(lpMachine);
858  if (lpKeyName != NULL)
859  lnKeyName = wcslen(lpKeyName);
860 
861  /* build registry path */
862  if (lpMachine != NULL &&
863  (lpMachine[0] == L'\0' ||
864  (lpMachine[0] == L'.' && lpMachine[1] == L'.')))
865  {
866  lnMachine = 0;
867  }
868 
869  if (hKey == HKEY_CLASSES_ROOT)
870  lphKey = L"CLASSES_ROOT";
871  else if (hKey == HKEY_CURRENT_USER)
872  lphKey = L"CURRENT_USER";
873  else if (hKey == HKEY_LOCAL_MACHINE)
874  lphKey = L"MACHINE";
875  else if (hKey == HKEY_USERS)
876  lphKey = L"USERS";
877  else if (hKey == HKEY_CURRENT_CONFIG)
878  lphKey = L"CONFIG";
879  else
880  goto Cleanup;
881 
882  lpKeyPath = HeapAlloc(GetProcessHeap(),
883  0,
884  (2 + lnMachine + 1 + wcslen(lphKey) + 1 + lnKeyName) * sizeof(WCHAR));
885  if (lpKeyPath == NULL)
886  {
888  goto Cleanup;
889  }
890  lpKeyPath[0] = L'\0';
891 
892  if (lnMachine != 0)
893  {
894  wcscat(lpKeyPath,
895  L"\\\\");
896  wcscat(lpKeyPath,
897  lpMachine);
898  wcscat(lpKeyPath,
899  L"\\");
900  }
901 
902  wcscat(lpKeyPath,
903  lphKey);
904  if (lpKeyName != NULL && lpKeyName[0] != L'\0')
905  {
906  if (lpKeyName[0] != L'\\')
907  {
908  wcscat(lpKeyPath,
909  L"\\");
910  }
911 
912  wcscat(lpKeyPath,
913  lpKeyName);
914  }
915 
918  ObjectInfo.hInstance = hInst;
919  ObjectInfo.pszServerName = (LPWSTR)lpMachine;
920  ObjectInfo.pszObjectName = (LPWSTR)lpKeyName; /* FIXME */
921  ObjectInfo.pszPageTitle = (LPWSTR)lpKeyName; /* FIXME */
922 
923  if (!(RegKeySecurity = CRegKeySecurity_fnConstructor(lpKeyPath,
924  hKey,
925  &ObjectInfo,
926  &Result)))
927  {
928  goto Cleanup;
929  }
930 
931  /* display the security editor dialog */
932  pfnEditSecurity(hWndOwner,
933  impl_to_interface(RegKeySecurity,
934  ISecurityInformation));
935 
936  /* dereference the interface, it should be destroyed here */
937  CRegKeySecurity_fnRelease(RegKeySecurity);
938 
939 Cleanup:
940  if (lpKeyPath != NULL)
941  {
943  0,
944  lpKeyPath);
945  }
946 
947  return Result;
948 }
#define HKEY_USERS
Definition: winreg.h:13
LPWSTR pszServerName
Definition: accctrl.h:390
#define SI_CONTAINER
Definition: accctrl.h:116
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define impl_to_interface(impl, iface)
Definition: security.c:76
#define SI_RESET_SACL_TREE
Definition: accctrl.h:128
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define SI_EDIT_ALL
Definition: accctrl.h:136
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define SI_EDIT_PERMS
Definition: accctrl.h:113
LPWSTR pszPageTitle
Definition: accctrl.h:392
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define SI_ADVANCED
Definition: accctrl.h:118
#define FALSE
Definition: types.h:117
DWORD dwFlags
Definition: accctrl.h:388
unsigned int BOOL
Definition: ntddk_ex.h:94
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
LPWSTR pszObjectName
Definition: accctrl.h:391
#define SI_RESET_DACL_TREE
Definition: accctrl.h:127
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static __inline ULONG CRegKeySecurity_fnRelease(PCRegKeySecurity obj)
Definition: security.c:85
#define SetLastError(x)
Definition: compat.h:611
HINSTANCE hInstance
Definition: accctrl.h:389
static const WCHAR L[]
Definition: oid.c:1250
static const WCHAR Cleanup[]
Definition: register.c:80
HINSTANCE hInst
Definition: dxdiag.c:13
#define SI_EDIT_EFFECTIVE
Definition: accctrl.h:130
FxAutoRegKey hKey
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define NULL
Definition: types.h:112
#define SI_OWNER_RECURSE
Definition: accctrl.h:122
static PCRegKeySecurity CRegKeySecurity_fnConstructor(LPWSTR lpRegKey, HKEY hRootKey, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
Definition: security.c:762
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static PEDITSECURITY pfnEditSecurity
Definition: security.c:807
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by _CmdWndProc().

◆ RenameKey()

LONG RenameKey ( HKEY  hKey,
LPCWSTR  lpSubKey,
LPCWSTR  lpNewName 
)

Definition at line 1489 of file edit.c.

1490 {
1491  LPCWSTR s;
1492  LPWSTR lpNewSubKey = NULL;
1493  LONG Ret = 0;
1494 
1495  if (!lpSubKey)
1496  return Ret;
1497 
1498  s = wcsrchr(lpSubKey, L'\\');
1499  if (s)
1500  {
1501  s++;
1502  lpNewSubKey = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, (s - lpSubKey + wcslen(lpNewName) + 1) * sizeof(WCHAR));
1503  if (lpNewSubKey != NULL)
1504  {
1505  memcpy(lpNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(WCHAR));
1506  wcscpy(lpNewSubKey + (s - lpSubKey), lpNewName);
1507  lpNewName = lpNewSubKey;
1508  }
1509  else
1510  return ERROR_NOT_ENOUGH_MEMORY;
1511  }
1512 
1513  Ret = MoveKey(hKey, lpNewName, hKey, lpSubKey);
1514 
1515  if (lpNewSubKey)
1516  {
1517  HeapFree(GetProcessHeap(), 0, lpNewSubKey);
1518  }
1519  return Ret;
1520 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
long LONG
Definition: pedump.c:60
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLdouble s
Definition: gl.h:2039
#define wcsrchr
Definition: compat.h:16
static LONG MoveKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR lpSrcSubKey)
Definition: edit.c:1436
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by TreeWndNotifyProc().

◆ RenameValue()

LONG RenameValue ( HKEY  hKey,
LPCWSTR  lpSubKey,
LPCWSTR  lpDestValue,
LPCWSTR  lpSrcValue 
)

Definition at line 1522 of file edit.c.

1523 {
1524  LONG lResult;
1525  HKEY hSubKey = NULL;
1526  DWORD dwType, cbData;
1527  BYTE data[512];
1528 
1529  if (lpSubKey)
1530  {
1531  lResult = RegOpenKeyW(