ReactOS 0.4.15-dev-8408-g466a198
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 ARRAY_SIZE(A)   (sizeof(A)/sizeof(*A))
 
#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
 
#define KEY_MAX_LEN   1024
 
#define REG_FORMAT_5   1
 
#define REG_FORMAT_4   2
 

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, BOOL bSelectNone)
 
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)
 
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)
 
void FindNextMessageBox (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, BOOL bSelectNone)
 
WCHARGetValueName (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)
 
void WINAPIV output_message (unsigned int id,...)
 
void WINAPIV error_exit (unsigned int id,...)
 
charGetMultiByteString (const WCHAR *strW)
 
BOOL import_registry_file (FILE *reg_file)
 
void delete_registry_key (WCHAR *reg_key_name)
 
BOOL export_registry_key (WCHAR *file_name, WCHAR *path, DWORD format)
 
BOOL RegKeyEditPermissions (HWND hWndOwner, HKEY hKey, LPCWSTR lpMachine, LPCWSTR lpKeyName)
 
void LoadSettings (void)
 
void SaveSettings (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 txt_export_registry_key (LPCWSTR file_name, LPCWSTR path)
 

Variables

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

Macro Definition Documentation

◆ ARRAY_SIZE

#define ARRAY_SIZE (   A)    (sizeof(A)/sizeof(*A))

Definition at line 33 of file main.h.

◆ KEY_MAX_LEN

#define KEY_MAX_LEN   1024

Definition at line 42 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.

◆ REG_FORMAT_4

#define REG_FORMAT_4   2

Definition at line 45 of file main.h.

◆ REG_FORMAT_5

#define REG_FORMAT_5   1

Definition at line 44 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 49 of file main.h.

50{
58};
@ OPTIONS_VIEW_DATA_ONLY
Definition: main.h:57
@ OPTIONS_DISPLAY_BINARY_DATA
Definition: main.h:55
@ OPTIONS_AUTO_REFRESH
Definition: main.h:51
@ OPTIONS_CONFIRM_ON_DELETE
Definition: main.h:53
@ OPTIONS_READ_ONLY_MODE
Definition: main.h:52
@ OPTIONS_VIEW_TREE_ONLY
Definition: main.h:56
@ OPTIONS_SAVE_ON_EXIT
Definition: main.h:54

Function Documentation

◆ ChildWndProc()

LRESULT CALLBACK ChildWndProc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 387 of file childwnd.c.

388{
389 BOOL Result;
390 RECT rc;
391
392 switch (message)
393 {
394 case WM_CREATE:
395 {
396 WNDPROC oldproc;
397 HFONT hFont;
399 DWORD style;
400 IAutoComplete *pAutoComplete;
401
402 /* Load "My Computer" string */
404
406 if (!g_pChildWnd) return 0;
407
409 g_pChildWnd->nSplitPos = 190;
411
415 hWnd, (HMENU)0, hInst, 0);
416
419 g_pChildWnd->hAddressBtnWnd = CreateWindowExW(0, L"Button", L"\x00BB", style,
421 hWnd, (HMENU)0, hInst, 0);
423 IMAGE_ICON, 12, 12, 0);
425
426 if (SUCCEEDED(CoCreateInstance(&CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, &IID_IAutoComplete, (void**)&pAutoComplete)))
427 {
428 IAutoComplete_Init(pAutoComplete, g_pChildWnd->hAddressBarWnd, (IUnknown*)&g_DummyEnumStrings, NULL, NULL);
429 IAutoComplete_Release(pAutoComplete);
430 }
431
432 GetClientRect(hWnd, &rc);
436
437 /* set the address bar and button font */
439 {
443 (WPARAM)hFont,
444 0);
447 (WPARAM)hFont,
448 0);
449 }
450 /* Subclass the AddressBar */
454 break;
455 }
456 case WM_COMMAND:
457 if(HIWORD(wParam) == BN_CLICKED)
458 {
460 }
461 break; //goto def;
462 case WM_SETCURSOR:
463 if (LOWORD(lParam) == HTCLIENT)
464 {
465 POINT pt;
469 {
471 return TRUE;
472 }
473 }
474 goto def;
475
476 case WM_DESTROY:
484 break;
485
486 case WM_LBUTTONDOWN:
487 {
488 INT x = (SHORT)LOWORD(lParam);
489 if (x >= g_pChildWnd->nSplitPos - SPLIT_WIDTH / 2 &&
490 x < g_pChildWnd->nSplitPos + SPLIT_WIDTH / 2 + 1)
491 {
494 last_split = x;
496 }
497 break;
498 }
499
500 case WM_LBUTTONUP:
501 case WM_RBUTTONDOWN:
502 if (GetCapture() == hWnd)
503 {
504 INT x = (SHORT)LOWORD(lParam);
507 }
508 break;
509
511 if (GetCapture() == hWnd && last_split >= 0)
513 break;
514
515 case WM_KEYDOWN:
516 if (wParam == VK_ESCAPE)
517 if (GetCapture() == hWnd)
518 {
519 RECT rt;
521 GetClientRect(hWnd, &rt);
522 ResizeWnd(rt.right, rt.bottom);
523 last_split = -1;
526 }
527 break;
528
529 case WM_MOUSEMOVE:
530 if (GetCapture() == hWnd)
531 {
532 INT x = (SHORT)LOWORD(lParam);
534 if (last_split != x)
535 {
537 last_split = x;
539 }
540 }
541 break;
542
543 case WM_SETFOCUS:
544 if (g_pChildWnd != NULL)
545 {
547 }
548 break;
549
550 case WM_NOTIFY:
551 if (g_pChildWnd == NULL) break;
552
553 if (((LPNMHDR)lParam)->idFrom == TREE_WINDOW)
554 {
556 {
557 goto def;
558 }
559
560 return Result;
561 }
562 else
563 {
564 if (((LPNMHDR)lParam)->idFrom == LIST_WINDOW)
565 {
567 {
568 goto def;
569 }
570
571 return Result;
572 }
573 else
574 {
575 goto def;
576 }
577 }
578 break;
579
580 case WM_CONTEXTMENU:
581 {
582 POINT pt;
584 {
585 int i, cnt;
586 BOOL IsDefault;
587 pt.x = (short) LOWORD(lParam);
588 pt.y = (short) HIWORD(lParam);
591 if (pt.x == -1 && pt.y == -1)
592 {
593 RECT rc;
594 if (i != -1)
595 {
596 rc.left = LVIR_BOUNDS;
598 pt.x = rc.left + 8;
599 pt.y = rc.top + 8;
600 }
601 else
602 pt.x = pt.y = 0;
604 }
605 if(i == -1)
606 {
608 }
609 else
610 {
613 IsDefault = IsDefaultValue(g_pChildWnd->hListWnd, i);
614 if(cnt == 1)
616 else
620
622 }
623 }
624 else if ((HWND)wParam == g_pChildWnd->hTreeWnd)
625 {
626 TVHITTESTINFO hti;
627 HMENU hContextMenu;
629 MENUITEMINFOW mii;
630 WCHAR resource[256];
631 WCHAR buffer[256];
632 LPWSTR s;
633 LPCWSTR keyPath;
634 HKEY hRootKey;
635 int iLastPos;
636 WORD wID;
637 BOOL isRoot;
638
639 pt.x = (short) LOWORD(lParam);
640 pt.y = (short) HIWORD(lParam);
641
642 if (pt.x == -1 && pt.y == -1)
643 {
644 RECT rc;
646 if (hti.hItem != NULL)
647 {
649 pt.x = rc.left + 8;
650 pt.y = rc.top + 8;
652 hti.flags = TVHT_ONITEM;
653 }
654 else
655 hti.flags = 0;
656 }
657 else
658 {
659 hti.pt.x = pt.x;
660 hti.pt.y = pt.y;
663 }
664
665 if (hti.flags & TVHT_ONITEM)
666 {
668
669 isRoot = (TreeView_GetParent(g_pChildWnd->hTreeWnd, hti.hItem) == NULL);
670 hContextMenu = GetSubMenu(hPopupMenus, isRoot ? PM_ROOTITEM : PM_TREECONTEXT);
671
672 memset(&item, 0, sizeof(item));
674 item.hItem = hti.hItem;
676
677 /* Set the Expand/Collapse menu item appropriately */
679 memset(&mii, 0, sizeof(mii));
680 mii.cbSize = sizeof(mii);
682 mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
684 mii.dwTypeData = (LPWSTR) buffer;
685 SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
686
687 if (isRoot == FALSE)
688 {
689 /* Remove any existing suggestions */
690 memset(&mii, 0, sizeof(mii));
691 mii.cbSize = sizeof(mii);
692 mii.fMask = MIIM_ID;
693 GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
694 if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
695 {
696 do
697 {
698 iLastPos = GetMenuItemCount(hContextMenu) - 1;
699 GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
700 RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
701 }
702 while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
703 }
704
705 /* Come up with suggestions */
706 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, NULL, &hRootKey);
707 SuggestKeys(hRootKey, keyPath, Suggestions, ARRAY_SIZE(Suggestions));
708 if (Suggestions[0])
709 {
710 AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
711
713
714 s = Suggestions;
716 while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
717 {
718 WCHAR *path = s, buf[MAX_PATH];
719 if (hRootKey == HKEY_CURRENT_USER || hRootKey == HKEY_LOCAL_MACHINE)
720 {
721 // Windows 10 only displays the root name
723 if (next > s)
724 lstrcpynW(path = buf, s, min(next - s, _countof(buf)));
725 }
727
728 memset(&mii, 0, sizeof(mii));
729 mii.cbSize = sizeof(mii);
730 mii.fMask = MIIM_STRING | MIIM_ID;
731 mii.wID = wID++;
732 mii.dwTypeData = buffer;
733 InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
734
735 s += wcslen(s) + 1;
736 }
737 }
738 }
739 TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
740 }
741 }
742 break;
743 }
744
745 case WM_SIZE:
747 {
749 }
750 break;
751
752 default:
753def:
755 }
756 return 0;
757}
Arabic default style
Definition: afstyles.h:94
HWND hWnd
Definition: settings.c:17
BOOL CreateListView(PMAIN_WND_INFO Info)
Definition: listview.c:355
static void finish_splitbar(HWND hWnd, int x)
Definition: childwnd.c:190
static int last_split
Definition: childwnd.c:27
static void draw_splitbar(HWND hWnd, int x)
Definition: childwnd.c:160
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:295
struct DummyEnumStrings g_DummyEnumStrings
ChildWnd * g_pChildWnd
Definition: childwnd.c:26
static INT ClampSplitBarX(HWND hWnd, INT x)
Definition: childwnd.c:101
WCHAR Suggestions[256]
Definition: childwnd.c:30
static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions, size_t iSuggestionsLength)
Definition: childwnd.c:210
void ResizeWnd(int cx, int cy)
Definition: childwnd.c:108
BOOL IsDefaultValue(HWND hwndLV, int i)
Definition: listview.c:108
BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: listview.c:544
void DestroyListView(HWND hwndLV)
Definition: listview.c:654
HMENU hPopupMenus
Definition: main.c:38
HWND hFrameWnd
Definition: main.c:35
void DestroyMainMenu()
Definition: main.c:164
HFONT hFont
Definition: main.c:53
HWND CreateTreeView(HWND hwndParent, LPWSTR pHostName, HMENU id)
Definition: treeview.c:754
#define PM_TREECONTEXT
Definition: main.h:37
#define ARRAY_SIZE(A)
Definition: main.h:33
#define LIST_WINDOW
Definition: main.h:28
BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: treeview.c:643
#define TREE_WINDOW
Definition: main.h:27
#define PM_NEW
Definition: main.h:36
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:88
#define PM_ROOTITEM
Definition: main.h:38
#define PM_MODIFYVALUE
Definition: main.h:35
#define ID_TREE_SUGGESTION_MIN
Definition: resource.h:156
#define IDS_MY_COMPUTER
Definition: resource.h:129
#define IDS_COLLAPSE
Definition: resource.h:191
#define IDI_ARROW
Definition: resource.h:37
#define ID_EDIT_MODIFY
Definition: resource.h:62
#define ID_TREE_EXPANDBRANCH
Definition: resource.h:93
#define ID_TREE_COLLAPSEBRANCH
Definition: resource.h:95
#define IDS_GOTO_SUGGESTED_KEY
Definition: resource.h:194
#define ID_EDIT_MODIFY_BIN
Definition: resource.h:122
#define IDS_EXPAND
Definition: resource.h:190
#define ID_TREE_SUGGESTION_MAX
Definition: resource.h:157
#define ID_EDIT_RENAME
Definition: resource.h:58
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrcpynW
Definition: compat.h:738
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR lpszPath)
Definition: path.c:2579
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define pt(x, y)
Definition: drawing.c:79
HINSTANCE hInst
Definition: dxdiag.c:13
#define SPLIT_WIDTH
Definition: eventvwr.c:45
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble s
Definition: gl.h:2039
GLuint buffer
Definition: glext.h:5915
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
static HICON
Definition: imagelist.c:84
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static ATOM item
Definition: dde.c:856
#define min(a, b)
Definition: monoChain.cc:55
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
static VOID DestroyTreeView(HWND hTreeView)
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3481
#define TVHT_ONITEM
Definition: commctrl.h:3527
#define LVNI_SELECTED
Definition: commctrl.h:2424
#define LVNI_FOCUSED
Definition: commctrl.h:2423
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3469
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2434
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3473
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3490
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3429
#define ListView_GetSelectedCount(hwndLV)
Definition: commctrl.h:2709
#define LVM_GETITEMRECT
Definition: commctrl.h:2477
#define TVIS_EXPANDED
Definition: commctrl.h:3284
#define TVIF_CHILDREN
Definition: commctrl.h:3272
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3513
#define TVIF_STATE
Definition: commctrl.h:3269
#define LVIR_BOUNDS
Definition: commctrl.h:2472
static unsigned __int64 next
Definition: rand_nt.c:6
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
#define memset(x, y, z)
Definition: compat.h:39
#define _countof(array)
Definition: sndvol32.h:70
Definition: main.h:61
int nSplitPos
Definition: main.h:69
WCHAR szPath[MAX_PATH]
Definition: main.h:71
HWND hAddressBtnWnd
Definition: main.h:66
int nFocusPanel
Definition: main.h:68
HICON hArrowIcon
Definition: main.h:67
HWND hTreeWnd
Definition: main.h:63
HWND hListWnd
Definition: main.h:64
HWND hAddressBarWnd
Definition: main.h:65
HWND hWnd
Definition: main.h:62
Definition: tftpd.h:60
LPWSTR dwTypeData
Definition: winuser.h:3269
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
HTREEITEM hItem
Definition: commctrl.h:3521
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
uint32_t DWORD_PTR
Definition: typedefs.h:65
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define MF_BYCOMMAND
Definition: winuser.h:202
#define MIIM_STRING
Definition: winuser.h:727
#define MIIM_ID
Definition: winuser.h:722
#define WM_KEYUP
Definition: winuser.h:1716
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IMAGE_ICON
Definition: winuser.h:212
#define AppendMenu
Definition: winuser.h:5740
#define WM_CAPTURECHANGED
Definition: winuser.h:1808
#define TPM_RIGHTBUTTON
Definition: winuser.h:2380
#define WM_CREATE
Definition: winuser.h:1608
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define BS_ICON
Definition: winuser.h:264
#define WM_SIZE
Definition: winuser.h:1611
#define WM_COMMAND
Definition: winuser.h:1740
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2247
#define IDC_ARROW
Definition: winuser.h:687
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2714
#define InsertMenuItem
Definition: winuser.h:5813
#define WM_SETFOCUS
Definition: winuser.h:1613
#define SetMenuItemInfo
Definition: winuser.h:5859
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1775
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define SIZE_MINIMIZED
Definition: winuser.h:2506
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2149
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define MIIM_STATE
Definition: winuser.h:721
#define MFS_DEFAULT
Definition: winuser.h:748
#define BM_SETIMAGE
Definition: winuser.h:1922
#define WM_RBUTTONDOWN
Definition: winuser.h:1779
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define VK_RETURN
Definition: winuser.h:2201
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
#define MF_ENABLED
Definition: winuser.h:128
#define MFS_GRAYED
Definition: winuser.h:751
#define MF_SEPARATOR
Definition: winuser.h:137
#define BS_FLAT
Definition: winuser.h:280
#define WM_SETFONT
Definition: winuser.h:1650
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 MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define HTCLIENT
Definition: winuser.h:2475
#define BS_VCENTER
Definition: winuser.h:279
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define CW_USEDEFAULT
Definition: winuser.h:225
#define WM_SETCURSOR
Definition: winuser.h:1636
#define BN_CLICKED
Definition: winuser.h:1925
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_DESTROY
Definition: winuser.h:1609
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define WM_KEYDOWN
Definition: winuser.h:1715
#define BS_CENTER
Definition: winuser.h:260
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
#define IDC_SIZEWE
Definition: winuser.h:694
#define GetMenuItemInfo
Definition: winuser.h:5797
#define VK_ESCAPE
Definition: winuser.h:2214
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2097
#define MF_GRAYED
Definition: winuser.h:129
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define MF_DISABLED
Definition: winuser.h:130
_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:409
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

◆ CopyKeyName()

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

Definition at line 910 of file framewnd.c.

911{
912 BOOL bClipboardOpened = FALSE;
914 WCHAR szBuffer[512];
915 HGLOBAL hGlobal;
916 LPWSTR s;
917 SIZE_T cbGlobal;
918
919 if (!OpenClipboard(hWnd))
920 goto done;
921 bClipboardOpened = TRUE;
922
923 if (!EmptyClipboard())
924 goto done;
925
926 if (!GetKeyName(szBuffer, ARRAY_SIZE(szBuffer), hRootKey, keyName))
927 goto done;
928
929 cbGlobal = (wcslen(szBuffer) + 1) * sizeof(WCHAR);
930 hGlobal = GlobalAlloc(GMEM_MOVEABLE, cbGlobal);
931 if (!hGlobal)
932 goto done;
933
934 s = GlobalLock(hGlobal);
935 StringCbCopyW(s, cbGlobal, szBuffer);
936 GlobalUnlock(hGlobal);
937
939 bSuccess = TRUE;
940
941done:
942 if (bClipboardOpened)
944 return bSuccess;
945}
#define CF_UNICODETEXT
Definition: constants.h:408
BOOL GetKeyName(LPWSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCWSTR lpSubKey)
Definition: edit.c:2094
static BOOLEAN bSuccess
Definition: drive.cpp:477
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define GMEM_MOVEABLE
Definition: winbase.h:294
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
BOOL WINAPI EmptyClipboard(void)
Definition: ntwrapper.h:190

Referenced by _CmdWndProc().

◆ CreateListView()

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

Definition at line 631 of file listview.c.

632{
633 RECT rcClient;
634 HWND hwndLV;
635
636 /* Get the dimensions of the parent window's client area, and create the list view control. */
637 GetClientRect(hwndParent, &rcClient);
638 hwndLV = CreateWindowExW(WS_EX_CLIENTEDGE, WC_LISTVIEW, L"List View",
640 0, 0, rcClient.right, rcClient.bottom,
641 hwndParent, id, hInst, NULL);
642 if (!hwndLV) return NULL;
643
644 /* Initialize the image list, and add items to the control. */
645 if (!CreateListColumns(hwndLV, cx)) goto fail;
646 if (!InitListViewImageLists(hwndLV)) goto fail;
647
648 return hwndLV;
649fail:
650 DestroyWindow(hwndLV);
651 return NULL;
652}
static BOOL CreateListColumns(HWND hWndListView, INT cxTotal)
Definition: listview.c:259
static BOOL InitListViewImageLists(HWND hwndLV)
Definition: listview.c:281
static HWND hwndParent
Definition: cryptui.c:300
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2267
#define LVS_REPORT
Definition: commctrl.h:2262
_Out_opt_ int * cx
Definition: commctrl.h:585
#define WC_LISTVIEW
Definition: commctrl.h:2259
#define LVS_EDITLABELS
Definition: commctrl.h:2273
BOOL WINAPI DestroyWindow(_In_ HWND)

◆ CreateNewKey()

BOOL CreateNewKey ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 584 of file treeview.c.

585{
586 WCHAR szNewKeyFormat[128];
587 WCHAR szNewKey[128];
588 LPCWSTR pszKeyPath;
589 int iIndex = 1;
590 LONG nResult;
591 HKEY hRootKey = NULL, hKey = NULL, hNewKey = NULL;
593 DWORD dwDisposition;
594 HTREEITEM hNewItem;
595
596 pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey);
597 if (!pszKeyPath)
598 return bSuccess;
599 if (pszKeyPath[0] == L'\0')
600 hKey = hRootKey;
601 else if (RegOpenKeyW(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
602 goto done;
603
604 if (LoadStringW(hInst, IDS_NEW_KEY, szNewKeyFormat, ARRAY_SIZE(szNewKeyFormat)) <= 0)
605 goto done;
606
607 /* Need to create a new key with a unique name */
608 do
609 {
610 wsprintf(szNewKey, szNewKeyFormat, iIndex++);
611 nResult = RegCreateKeyExW(hKey, szNewKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hNewKey, &dwDisposition);
612 if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY)
613 {
614 RegCloseKey(hNewKey);
615 hNewKey = NULL;
616 }
617 else if (!hNewKey)
618 {
619 InfoMessageBox(hFrameWnd, MB_OK | MB_ICONERROR, NULL, L"Cannot create new key!\n\nError Code: %d", nResult);
620 goto done;
621 }
622 }
623 while(!hNewKey);
624
625 /* Insert the new key */
626 hNewItem = InsertNode(hwndTV, hItem, szNewKey);
627 if (!hNewItem)
628 goto done;
629
630 /* The new key's name is probably not appropriate yet */
631 (void)TreeView_EditLabel(hwndTV, hNewItem);
632
633 bSuccess = TRUE;
634
635done:
636 if (hKey != hRootKey && hKey)
638 if (hNewKey)
639 RegCloseKey(hNewKey);
640 return bSuccess;
641}
int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage,...)
Definition: error.c:51
#define IDS_NEW_KEY
Definition: resource.h:192
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:88
HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name)
Definition: treeview.c:347
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
FxAutoRegKey hKey
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define REG_OPENED_EXISTING_KEY
Definition: nt_native.h:1085
long LONG
Definition: pedump.c:60
#define TreeView_EditLabel(hwnd, hitem)
Definition: commctrl.h:3504
#define MB_ICONERROR
Definition: winuser.h:787
#define MB_OK
Definition: winuser.h:790
#define wsprintf
Definition: winuser.h:5874

Referenced by _CmdWndProc().

◆ CreateTreeView()

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

Definition at line 754 of file treeview.c.

755{
756 RECT rcClient;
757 HWND hwndTV;
758
759 /* Get the dimensions of the parent window's client area, and create the tree view control. */
760 GetClientRect(hwndParent, &rcClient);
763 0, 0, rcClient.right, rcClient.bottom,
764 hwndParent, id, hInst, NULL);
765 if (!hwndTV) return NULL;
766
767 /* Initialize the image list, and add items to the control. */
768 if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName))
769 {
770 DestroyWindow(hwndTV);
771 return NULL;
772 }
773 return hwndTV;
774}
static BOOL InitTreeViewImageLists(HWND hwndTV)
Definition: treeview.c:454
static BOOL InitTreeViewItems(HWND hwndTV, LPWSTR pHostName)
Definition: treeview.c:407
#define TVS_LINESATROOT
Definition: commctrl.h:3249
#define TVS_SHOWSELALWAYS
Definition: commctrl.h:3252
#define TVS_HASLINES
Definition: commctrl.h:3248
#define WC_TREEVIEW
Definition: commctrl.h:3245
#define TVS_HASBUTTONS
Definition: commctrl.h:3247
#define TVS_EDITLABELS
Definition: commctrl.h:3250

Referenced by ChildWndProc().

◆ delete_registry_key()

void delete_registry_key ( WCHAR reg_key_name)

Definition at line 1102 of file regproc.c.

1103{
1104 WCHAR *key_name = NULL;
1105 HKEY key_class;
1106
1107 if (!reg_key_name || !reg_key_name[0])
1108 return;
1109
1110 if (!(key_class = parse_key_name(reg_key_name, &key_name)))
1111 {
1112 if (key_name) *(key_name - 1) = 0;
1113#ifdef __REACTOS__
1115 return;
1116#else
1118#endif
1119 }
1120
1121 if (!key_name || !*key_name)
1122#ifdef __REACTOS__
1123 {
1124 output_message(STRING_DELETE_FAILED, reg_key_name);
1125 return;
1126 }
1127#else
1128 error_exit(STRING_DELETE_FAILED, reg_key_name);
1129#endif
1130
1131#ifdef __REACTOS__
1132 SHDeleteKey(key_class, key_name);
1133#else
1134 RegDeleteTreeW(key_class, key_name);
1135#endif
1136}
void WINAPIV output_message(unsigned int id,...)
Definition: reg.c:92
#define STRING_INVALID_SYSTEM_KEY
Definition: resource.h:54
void WINAPIV error_exit(unsigned int id,...)
Definition: regedit.c:101
static HKEY parse_key_name(WCHAR *key_name, WCHAR **key_path)
Definition: regproc.c:407
#define STRING_DELETE_FAILED
Definition: resource.h:393
LSTATUS WINAPI RegDeleteTreeW(_In_ HKEY, _In_opt_ LPCWSTR)
#define SHDeleteKey
Definition: shlwapi.h:44

Referenced by delete_key_state(), and PerformRegAction().

◆ DeleteKey()

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

Definition at line 1960 of file edit.c.

1961{
1962 WCHAR msg[128], caption[128];
1963 BOOL result = FALSE;
1964 LONG lRet;
1965 HKEY hKey;
1966
1967 lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
1968 if (lRet != ERROR_SUCCESS)
1969 {
1971 return FALSE;
1972 }
1973
1976
1978 goto done;
1979
1980 lRet = SHDeleteKey(hKeyRoot, keyPath);
1981 if (lRet != ERROR_SUCCESS)
1982 {
1983 error(hwnd, IDS_BAD_KEY, keyPath);
1984 goto done;
1985 }
1986 result = TRUE;
1987
1988done:
1990 return result;
1991}
#define msg(x)
Definition: auth_time.c:54
static void error_code_messagebox(HWND hwnd, DWORD error_code)
Definition: edit.c:67
#define IDS_QUERY_DELETE_KEY_ONE
Definition: resource.h:153
#define IDS_BAD_KEY
Definition: resource.h:142
#define IDS_QUERY_DELETE_KEY_CONFIRM
Definition: resource.h:155
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
GLuint64EXT * result
Definition: glext.h:11304
#define error(str)
Definition: mkdosfs.c:1605
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_SET_VALUE
Definition: nt_native.h:1017
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define MB_YESNO
Definition: winuser.h:817
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_ICONQUESTION
Definition: winuser.h:789
#define IDYES
Definition: winuser.h:835

Referenced by _CmdWndProc(), and DECLARE_INTERFACE_().

◆ DeleteNode()

BOOL DeleteNode ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 118 of file treeview.c.

119{
120 if (!hItem) hItem = TreeView_GetSelection(hwndTV);
121 if (!hItem) return FALSE;
122 return TreeView_DeleteItem(hwndTV, hItem);
123}
#define TreeView_DeleteItem(hwnd, hitem)
Definition: commctrl.h:3415

◆ DestroyListView()

void DestroyListView ( HWND  hwndLV)

Definition at line 654 of file listview.c.

655{
656 INT count, i;
658
660 for (i = 0; i < count; i++)
661 {
662 item.mask = LVIF_PARAM;
663 item.iItem = i;
664 (void)ListView_GetItem(hwndLV, &item);
665 free(((LINE_INFO*)item.lParam)->name);
666 HeapFree(GetProcessHeap(), 0, (void*)item.lParam);
667 }
668
669}
#define free
Definition: debug_ros.c:5
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2307
#define LVIF_PARAM
Definition: commctrl.h:2311
#define ListView_GetItem(hwnd, pitem)
Definition: commctrl.h:2394

Referenced by ChildWndProc(), and RefreshListView().

◆ DestroyMainMenu()

void DestroyMainMenu ( void  )

Definition at line 164 of file main.c.

165{
167}
HMENU hMenuFrame
Definition: main.c:37
BOOL WINAPI DestroyMenu(_In_ HMENU)

Referenced by ChildWndProc().

◆ DestroyTreeView()

void DestroyTreeView ( HWND  hwndTV)

Definition at line 776 of file treeview.c.

777{
779
781
782 /* Destroy the image list associated with the tree view control */
785}
static LPWSTR pathBuffer
Definition: treeview.c:31
HIMAGELIST himl
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
#define TVSIL_NORMAL
Definition: commctrl.h:3443
#define TreeView_GetImageList(hwnd, iImage)
Definition: commctrl.h:3441

◆ error_exit()

void WINAPIV error_exit ( unsigned int  id,
  ... 
)

Definition at line 101 of file regedit.c.

102{
103 WCHAR fmt[1536];
104 va_list va_args;
105
107 {
108#ifndef __REACTOS__
109 WINE_FIXME("LoadString failed with %lu\n", GetLastError());
110#endif
111 return;
112 }
113 va_start(va_args, id);
114 output_formatstring(fmt, va_args);
115 va_end(va_args);
116
117 exit(0); /* regedit.exe always terminates with error code zero */
118}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
static void output_formatstring(const WCHAR *fmt, va_list va_args)
Definition: regedit.c:63
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
#define WINE_FIXME
Definition: debug.h:366
#define exit(n)
Definition: config.h:202
Definition: dsound.c:943
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by delete_registry_key(), PerformRegAction(), ProcessCmdLine(), and REGPROC_open_export_file().

◆ 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;
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}
TCHAR lpTitle[80]
Definition: ctm.c:69
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Status
Definition: gdiplustypes.h:25
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define args
Definition: format.c:66
Definition: match.c:390
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419

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

◆ export_registry_key()

BOOL export_registry_key ( WCHAR file_name,
WCHAR path,
DWORD  format 
)

Definition at line 1579 of file regproc.c.

1580{
1581 BOOL unicode = (format == REG_FORMAT_5);
1582
1583 if (path && *path)
1584 return export_key(file_name, path, unicode);
1585 else
1586 return export_all(file_name, path, unicode);
1587}
#define REG_FORMAT_5
Definition: main.h:44
static BOOL export_all(WCHAR *file_name, WCHAR *path, BOOL unicode)
Definition: regproc.c:1543
static BOOL export_key(WCHAR *file_name, WCHAR *path, BOOL unicode)
Definition: regproc.c:1514
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
static LPCWSTR file_name
Definition: protocol.c:147

Referenced by ExportRegistryFile(), and PerformRegAction().

◆ ExportRegistryFile()

BOOL ExportRegistryFile ( HWND  hWnd)

Definition at line 610 of file framewnd.c.

611{
612 BOOL bRet = FALSE;
614 WCHAR ExportKeyPath[_MAX_PATH] = {0};
615 WCHAR Caption[128], szTitle[512], szText[512];
616 HKEY hKeyRoot;
617 LPCWSTR pszKeyPath;
618
619 /* Figure out which key path we are exporting */
620 pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
621 GetKeyName(ExportKeyPath, ARRAY_SIZE(ExportKeyPath), hKeyRoot, pszKeyPath);
622
624 LoadStringW(hInst, IDS_EXPORT_REG_FILE, Caption, ARRAY_SIZE(Caption));
625 ofn.lpstrTitle = Caption;
626
627 /* Only set the path if a key (not the root node) is selected */
628 if (hKeyRoot != 0)
629 {
630 ofn.lCustData = (LPARAM) ExportKeyPath;
631 }
635 if (GetSaveFileName(&ofn))
636 {
637 switch (ofn.nFilterIndex)
638 {
639 case 2: /* Registry Hive Files */
640 {
641 LONG lResult;
642 HKEY hSubKey;
643
644 /* Open the subkey */
645 lResult = RegOpenKeyExW(hKeyRoot, pszKeyPath, 0, KEY_READ, &hSubKey);
646 if (lResult == ERROR_SUCCESS)
647 {
648 /* Enable the 'backup' privilege, save the hive then disable the privilege */
650 lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL);
651 if (lResult == ERROR_ALREADY_EXISTS)
652 {
653 /*
654 * We are here, that means that we already said "yes" to the confirmation dialog.
655 * So we absolutely want to replace the hive file.
656 */
658 {
659 /* Try again */
660 lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL);
661 }
662 }
664
665 if (lResult != ERROR_SUCCESS)
666 {
667 /*
668 * If we are here, it's because RegSaveKeyW has failed for any reason.
669 * The problem is that even if it has failed, it has created or
670 * replaced the exported hive file with a new empty file. We don't
671 * want to keep this file, so we delete it.
672 */
674 }
675
676 /* Close the subkey */
677 RegCloseKey(hSubKey);
678 }
679
680 /* Set the return value */
681 bRet = (lResult == ERROR_SUCCESS);
682
683 /* Display error, if any */
684 if (!bRet) ErrorMessageBox(hWnd, Caption, lResult);
685
686 break;
687 }
688
689 case 1: /* Windows Registry Editor Version 5.00 */
690 case 3: /* REGEDIT4 */
691 default: /* All files ==> use Windows Registry Editor Version 5.00 */
692 {
693 if (!export_registry_key(ofn.lpstrFile, ExportKeyPath,
695 : REG_FORMAT_5)))
696 {
697 /* Error creating the file */
699 LoadStringW(hInst, IDS_EXPORT_ERROR, szText, ARRAY_SIZE(szText));
701 bRet = FALSE;
702 }
703 else
704 {
705 bRet = TRUE;
706 }
707
708 break;
709 }
710
711 case 4: /* Text File */
712 {
713 bRet = txt_export_registry_key(ofn.lpstrFile, ExportKeyPath);
714 if (!bRet)
715 {
716 /* Error creating the file */
718 LoadStringW(hInst, IDS_EXPORT_ERROR, szText, ARRAY_SIZE(szText));
720 }
721 break;
722 }
723 }
724 }
725 else
726 {
728 }
729
730 return bRet;
731}
#define SE_BACKUP_NAME
#define IDS_APP_TITLE
Definition: resource.h:10
int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode,...)
Definition: error.c:24
static BOOL CheckCommDlgError(HWND hWnd)
Definition: framewnd.c:208
static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME *pofn, BOOL bSave)
Definition: framewnd.c:274
static BOOL EnablePrivilege(LPCWSTR lpszPrivilegeName, LPCWSTR lpszSystemName, BOOL bEnablePrivilege)
Definition: framewnd.c:345
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
Definition: framewnd.c:556
#define REG_FORMAT_4
Definition: main.h:45
BOOL export_registry_key(WCHAR *file_name, WCHAR *path, DWORD format)
Definition: regproc.c:1579
BOOL txt_export_registry_key(LPCWSTR file_name, LPCWSTR path)
Definition: txtproc.c:401
#define IDS_EXPORT_REG_FILE
Definition: resource.h:131
#define IDS_EXPORT_ERROR
Definition: resource.h:199
#define IDD_EXPORTRANGE
Definition: resource.h:42
#define GetSaveFileName
Definition: commdlg.h:666
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
#define OFN_ENABLETEMPLATE
Definition: commdlg.h:102
LONG WINAPI RegSaveKeyW(HKEY hKey, LPCWSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: reg.c:4617
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
#define _MAX_PATH
Definition: utility.h:77
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
OPENFILENAME ofn
Definition: sndrec32.cpp:56
LPARAM lCustData
Definition: commdlg.h:346
LPCSTR lpTemplateName
Definition: commdlg.h:348
DWORD nFilterIndex
Definition: commdlg.h:335
LPCSTR lpstrTitle
Definition: commdlg.h:341
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD Flags
Definition: commdlg.h:342
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347

Referenced by _CmdWndProc().

◆ FindDialog()

void FindDialog ( HWND  hWnd)

Definition at line 824 of file find.c.

825{
827 hWnd, FindDialogProc, 0) != 0)
828 {
830 }
831}
void FindNextMessageBox(HWND hWnd)
Definition: find.c:812
static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: find.c:697
#define IDD_FIND
Definition: resource.h:48
#define GetModuleHandle
Definition: winbase.h:3827
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)

Referenced by _CmdWndProc(), and FindNext().

◆ FindNext()

BOOL FindNext ( HWND  hWnd)

Definition at line 622 of file find.c.

623{
624 HKEY hKeyRoot;
625 LPCWSTR pszKeyPath;
626 BOOL fSuccess;
627 WCHAR szFullKey[512];
628 LPCWSTR pszValueName;
629 LPWSTR pszFoundSubKey, pszFoundValueName;
630
631 if (wcslen(s_szFindWhat) == 0)
632 {
634 return TRUE;
635 }
636
638
639 pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
640 if (pszKeyPath == NULL)
641 {
642 hKeyRoot = HKEY_CLASSES_ROOT;
643 pszKeyPath = s_empty;
644 }
645
646 /* Create abort find dialog */
650 {
653 }
654 s_bAbort = FALSE;
655
656 pszValueName = GetValueName(g_pChildWnd->hListWnd, -1);
657
662
663 fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
664 &pszFoundSubKey, &pszFoundValueName);
665
670
672 {
675 }
676
677 if (fSuccess)
678 {
679 GetKeyName(szFullKey, ARRAY_SIZE(szFullKey), hKeyRoot, pszFoundSubKey);
680 SelectNode(g_pChildWnd->hTreeWnd, szFullKey);
681 free(pszFoundSubKey);
682
683 if (pszFoundValueName != NULL)
684 {
685 SetValueName(g_pChildWnd->hListWnd, pszFoundValueName);
686 free(pszFoundValueName);
688 }
689 else
690 {
692 }
693 }
694 return fSuccess || s_bAbort;
695}
VOID SetValueName(HWND hwndLV, LPCWSTR pszValueName)
Definition: listview.c:84
BOOL RegFindWalk(HKEY *phKey, LPCWSTR pszSubKey, LPCWSTR pszValueName, LPWSTR *ppszFoundSubKey, LPWSTR *ppszFoundValueName)
Definition: find.c:346
static BOOL s_bAbort
Definition: find.c:31
static HWND s_hwndAbortDialog
Definition: find.c:30
static const WCHAR s_empty[]
Definition: find.c:36
static INT_PTR CALLBACK AbortFindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: find.c:594
void FindDialog(HWND hWnd)
Definition: find.c:824
static DWORD GetFindFlags(void)
Definition: find.c:547
static WCHAR s_szFindWhat[256]
Definition: find.c:27
static DWORD s_dwFlags
Definition: find.c:33
WCHAR * GetValueName(HWND hwndLV, int iStartAt)
Definition: listview.c:55
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
Definition: treeview.c:787
#define IDD_FINDING
Definition: resource.h:49
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI UpdateWindow(_In_ HWND)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define CreateDialogW(h, n, w, f)
Definition: winuser.h:4281
#define SW_SHOW
Definition: winuser.h:775

Referenced by FindNextMessageBox().

◆ FindNextMessageBox()

void FindNextMessageBox ( HWND  hWnd)

Definition at line 812 of file find.c.

813{
814 if (!FindNext(hWnd))
815 {
816 WCHAR msg[128], caption[128];
817
819 LoadStringW(hInst, IDS_APP_TITLE, caption, ARRAY_SIZE(caption));
821 }
822}
BOOL FindNext(HWND hWnd)
Definition: find.c:622
#define IDS_FINISHEDFIND
Definition: resource.h:201
#define MB_ICONINFORMATION
Definition: winuser.h:802

Referenced by _CmdWndProc(), and FindDialog().

◆ FrameWndProc()

LRESULT CALLBACK FrameWndProc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

PURPOSE: Processes messages for the main frame window

WM_COMMAND - process the application menu WM_DESTROY - post a quit message and return

Definition at line 1473 of file framewnd.c.

1474{
1475 RECT rc;
1476 switch (message)
1477 {
1478 case WM_CREATE:
1479 // For now, the Help dialog item is disabled because of lacking of HTML Help support
1481 GetClientRect(hWnd, &rc);
1483 rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
1484 hWnd, (HMENU)0, hInst, 0);
1485 break;
1486 case WM_COMMAND:
1489 break;
1490 case WM_ACTIVATE:
1493 break;
1494 case WM_SIZE:
1496 break;
1497 case WM_INITMENU:
1499 break;
1500 case WM_ENTERMENULOOP:
1502 break;
1503 case WM_EXITMENULOOP:
1505 break;
1506 case WM_MENUSELECT:
1508 break;
1509 case WM_SYSCOLORCHANGE:
1510 /* Forward WM_SYSCOLORCHANGE to common controls */
1513 break;
1514 case WM_DESTROY:
1515 WinHelpW(hWnd, L"regedit", HELP_QUIT, 0);
1516 SaveSettings();
1517 PostQuitMessage(0);
1518 default:
1520 }
1521 return 0;
1522}
void SaveSettings(void)
Definition: settings.c:115
static void resize_frame_client(HWND hWnd)
Definition: framewnd.c:65
static void OnEnterMenuLoop(HWND hWnd)
Definition: framewnd.c:134
static void OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
Definition: framewnd.c:154
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: framewnd.c:1152
static void OnExitMenuLoop(HWND hWnd)
Definition: framewnd.c:146
static void OnInitMenu(HWND hWnd)
Definition: framewnd.c:75
WCHAR szChildClass[MAX_LOADSTRING]
Definition: main.c:45
#define ID_HELP_HELPTOPICS
Definition: resource.h:74
#define HELP_QUIT
Definition: winuser.h:2414
BOOL WINAPI WinHelpW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_ UINT, _In_ ULONG_PTR)
#define WM_INITMENU
Definition: winuser.h:1745
#define WA_INACTIVE
Definition: winuser.h:2622
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
#define WM_ACTIVATE
Definition: winuser.h:1612
#define WM_ENTERMENULOOP
Definition: winuser.h:1804
#define WM_EXITMENULOOP
Definition: winuser.h:1805
#define WM_MENUSELECT
Definition: winuser.h:1747
HMENU WINAPI GetMenu(_In_ HWND)

◆ get_root_key_name()

LPCWSTR get_root_key_name ( HKEY  hRootKey)

Definition at line 89 of file childwnd.c.

90{
91 if (hRootKey == HKEY_CLASSES_ROOT) return L"HKEY_CLASSES_ROOT";
92 if (hRootKey == HKEY_CURRENT_USER) return L"HKEY_CURRENT_USER";
93 if (hRootKey == HKEY_LOCAL_MACHINE) return L"HKEY_LOCAL_MACHINE";
94 if (hRootKey == HKEY_USERS) return L"HKEY_USERS";
95 if (hRootKey == HKEY_CURRENT_CONFIG) return L"HKEY_CURRENT_CONFIG";
96 if (hRootKey == HKEY_DYN_DATA) return L"HKEY_DYN_DATA";
97
98 return L"UNKNOWN HKEY, PLEASE REPORT";
99}
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_USERS
Definition: winreg.h:13

Referenced by SaveSettings(), and UpdateAddress().

◆ GetItemPath()

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

Definition at line 88 of file treeview.c.

89{
90 int pathLen = 0, maxLen;
91
92 *phRootKey = NULL;
93
94 if (!pathBuffer)
95 {
97 }
98 if (!pathBuffer)
99 {
100 return NULL;
101 }
102
104
105 maxLen = (int) HeapSize(GetProcessHeap(), 0, pathBuffer);
106
107 if (!hItem)
108 {
110 }
111 if (maxLen == -1 || !hItem || !get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen))
112 {
113 return NULL;
114 }
115 return pathBuffer;
116}
static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY *phKey, LPWSTR *pKeyPath, int *pPathLen, int *pMaxLen)
Definition: treeview.c:40
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define UNICODE_NULL
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)

Referenced by _CmdWndProc(), ChildWndProc(), CreateNewKey(), ExportRegistryFile(), FindNext(), GetItemFullPath(), 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 2094 of file edit.c.

2095{
2096 LPCWSTR pszRootKey;
2097
2098 if (hRootKey == HKEY_CLASSES_ROOT)
2099 pszRootKey = L"HKEY_CLASSES_ROOT";
2100 else if (hRootKey == HKEY_CURRENT_USER)
2101 pszRootKey = L"HKEY_CURRENT_USER";
2102 else if (hRootKey == HKEY_LOCAL_MACHINE)
2103 pszRootKey = L"HKEY_LOCAL_MACHINE";
2104 else if (hRootKey == HKEY_USERS)
2105 pszRootKey = L"HKEY_USERS";
2106 else if (hRootKey == HKEY_CURRENT_CONFIG)
2107 pszRootKey = L"HKEY_CURRENT_CONFIG";
2108 else if (hRootKey == HKEY_DYN_DATA)
2109 pszRootKey = L"HKEY_DYN_DATA";
2110 else
2111 return FALSE;
2112
2113 if (lpSubKey[0])
2114 _snwprintf(pszDest, iDestLength, L"%s\\%s", pszRootKey, lpSubKey);
2115 else
2116 _snwprintf(pszDest, iDestLength, L"%s", pszRootKey);
2117 return TRUE;
2118}

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

◆ GetMultiByteString()

char * GetMultiByteString ( const WCHAR strW)

Definition at line 86 of file regproc.c.

87{
88 if(strW)
89 {
90 char* strA;
91 int len = WideCharToMultiByte(CP_ACP, 0, strW, -1, NULL, 0, NULL, NULL);
92
93 strA = malloc(len);
95 return strA;
96 }
97 return NULL;
98}
#define malloc
Definition: debug_ros.c:4
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
GLenum GLsizei len
Definition: glext.h:6722
WCHAR strW[12]
Definition: clipboard.c:2029
char strA[12]
Definition: clipboard.c:2028

Referenced by REGPROC_write_line().

◆ GetValueName()

WCHAR * 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}
struct tagLINE_INFO * PLINE_INFO
if(dx< 0)
Definition: linetemp.h:194
LPWSTR name
Definition: listview.c:34
int iSubItem
Definition: commctrl.h:2362
UINT mask
Definition: commctrl.h:2360
LPARAM lParam
Definition: commctrl.h:2368

Referenced by _CmdWndProc(), and FindNext().

◆ import_registry_file()

BOOL import_registry_file ( FILE reg_file)

Definition at line 1054 of file regproc.c.

1055{
1056 BYTE s[2];
1057 struct parser parser;
1058 WCHAR *pos;
1059
1060 if (!reg_file || (fread(s, 2, 1, reg_file) != 1))
1061 return FALSE;
1062
1063 parser.is_unicode = (s[0] == 0xff && s[1] == 0xfe);
1065
1066 parser.file = reg_file;
1067 parser.two_wchars[0] = s[0];
1068 parser.two_wchars[1] = s[1];
1069 parser.reg_version = -1;
1070 parser.hkey = NULL;
1073 parser.parse_type = 0;
1074 parser.data_type = 0;
1075 parser.data = NULL;
1076 parser.data_size = 0;
1079
1081
1082 /* parser main loop */
1083 while (pos)
1085
1088
1090 close_key(&parser);
1091
1092 return TRUE;
1093}
static WCHAR * get_lineA(FILE *fp)
Definition: regproc.c:941
@ HEADER
Definition: regproc.c:124
@ REG_VERSION_INVALID
Definition: regproc.c:522
@ REG_VERSION_FUZZY
Definition: regproc.c:521
static WCHAR * get_lineW(FILE *fp)
Definition: regproc.c:999
static WCHAR *(* get_line)(FILE *)
Definition: regproc.c:119
static const parser_state_func parser_funcs[NB_PARSER_STATES]
Definition: regproc.c:182
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
#define close_key(k)
Definition: reg_test.h:52
Definition: import.c:81
BOOL is_unicode
Definition: import.c:84
BOOL backslash
Definition: import.c:94
enum parser_state state
Definition: import.c:95
WCHAR * value_name
Definition: import.c:89
WCHAR two_wchars[2]
Definition: import.c:83
short int reg_version
Definition: import.c:85
DWORD data_size
Definition: import.c:93
void * data
Definition: import.c:92
HKEY hkey
Definition: import.c:87
DWORD data_type
Definition: import.c:91
DWORD parse_type
Definition: import.c:90
WCHAR * key_name
Definition: import.c:88
FILE * file
Definition: import.c:82
unsigned char BYTE
Definition: xxhash.c:193

Referenced by ImportRegistryFile(), and PerformRegAction().

◆ 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;
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}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest, size_t _Count, const wchar_t *_Format, va_list _Args)
_Check_return_ _CRTIMP int __cdecl _vscwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
#define LPTR
Definition: winbase.h:381

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

◆ InsertNode()

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

Definition at line 347 of file treeview.c.

348{
350 HTREEITEM hNewItem = 0;
352
353 /* Default to the current selection */
354 if (!hItem)
355 {
357 if (!hItem)
358 return FALSE;
359 }
360
361 memset(&item, 0, sizeof(item));
362 item.hItem = hItem;
364 if (!TreeView_GetItem(hwndTV, &item))
365 return FALSE;
366
367 if (item.state & TVIS_EXPANDEDONCE)
368 {
369 hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
371 }
372 else
373 {
375 item.hItem = hItem;
376 item.cChildren = 1;
377 if (!TreeView_SetItem(hwndTV, &item))
378 return FALSE;
379 }
380
382 if (!hNewItem)
383 {
384 for(hNewItem = TreeView_GetChild(hwndTV, hItem); hNewItem; hNewItem = TreeView_GetNextSibling(hwndTV, hNewItem))
385 {
386 item.mask = TVIF_HANDLE | TVIF_TEXT;
387 item.hItem = hNewItem;
388 item.pszText = buf;
389 item.cchTextMax = ARRAY_SIZE(buf);
390 if (!TreeView_GetItem(hwndTV, &item)) continue;
391 if (wcscmp(name, item.pszText) == 0) break;
392 }
393 }
394 if (hNewItem) (void)TreeView_SelectItem(hwndTV, hNewItem);
395
396 return hNewItem;
397}
#define MAX_NEW_KEY_LEN
Definition: main.h:41
static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
Definition: treeview.c:126
#define TVIF_TEXT
Definition: commctrl.h:3266
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3420
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3466
#define TVIS_EXPANDEDONCE
Definition: commctrl.h:3285
#define TVE_EXPAND
Definition: commctrl.h:3423
#define TVM_SORTCHILDREN
Definition: commctrl.h:3541
#define TVIF_HANDLE
Definition: commctrl.h:3270
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3467
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3497
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
Definition: name.c:39
HTREEITEM hItem
Definition: treelist.h:37

Referenced by CreateNewKey().

◆ IsDefaultValue()

BOOL IsDefaultValue ( HWND  hwndLV,
int  i 
)

Definition at line 108 of file listview.c.

109{
110 PLINE_INFO lineinfo;
112
113 Item.mask = LVIF_PARAM;
114 Item.iItem = i;
115 if(ListView_GetItem(hwndLV, &Item))
116 {
117 lineinfo = (PLINE_INFO)Item.lParam;
118 return lineinfo && (!lineinfo->name || !wcscmp(lineinfo->name, L""));
119 }
120 return FALSE;
121}
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

Referenced by ChildWndProc().

◆ ListWndNotifyProc()

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

Definition at line 544 of file listview.c.

545{
547 int iSortingColumn;
549 *Result = TRUE;
550 switch (((LPNMHDR)lParam)->code)
551 {
552 case LVN_GETDISPINFO:
554 return TRUE;
555 case LVN_COLUMNCLICK:
556 iSortingColumn = ((LPNMLISTVIEW)lParam)->iSubItem;
557 (void)ListView_Sort(hWnd, iSortingColumn, g_iSortedColumn);
558 g_iSortedColumn = iSortingColumn;
559 return TRUE;
560 case NM_DBLCLK:
561 case NM_RETURN:
562 {
564 }
565 return TRUE;
566 case NM_SETFOCUS:
568 break;
571 if(Info)
572 {
573 PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
574 if(!lineinfo->name || !wcscmp(lineinfo->name, L""))
575 {
576 *Result = TRUE;
577 }
578 else
579 {
580 *Result = FALSE;
581 }
582 }
583 else
584 *Result = TRUE;
585 return TRUE;
586 case LVN_ENDLABELEDIT:
588 if(Info && Info->item.pszText)
589 {
590 PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
591 if(!lineinfo->name || !wcscmp(lineinfo->name, L""))
592 {
593 *Result = FALSE;
594 }
595 else
596 {
597 if(wcslen(Info->item.pszText) == 0)
598 {
599 WCHAR msg[128], caption[128];
600
603 MessageBoxW(0, msg, caption, 0);
604 *Result = TRUE;
605 }
606 else
607 {
608 HKEY hKeyRoot;
609 LPCWSTR keyPath;
610 LONG lResult;
611
612 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
613 lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
614 lineinfo->name = realloc(lineinfo->name, (wcslen(Info->item.pszText)+1)*sizeof(WCHAR));
615 if (lineinfo->name != NULL)
616 wcscpy(lineinfo->name, Info->item.pszText);
617
618 *Result = TRUE;
619 return (lResult == ERROR_SUCCESS);
620 }
621 }
622 }
623 else
624 *Result = TRUE;
625
626 return TRUE;
627 }
628 return FALSE;
629}
LONG RenameValue(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpDestValue, LPCWSTR lpSrcValue)
Definition: edit.c:2028
static void OnGetDispInfo(NMLVDISPINFO *plvdi)
Definition: listview.c:313
static INT g_iSortedColumn
Definition: listview.c:49
#define IDS_ERR_RENVAL_CAPTION
Definition: resource.h:138
#define IDS_ERR_RENVAL_TOEMPTY
Definition: resource.h:139
#define realloc
Definition: debug_ros.c:6
#define ListView_Sort(hListView, iSortingColumn)
Definition: listview.h:32
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define LVN_COLUMNCLICK
Definition: commctrl.h:3139
#define NM_DBLCLK
Definition: commctrl.h:131
#define LVN_GETDISPINFO
Definition: commctrl.h:3160
#define LVN_ENDLABELEDIT
Definition: commctrl.h:3159
#define NMLVDISPINFO
Definition: commctrl.h:3182
#define LVN_BEGINLABELEDIT
Definition: commctrl.h:3158
#define NM_RETURN
Definition: commctrl.h:132
struct tagNMLISTVIEW * LPNMLISTVIEW
#define NM_SETFOCUS
Definition: commctrl.h:135
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
Definition: inflate.c:139
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
#define MAKEWPARAM(l, h)
Definition: winuser.h:4009

Referenced by ChildWndProc().

◆ LoadSettings()

void LoadSettings ( void  Dlg)

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 IDC_FONTCOMBO
Definition: resource.h:12
#define IDC_CHECK_ADVANCED
Definition: resource.h:26
#define IDC_COMBO_CHARSET
Definition: resource.h:21
LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
Definition: settings.c:19
const TCHAR g_szGeneralRegKey[]
Definition: settings.c:16
HWND hCharmapDlg
Definition: charmap.c:21
VOID ChangeMapFont(HWND hDlg)
Definition: charmap.c:161
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
#define REG_DWORD
Definition: sdbapi.c:596
unsigned char * LPBYTE
Definition: typedefs.h:53
#define _T(x)
Definition: vfdio.h:22
#define ComboBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:66
#define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind)
Definition: windowsx.h:47
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegQueryValueEx
Definition: winreg.h:524
#define CB_ERR
Definition: winuser.h:2435
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define BM_CLICK
Definition: winuser.h:1917
#define SendDlgItemMessage
Definition: winuser.h:5851
char TCHAR
Definition: xmlstorage.h:189

◆ ModifyValue()

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

Definition at line 1544 of file edit.c.

1545{
1546 DWORD type;
1547 LONG lRet;
1548 BOOL result = FALSE;
1549
1550 if (!hKey)
1551 return FALSE;
1552
1553 editValueName = valueName;
1554
1555 lRet = RegQueryValueExW(hKey, valueName, 0, &type, 0, &valueDataLen);
1556 if (lRet != ERROR_SUCCESS && (valueName == NULL || !valueName[0]))
1557 {
1558 lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
1559 type = REG_SZ;
1560 valueDataLen = 0;
1563 }
1564
1565 if (lRet != ERROR_SUCCESS)
1566 {
1567 error(hwnd, IDS_BAD_VALUE, valueName);
1568 goto done;
1569 }
1570
1571 if (EditBin == FALSE && ((type == REG_SZ) || (type == REG_EXPAND_SZ)))
1572 {
1573 if (valueDataLen > 0)
1574 {
1576 {
1578 goto done;
1579 }
1580 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
1581 if (lRet != ERROR_SUCCESS)
1582 {
1583 error(hwnd, IDS_BAD_VALUE, valueName);
1584 goto done;
1585 }
1586 }
1587 else
1588 {
1590 }
1591
1593 {
1594 if (stringValueData)
1595 {
1596 lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)stringValueData, (DWORD) (wcslen(stringValueData) + 1) * sizeof(WCHAR));
1597 }
1598 else
1599 {
1600 lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
1601 }
1602 if (lRet == ERROR_SUCCESS)
1603 result = TRUE;
1604 }
1605 }
1606 else if (EditBin == FALSE && type == REG_MULTI_SZ)
1607 {
1608 if (valueDataLen > 0)
1609 {
1610 size_t llen, listlen, nl_len;
1611 LPWSTR src, lines = NULL;
1612
1614 {
1616 goto done;
1617 }
1618 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)stringValueData, &valueDataLen);
1619 if (lRet != ERROR_SUCCESS)
1620 {
1621 error(hwnd, IDS_BAD_VALUE, valueName);
1622 goto done;
1623 }
1624
1625 /* convert \0 to \r\n */
1627 nl_len = wcslen(L"\r\n") * sizeof(WCHAR);
1628 listlen = sizeof(WCHAR);
1629 lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, listlen + sizeof(WCHAR));
1630 while(*src != L'\0')
1631 {
1632 llen = wcslen(src);
1633 if(llen == 0)
1634 break;
1635 listlen += (llen * sizeof(WCHAR)) + nl_len;
1637 wcscat(lines, src);
1638 wcscat(lines, L"\r\n");
1639 src += llen + 1;
1640 }
1643 }
1644 else
1645 {
1647 }
1648
1650 {
1651 if (stringValueData)
1652 {
1653 /* convert \r\n to \0 */
1654 BOOL EmptyLines = FALSE;
1655 LPWSTR src, lines, nl;
1656 size_t linechars, buflen, c_nl, dest;
1657
1659 buflen = sizeof(WCHAR);
1660 lines = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen + sizeof(WCHAR));
1661 c_nl = wcslen(L"\r\n");
1662 dest = 0;
1663 while(*src != L'\0')
1664 {
1665 if((nl = wcsstr(src, L"\r\n")))
1666 {
1667 linechars = nl - src;
1668 if(nl == src)
1669 {
1670 EmptyLines = TRUE;
1671 src = nl + c_nl;
1672 continue;
1673 }
1674 }
1675 else
1676 {
1677 linechars = wcslen(src);
1678 }
1679 if(linechars > 0)
1680 {
1681 buflen += ((linechars + 1) * sizeof(WCHAR));
1683 memcpy((lines + dest), src, linechars * sizeof(WCHAR));
1684 dest += linechars;
1685 lines[dest++] = L'\0';
1686 }
1687 else
1688 {
1689 EmptyLines = TRUE;
1690 }
1691 src += linechars + (nl != NULL ? c_nl : 0);
1692 }
1693 lines[++dest] = L'\0';
1694
1695 if(EmptyLines)
1696 {
1698 }
1699
1700 lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
1702 }
1703 else
1704 {
1705 lRet = RegSetValueExW(hKey, valueName, 0, type, NULL, 0);
1706 }
1707 if (lRet == ERROR_SUCCESS)
1708 result = TRUE;
1709 }
1710 }
1711 else if (EditBin == FALSE && type == REG_DWORD)
1712 {
1713 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&dwordValueData, &valueDataLen);
1714 if (lRet != ERROR_SUCCESS)
1715 {
1716 error(hwnd, IDS_BAD_VALUE, valueName);
1717 goto done;
1718 }
1719
1721 {
1722 lRet = RegSetValueExW(hKey, valueName, 0, type, (LPBYTE)&dwordValueData, sizeof(DWORD));
1723 if (lRet == ERROR_SUCCESS)
1724 result = TRUE;
1725 }
1726 }
1727 else if (EditBin == FALSE && type == REG_RESOURCE_LIST)
1728 {
1729 if (valueDataLen > 0)
1730 {
1732 if (resourceValueData == NULL)
1733 {
1735 goto done;
1736 }
1737
1738 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)resourceValueData, &valueDataLen);
1739 if (lRet != ERROR_SUCCESS)
1740 {
1741 error(hwnd, IDS_BAD_VALUE, valueName);
1742 goto done;
1743 }
1744 }
1745 else
1746 {
1748 }
1749
1751 {
1752 }
1753 }
1754 else if (EditBin == FALSE && type == REG_FULL_RESOURCE_DESCRIPTOR)
1755 {
1756 if (valueDataLen > 0)
1757 {
1759 if (resourceValueData == NULL)
1760 {
1762 goto done;
1763 }
1764
1765 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)&resourceValueData->List[0], &valueDataLen);
1766 if (lRet != ERROR_SUCCESS)
1767 {
1768 error(hwnd, IDS_BAD_VALUE, valueName);
1769 goto done;
1770 }
1771
1774 }
1775 else
1776 {
1778 }
1779
1781 {
1782 }
1783 }
1784 else if (EditBin == FALSE && type == REG_RESOURCE_REQUIREMENTS_LIST)
1785 {
1786 if (valueDataLen > 0)
1787 {
1790 {
1792 goto done;
1793 }
1794
1795 lRet = RegQueryValueExW(hKey, valueName, 0, 0, (LPBYTE)requirementsValueData, &valueDataLen);
1796 if (lRet != ERROR_SUCCESS)
1797 {
1798 error(hwnd, IDS_BAD_VALUE, valueName);
1799 goto done;
1800 }
1801
1802 }
1803 else
1804 {
1806 }
1807
1809 {
1810 }
1811 }
1812 else if ((EditBin != FALSE) || (type == REG_NONE) || (type == REG_BINARY))
1813 {
1814 if(valueDataLen > 0)
1815 {
1817 {
1819 goto done;
1820 }
1821
1822 /* Use the unicode version, so editing strings in binary mode is correct */
1823 lRet = RegQueryValueExW(hKey, valueName,
1825 if (lRet != ERROR_SUCCESS)
1826 {
1828 error(hwnd, IDS_BAD_VALUE, valueName);
1829 goto done;
1830 }
1831 }
1832 else
1833 {
1835 }
1836
1838 {
1839 /* Use the unicode version, so editing strings in binary mode is correct */
1840 lRet = RegSetValueExW(hKey, valueName,
1842 if (lRet == ERROR_SUCCESS)
1843 result = TRUE;
1844 }
1845 if(binValueData != NULL)
1847 }
1848 else
1849 {
1851 }
1852
1853done:
1857
1858 if (stringValueData)
1861
1865
1866 return result;
1867}
#define IDS_BAD_VALUE
Definition: resource.h:11
static WCHAR * stringValueData
Definition: edit.c:34
static PCM_RESOURCE_LIST resourceValueData
Definition: edit.c:37
INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:98
static INT_PTR CALLBACK modify_requirements_list_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:1512
static DWORD valueDataLen
Definition: edit.c:39
static INT fullResourceIndex
Definition: edit.c:38
static INT_PTR CALLBACK modify_resource_list_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:1041
static DWORD dwordValueData
Definition: edit.c:36
static const WCHAR * editValueName
Definition: edit.c:33
static INT_PTR CALLBACK modify_resource_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:920
static PVOID binValueData
Definition: edit.c:35
INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:167
static PIO_RESOURCE_REQUIREMENTS_LIST requirementsValueData
Definition: edit.c:40
INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:276
INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: edit.c:390
#define IDD_EDIT_RESOURCE
Definition: resource.h:306
#define IDD_EDIT_MULTI_STRING
Definition: resource.h:283
#define IDS_TOO_BIG_VALUE
Definition: resource.h:121
#define IDD_EDIT_STRING
Definition: resource.h:275
#define IDD_EDIT_BIN_DATA
Definition: resource.h:284
#define IDD_EDIT_RESOURCE_LIST
Definition: resource.h:302
#define IDD_EDIT_REQUIREMENTS_LIST
Definition: resource.h:322
#define IDS_MULTI_SZ_EMPTY_STRING
Definition: resource.h:124
#define IDS_UNSUPPORTED_TYPE
Definition: resource.h:120
#define IDD_EDIT_DWORD
Definition: resource.h:279
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:4882
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define HeapReAlloc
Definition: compat.h:734
GLenum src
Definition: glext.h:6340
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define REG_SZ
Definition: layer.c:22
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static char * dest
Definition: rtl.c:135
#define REG_BINARY
Definition: nt_native.h:1496
#define REG_RESOURCE_LIST
Definition: nt_native.h:1502
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define REG_RESOURCE_REQUIREMENTS_LIST
Definition: nt_native.h:1504
#define REG_NONE
Definition: nt_native.h:1492
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define REG_FULL_RESOURCE_DESCRIPTOR
Definition: nt_native.h:1503
_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 warning(s)
Definition: debug.h:83
CM_FULL_RESOURCE_DESCRIPTOR List[1]
Definition: hwresource.cpp:165
eMaj lines
Definition: tritemp.h:206
uint32_t ULONG
Definition: typedefs.h:59
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4399
#define IDOK
Definition: winuser.h:830

Referenced by _CmdWndProc().

◆ OnTreeExpanding()

BOOL OnTreeExpanding ( HWND  hWnd,
NMTREEVIEW pnmtv 
)

Definition at line 516 of file treeview.c.

517{
518 DWORD dwCount, dwIndex, dwMaxSubKeyLen;
519 HKEY hRoot, hNewKey, hKey;
520 LPCWSTR keyPath;
521 LPWSTR Name;
522 LONG errCode;
523 HCURSOR hcursorOld;
524
525 static int expanding;
526 if (expanding) return FALSE;
527 if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE )
528 {
529 return TRUE;
530 }
531 expanding = TRUE;
532 hcursorOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
533 SendMessageW(hwndTV, WM_SETREDRAW, FALSE, 0);
534
535 keyPath = GetItemPath(hwndTV, pnmtv->itemNew.hItem, &hRoot);
536 if (!keyPath) goto done;
537
538 if (*keyPath)
539 {
540 errCode = RegOpenKeyExW(hRoot, keyPath, 0, KEY_READ, &hNewKey);
541 if (errCode != ERROR_SUCCESS) goto done;
542 }
543 else
544 {
545 hNewKey = hRoot;
546 }
547
548 errCode = RegQueryInfoKeyW(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
549 if (errCode != ERROR_SUCCESS) goto done;
550 dwMaxSubKeyLen++; /* account for the \0 terminator */
551 Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR));
552 if (!Name) goto done;
553
554 for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
555 {
556 DWORD cName = dwMaxSubKeyLen, dwSubCount;
557
558 errCode = RegEnumKeyExW(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
559 if (errCode != ERROR_SUCCESS) continue;
560 errCode = RegOpenKeyExW(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
561 if (errCode == ERROR_SUCCESS)
562 {
563 errCode = RegQueryInfoKeyW(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
565 }
566 if (errCode != ERROR_SUCCESS) dwSubCount = 0;
567 AddEntryToTree(hwndTV, pnmtv->itemNew.hItem, Name, NULL, dwSubCount);
568 }
569
570 SendMessageW(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM)pnmtv->itemNew.hItem);
571
572 RegCloseKey(hNewKey);
574
575done:
576 SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0);
577 SetCursor(hcursorOld);
578 expanding = FALSE;
579
580 return TRUE;
581}
struct NameRec_ * Name
Definition: cdprocs.h:460
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
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:3662
static HTREEITEM hRoot
Definition: treeview.c:381
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
HICON HCURSOR
Definition: windef.h:299
#define LoadCursor
Definition: winuser.h:5821
#define IDC_WAIT
Definition: winuser.h:689
#define WM_SETREDRAW
Definition: winuser.h:1616

Referenced by TreeWndNotifyProc().

◆ output_message()

void WINAPIV output_message ( unsigned int  id,
  ... 
)

Definition at line 92 of file reg.c.

93{
94 WCHAR *fmt = NULL;
95 int len;
96 va_list va_args;
97
98 if (!(len = LoadStringW(GetModuleHandleW(NULL), id, (WCHAR *)&fmt, 0)))
99 {
100 WINE_FIXME("LoadString failed with %d\n", GetLastError());
101 return;
102 }
103
104 len++;
105 fmt = malloc(len * sizeof(WCHAR));
106 if (!fmt) return;
107
109
110 va_start(va_args, id);
111 output_formatstring(fmt, va_args);
112 va_end(va_args);
113
114 free(fmt);
115}
static void output_formatstring(const WCHAR *fmt, va_list va_args)
Definition: reg.c:76

Referenced by ask_confirm(), ask_overwrite_value(), delete_registry_key(), export_key(), get_file_handle(), get_regdata(), key_name_state(), open_export_key(), output_error(), parse_registry_key(), parse_win31_line_state(), PerformRegAction(), ProcessCmdLine(), query_value(), reg_add(), reg_copy(), reg_delete(), reg_export(), reg_import(), reg_query(), REGPROC_open_export_file(), REGPROC_unescape_string(), run_add(), run_delete(), run_query(), sane_path(), unescape_string(), unknown_data_state(), and wmain().

◆ QueryStringValue()

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

Definition at line 2060 of file edit.c.

2061{
2062 LONG lResult;
2063 HKEY hSubKey = NULL;
2064 DWORD cbData, dwType;
2065
2066 if (lpSubKey)
2067 {
2068 lResult = RegOpenKeyW(hKey, lpSubKey, &hSubKey);
2069 if (lResult != ERROR_SUCCESS)
2070 goto done;
2071 hKey = hSubKey;
2072 }
2073
2074 cbData = (dwBufferLen - 1) * sizeof(*pszBuffer);
2075 lResult = RegQueryValueExW(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData);
2076 if (lResult != ERROR_SUCCESS)
2077 goto done;
2078 if (dwType != REG_SZ)
2079 {
2080 lResult = -1;
2081 goto done;
2082 }
2083
2084 pszBuffer[cbData / sizeof(*pszBuffer)] = L'\0';
2085
2086done:
2087 if (lResult != ERROR_SUCCESS)
2088 pszBuffer[0] = L'\0';
2089 if (hSubKey)
2090 RegCloseKey(hSubKey);
2091 return lResult;
2092}

◆ RefreshListView()

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

Definition at line 671 of file listview.c.

672{
673 DWORD max_sub_key_len;
674 DWORD max_val_name_len;
675 DWORD max_val_size;
676 DWORD val_count;
677 HKEY hNewKey;
678 LONG errCode;
679 INT i, c;
680 BOOL AddedDefault = FALSE;
681
682 if (!hwndLV) return FALSE;
683
684 (void)ListView_EditLabel(hwndLV, -1);
685
686 SendMessageW(hwndLV, WM_SETREDRAW, FALSE, 0);
687 DestroyListView(hwndLV);
688
690
691 if(!hKey) return FALSE;
692
693 errCode = RegOpenKeyExW(hKey, keyPath, 0, KEY_READ, &hNewKey);
694 if (errCode != ERROR_SUCCESS) return FALSE;
695
696 /* get size information and resize the buffers if necessary */
697 errCode = RegQueryInfoKeyW(hNewKey, NULL, NULL, NULL, NULL, &max_sub_key_len, NULL,
698 &val_count, &max_val_name_len, &max_val_size, NULL, NULL);
699
700 if (errCode == ERROR_SUCCESS)
701 {
702 WCHAR* ValName = HeapAlloc(GetProcessHeap(), 0, ++max_val_name_len * sizeof(WCHAR));
703 DWORD dwValNameLen = max_val_name_len;
704 BYTE* ValBuf = HeapAlloc(GetProcessHeap(), 0, max_val_size + sizeof(WCHAR));
705 DWORD dwValSize = max_val_size;
706 DWORD dwIndex = 0L;
707 DWORD dwValType;
708 /* if (RegQueryValueExW(hNewKey, NULL, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) { */
709 /* AddEntryToList(hwndLV, L"(Default)", dwValType, ValBuf, dwValSize); */
710 /* } */
711 /* dwValSize = max_val_size; */
712 while (RegEnumValueW(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS)
713 {
714 /* Add a terminating 0 character. Usually this is only necessary for strings. */
715 ValBuf[dwValSize] = ValBuf[dwValSize + 1] = 0;
716
717 AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE);
718 dwValNameLen = max_val_name_len;
719 dwValSize = max_val_size;
720 dwValType = 0L;
721 ++dwIndex;
722 if(!wcscmp(ValName, L""))
723 {
724 AddedDefault = TRUE;
725 }
726 }
727 HeapFree(GetProcessHeap(), 0, ValBuf);
728 HeapFree(GetProcessHeap(), 0, ValName);
729 }
730 RegCloseKey(hNewKey);
731
732 if(!AddedDefault)
733 {
734 AddEntryToList(hwndLV, L"", REG_SZ, NULL, 0, 0, FALSE);
735 }
736 c = ListView_GetItemCount(hwndLV);
737 for(i = 0; i < c; i++)
738 {
740 }
741
742 if (bSelectNone)
743 iListViewSelect = -1;
747 (void)ListView_Sort(hwndLV, g_iSortedColumn, -1);
748 SendMessageW(hwndLV, WM_SETREDRAW, TRUE, 0);
749
750 return TRUE;
751}
INT iListViewSelect
Definition: listview.c:29
static void AddEntryToList(HWND hwndLV, LPWSTR Name, DWORD dwValType, void *ValBuf, DWORD dwCount, int Position, BOOL ValExists)
Definition: listview.c:126
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:2830
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
#define ListView_SetItemState(hwndLV, i, data, mask)
Definition: commctrl.h:2673
#define ListView_EditLabel(hwndLV, i)
Definition: commctrl.h:2540
#define LVIS_SELECTED
Definition: commctrl.h:2319
#define ListView_DeleteAllItems(hwnd)
Definition: commctrl.h:2414
#define LVIS_FOCUSED
Definition: commctrl.h:2318

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

◆ RefreshTreeItem()

BOOL RefreshTreeItem ( HWND  hwndTV,
HTREEITEM  hItem 
)

Definition at line 152 of file treeview.c.

153{
154 HKEY hRoot, hKey, hSubKey;
155 HTREEITEM childItem;
156 LPCWSTR KeyPath;
157 DWORD dwCount, dwIndex, dwMaxSubKeyLen;
158 LPWSTR Name = NULL;
159 TVITEMW tvItem;
160 LPWSTR pszNodes = NULL;
162 LPWSTR s;
163 BOOL bAddedAny;
164
165 KeyPath = GetItemPath(hwndTV, hItem, &hRoot);
166
167 if (*KeyPath)
168 {
169 if (RegOpenKeyExW(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
170 {
171 goto done;
172 }
173 }
174 else
175 {
176 hKey = hRoot;
177 }
178
179 if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
180 {
181 goto done;
182 }
183
184 /* Set the number of children again */
185 tvItem.mask = TVIF_CHILDREN;
186 tvItem.hItem = hItem;
187 tvItem.cChildren = dwCount;
188 if (!TreeView_SetItem(hwndTV, &tvItem))
189 {
190 goto done;
191 }
192
193 /* We don't have to bother with the rest if it's not expanded. */
194 if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0)
195 {
197 bSuccess = TRUE;
198 goto done;
199 }
200
201 dwMaxSubKeyLen++; /* account for the \0 terminator */
202 if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR))))
203 {
204 goto done;
205 }
206 tvItem.cchTextMax = dwMaxSubKeyLen;
207 /*if (!(tvItem.pszText = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)))) {
208 goto done;
209 }*/
210
211 /* Get all of the tree node siblings in one contiguous block of memory */
212 {
213 DWORD dwPhysicalSize = 0;
214 DWORD dwActualSize = 0;
215 DWORD dwNewPhysicalSize;
216 LPWSTR pszNewNodes;
217 DWORD dwStep = 10000;
218
219 for (childItem = TreeView_GetChild(hwndTV, hItem); childItem;
220 childItem = TreeView_GetNextSibling(hwndTV, childItem))
221 {
222
223 if (dwActualSize + dwMaxSubKeyLen + 1 > dwPhysicalSize)
224 {
225 dwNewPhysicalSize = dwActualSize + dwMaxSubKeyLen + 1 + dwStep;
226
227 if (pszNodes)
228 pszNewNodes = (LPWSTR) HeapReAlloc(GetProcessHeap(), 0, pszNodes, dwNewPhysicalSize * sizeof(WCHAR));
229 else
230 pszNewNodes = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, dwNewPhysicalSize * sizeof(WCHAR));
231 if (!pszNewNodes)
232 goto done;
233
234 dwPhysicalSize = dwNewPhysicalSize;
235 pszNodes = pszNewNodes;
236 }
237
238 tvItem.mask = TVIF_TEXT;
239 tvItem.hItem = childItem;
240 tvItem.pszText = &pszNodes[dwActualSize];
241 tvItem.cchTextMax = dwPhysicalSize - dwActualSize;
242 if (!TreeView_GetItem(hwndTV, &tvItem))
243 goto done;
244
245 dwActualSize += (DWORD) wcslen(&pszNodes[dwActualSize]) + 1;
246 }
247
248 if (pszNodes)
249 pszNodes[dwActualSize] = L'\0';
250 }
251
252 /* Now go through all the children in the tree, and check if any have to be removed. */
253 childItem = TreeView_GetChild(hwndTV, hItem);
254 while (childItem)
255 {
256 HTREEITEM nextItem = TreeView_GetNextSibling(hwndTV, childItem);
257 if (RefreshTreeItem(hwndTV, childItem) == FALSE)
258 {
259 (void)TreeView_DeleteItem(hwndTV, childItem);
260 }
261 childItem = nextItem;
262 }
263
264 /* Now go through all the children in the registry, and check if any have to be added. */
265 bAddedAny = FALSE;
266 for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
267 {
268 DWORD cName = dwMaxSubKeyLen, dwSubCount;
269 BOOL found;
270
271 found = FALSE;
272 if (RegEnumKeyExW(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS)
273 {
274 continue;
275 }
276
277 /* Check if the node is already in there. */
278 if (pszNodes)
279 {
280 for (s = pszNodes; *s; s += wcslen(s) + 1)
281 {
282 if (!wcscmp(s, Name))
283 {
284 found = TRUE;
285 break;
286 }
287 }
288 }
289
290 if (found == FALSE)
291 {
292 /* Find the number of children of the node. */
293 dwSubCount = 0;
294 if (RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
295 {
296 if (RegQueryInfoKeyW(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
297 {
298 dwSubCount = 0;
299 }
300 RegCloseKey(hSubKey);
301 }
302
303 AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount);
304 bAddedAny = TRUE;
305 }
306 }
308
309 if (bAddedAny)
311
312 bSuccess = TRUE;
313
314done:
315 if (pszNodes)
316 HeapFree(GetProcessHeap(), 0, pszNodes);
317 if (Name)
319 return bSuccess;
320}
BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
Definition: treeview.c:152
#define DWORD
Definition: nt_native.h:44
#define TreeView_GetItemState(hwndTV, hti, mask)
Definition: commctrl.h:3595
HTREEITEM hItem
Definition: commctrl.h:3317
UINT mask
Definition: commctrl.h:3316
LPWSTR pszText
Definition: commctrl.h:3320
int cchTextMax
Definition: commctrl.h:3321
int cChildren
Definition: commctrl.h:3324

Referenced by RefreshTreeItem(), and RefreshTreeView().

◆ RefreshTreeView()

BOOL RefreshTreeView ( HWND  hWndTV)

Definition at line 322 of file treeview.c.

323{
325 HTREEITEM hSelectedItem;
326 HCURSOR hcursorOld;
327
328 hSelectedItem = TreeView_GetSelection(hwndTV);
329 hcursorOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
330 SendMessageW(hwndTV, WM_SETREDRAW, FALSE, 0);
331
332 hItem = TreeView_GetChild(hwndTV, TreeView_GetRoot(hwndTV));
333 while (hItem)
334 {
335 RefreshTreeItem(hwndTV, hItem);
337 }
338
339 SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0);
340 SetCursor(hcursorOld);
341
342 /* We reselect the currently selected node, this will prompt a refresh of the listview. */
343 (void)TreeView_SelectItem(hwndTV, hSelectedItem);
344 return TRUE;
345}
#define TreeView_GetRoot(hwnd)
Definition: commctrl.h:3475

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

◆ RegKeyEditPermissions()

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

Definition at line 838 of file security.c.

842{
843 BOOL Result = FALSE;
844 LPCWSTR lphKey = NULL;
845 LPWSTR lpKeyPath = NULL;
846 PCRegKeySecurity RegKeySecurity;
847 SI_OBJECT_INFO ObjectInfo;
848 size_t lnMachine = 0, lnKeyName = 0;
849
850 if (pfnEditSecurity == NULL)
851 {
852 return FALSE;
853 }
854
855 if (lpMachine != NULL)
856 lnMachine = wcslen(lpMachine);
857 if (lpKeyName != NULL)
858 lnKeyName = wcslen(lpKeyName);
859
860 /* build registry path */
861 if (lpMachine != NULL &&
862 (lpMachine[0] == L'\0' ||
863 (lpMachine[0] == L'.' && lpMachine[1] == L'.')))
864 {
865 lnMachine = 0;
866 }
867
868 if (hKey == HKEY_CLASSES_ROOT)
869 lphKey = L"CLASSES_ROOT";
870 else if (hKey == HKEY_CURRENT_USER)
871 lphKey = L"CURRENT_USER";
872 else if (hKey == HKEY_LOCAL_MACHINE)
873 lphKey = L"MACHINE";
874 else if (hKey == HKEY_USERS)
875 lphKey = L"USERS";
876 else if (hKey == HKEY_CURRENT_CONFIG)
877 lphKey = L"CONFIG";
878 else
879 goto Cleanup;
880
881 lpKeyPath = HeapAlloc(GetProcessHeap(),
882 0,
883 (2 + lnMachine + 1 + wcslen(lphKey) + 1 + lnKeyName) * sizeof(WCHAR));
884 if (lpKeyPath == NULL)
885 {
887 goto Cleanup;
888 }
889 lpKeyPath[0] = L'\0';
890
891 if (lnMachine != 0)
892 {
893 wcscat(lpKeyPath,
894 L"\\\\");
895 wcscat(lpKeyPath,
896 lpMachine);
897 wcscat(lpKeyPath,
898 L"\\");
899 }
900
901 wcscat(lpKeyPath,
902 lphKey);
903 if (lpKeyName != NULL && lpKeyName[0] != L'\0')
904 {
905 if (lpKeyName[0] != L'\\')
906 {
907 wcscat(lpKeyPath,
908 L"\\");
909 }
910
911 wcscat(lpKeyPath,
912 lpKeyName);
913 }
914
917 ObjectInfo.hInstance = hInst;
918 ObjectInfo.pszServerName = (LPWSTR)lpMachine;
919 ObjectInfo.pszObjectName = (LPWSTR)lpKeyName; /* FIXME */
920 ObjectInfo.pszPageTitle = (LPWSTR)lpKeyName; /* FIXME */
921
922 if (!(RegKeySecurity = CRegKeySecurity_fnConstructor(lpKeyPath,
923 hKey,
924 &ObjectInfo,
925 &Result)))
926 {
927 goto Cleanup;
928 }
929
930 /* display the security editor dialog */
931 pfnEditSecurity(hWndOwner,
932 impl_to_interface(RegKeySecurity,
933 ISecurityInformation));
934
935 /* dereference the interface, it should be destroyed here */
936 CRegKeySecurity_fnRelease(RegKeySecurity);
937
938Cleanup:
939 if (lpKeyPath != NULL)
940 {
942 0,
943 lpKeyPath);
944 }
945
946 return Result;
947}
#define SI_CONTAINER
Definition: accctrl.h:116
#define SI_RESET_DACL_TREE
Definition: accctrl.h:127
#define SI_OWNER_RECURSE
Definition: accctrl.h:122
#define SI_EDIT_ALL
Definition: accctrl.h:136
#define SI_EDIT_PERMS
Definition: accctrl.h:113
#define SI_EDIT_EFFECTIVE
Definition: accctrl.h:130
#define SI_RESET_SACL_TREE
Definition: accctrl.h:128
#define SI_ADVANCED
Definition: accctrl.h:118
static __inline ULONG CRegKeySecurity_fnRelease(PCRegKeySecurity obj)
Definition: security.c:85
static PCRegKeySecurity CRegKeySecurity_fnConstructor(LPWSTR lpRegKey, HKEY hRootKey, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
Definition: security.c:762
#define impl_to_interface(impl, iface)
Definition: security.c:76
static PEDITSECURITY pfnEditSecurity
Definition: security.c:806
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define SetLastError(x)
Definition: compat.h:752
static const WCHAR Cleanup[]
Definition: register.c:80
LPWSTR pszObjectName
Definition: accctrl.h:391
LPWSTR pszPageTitle
Definition: accctrl.h:392
DWORD dwFlags
Definition: accctrl.h:388
HINSTANCE hInstance
Definition: accctrl.h:389
LPWSTR pszServerName
Definition: accctrl.h:390

Referenced by _CmdWndProc().

◆ RenameKey()

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

Definition at line 1993 of file edit.c.

1994{
1995 LPCWSTR s;
1996 LPWSTR lpNewSubKey = NULL;
1997 LONG Ret = 0;
1998 SIZE_T cbNewSubKey;
1999
2000 if (!lpSubKey)
2001 return Ret;
2002
2003 s = wcsrchr(lpSubKey, L'\\');
2004 if (s)
2005 {
2006 s++;
2007 cbNewSubKey = (s - lpSubKey + wcslen(lpNewName) + 1) * sizeof(WCHAR);
2008 lpNewSubKey = (LPWSTR) HeapAlloc(GetProcessHeap(), 0, cbNewSubKey);
2009 if (lpNewSubKey != NULL)
2010 {
2011 StringCbCopyNW(lpNewSubKey, cbNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(WCHAR));
2012 StringCbCatW(lpNewSubKey, cbNewSubKey, lpNewName);
2013 lpNewName = lpNewSubKey;
2014 }
2015 else
2017 }
2018
2019 Ret = MoveKey(hKey, lpNewName, hKey, lpSubKey);
2020
2021 if (lpNewSubKey)
2022 {
2023 HeapFree(GetProcessHeap(), 0, lpNewSubKey);
2024 }
2025 return Ret;
2026}
static LONG MoveKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR lpSrcSubKey)
Definition: edit.c:1940
#define wcsrchr
Definition: compat.h:16
STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc, size_t cbToCopy)
Definition: strsafe.h:255
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342

Referenced by TreeWndNotifyProc().

◆ RenameValue()

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

Definition at line 2028 of file edit.c.

2029{
2030 LONG lResult;
2031 HKEY hSubKey = NULL;
2032 DWORD dwType, cbData;
2033 BYTE data[512];
2034
2035 if (lpSubKey)
2036 {
2037 lResult = RegOpenKeyW(hKey, lpSubKey, &hSubKey);
2038 if (lResult != ERROR_SUCCESS)
2039 goto done;
2040 hKey = hSubKey;
2041 }
2042
2043 cbData = sizeof(data);
2044 lResult = RegQueryValueExW(hKey, lpSrcValue, NULL, &dwType, data, &cbData);
2045 if (lResult != ERROR_SUCCESS)
2046 goto done;
2047
2048 lResult = RegSetValueExW(hKey, lpDestValue, 0, dwType, data, cbData);
2049 if (lResult != ERROR_SUCCESS)
2050 goto done;
2051
2052 RegDeleteValue(hKey, lpSrcValue);
2053
2054done:
2055 if (hSubKey)
2056 RegCloseKey(hSubKey);
2057 return lResult;
2058}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define RegDeleteValue
Definition: winreg.h:508

Referenced by ListWndNotifyProc().

◆ ResizeWnd()

void ResizeWnd ( int  cx,
int  cy 
)

Definition at line 108 of file childwnd.c.

109{
110 HDWP hdwp = BeginDeferWindowPos(4);
111 RECT rt, rs, rb;
112 const int nButtonWidth = 44;
113 const int nButtonHeight = 22;
114 int cyEdge = GetSystemMetrics(SM_CYEDGE);
116 SetRect(&rt, 0, 0, cx, cy);
117 cy = 0;
118 if (hStatusBar != NULL)
119 {
121 cy = rs.bottom - rs.top;
122 }
124
126
128 if (hdwp)
130 rt.left, rt.top,
131 rt.right - rt.left - nButtonWidth, nButtonHeight,
132 uFlags);
133 if (hdwp)
135 rt.right - nButtonWidth, rt.top,
136 nButtonWidth, nButtonHeight,
137 uFlags);
138 if (hdwp)
140 rt.left,
141 rt.top + nButtonHeight + cyEdge,
143 rt.bottom - rt.top - cy - 2 * cyEdge,
144 uFlags);
145 if (hdwp)
147 rt.left + cx,
148 rt.top + nButtonHeight + cyEdge,
149 rt.right - cx,
150 rt.bottom - rt.top - cy - 2 * cyEdge,
151 uFlags);
152 if (hdwp)
153 EndDeferWindowPos(hdwp);
154}
HWND hStatusBar
Definition: main.c:36
UINT uFlags
Definition: api.c:59
unsigned int UINT
Definition: ndis.h:50
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define SM_CYEDGE
Definition: winuser.h:1009
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOZORDER
Definition: winuser.h:1247
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
HDWP WINAPI BeginDeferWindowPos(_In_ int)

Referenced by ChildWndProc(), and finish_splitbar().

◆ SaveSettings()

void SaveSettings ( void  Dlg)

Definition at line 115 of file settings.c.

116{
117 HKEY hKey = NULL;
118
120 {
121 TCHAR szBuffer[MAX_PATH];
122
124 ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
125
126 if(*szBuffer != '\0')
127 RegSetValueEx(hKey, _T("Font"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
128
130 ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
131
132 if(*szBuffer != '\0')
133 RegSetValueEx(hKey, _T("CodePage"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
134
135 RegSetValueEx(hKey, _T("Advanced"), 0, REG_DWORD, (LPBYTE)&Settings.IsAdvancedView, (DWORD) sizeof(DWORD));
136
138 }
139}
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
Definition: wdfdevice.h:2595
#define ComboBox_GetText(hwndCtl, lpch, cchMax)
Definition: windowsx.h:58
#define RegSetValueEx
Definition: winreg.h:533
#define RegCreateKeyEx
Definition: winreg.h:501

◆ SelectNode()

BOOL SelectNode ( HWND  hwndTV,
LPCWSTR  keyPath 
)

Definition at line 787 of file treeview.c.

788{
790 HTREEITEM hChildItem;
791 WCHAR szPathPart[128];
792 WCHAR szBuffer[128];
793 LPCWSTR s;
794 TVITEMW tvi;
795
796 /* Load "My Computer" string... */
797 LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, ARRAY_SIZE(szBuffer));
798 StringCbCatW(szBuffer, sizeof(szBuffer), L"\\");
799
800 /* ... and remove it from the key path */
801 if (!_wcsnicmp(keyPath, szBuffer, wcslen(szBuffer)))
802 keyPath += wcslen(szBuffer);
803
804 /* Reinitialize szBuffer */
805 szBuffer[0] = L'\0';
806
807 hRoot = TreeView_GetRoot(hwndTV);
808 hItem = hRoot;
809
810 while(keyPath[0])
811 {
812 size_t copyLength;
813 s = wcschr(keyPath, L'\\');
814 if (s != NULL)
815 {
816 copyLength = (s - keyPath) * sizeof(WCHAR);
817 }
818 else
819 {
820 copyLength = sizeof(szPathPart);
821 }
822 StringCbCopyNW(szPathPart, sizeof(szPathPart), keyPath, copyLength);
823
824 /* Special case for root to expand root key abbreviations */
825 if (hItem == hRoot)
826 {
827 if (!_wcsicmp(szPathPart, L"HKCR"))
828 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_CLASSES_ROOT");
829 else if (!_wcsicmp(szPathPart, L"HKCU"))
830 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_CURRENT_USER");
831 else if (!_wcsicmp(szPathPart, L"HKLM"))
832 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_LOCAL_MACHINE");
833 else if (!_wcsicmp(szPathPart, L"HKU"))
834 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_USERS");
835 else if (!_wcsicmp(szPathPart, L"HKCC"))
836 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_CURRENT_CONFIG");
837 else if (!_wcsicmp(szPathPart, L"HKDD"))
838 StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_DYN_DATA");
839 }
840
841 for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;
842 hChildItem = TreeView_GetNextSibling(hwndTV, hChildItem))
843 {
844 memset(&tvi, 0, sizeof(tvi));
845 tvi.hItem = hChildItem;
847 tvi.pszText = szBuffer;
848 tvi.cchTextMax = ARRAY_SIZE(szBuffer);
849
850 (void)TreeView_GetItem(hwndTV, &tvi);
851
852 if (!_wcsicmp(szBuffer, szPathPart))
853 break;
854 }
855
856 if (!hChildItem)
857 return FALSE;
858
859 if (tvi.cChildren > 0)
860 {
861 if (!TreeView_Expand(hwndTV, hChildItem, TVE_EXPAND))
862 return FALSE;
863 }
864
865 keyPath = s ? s + 1 : L"";
866 hItem = hChildItem;
867 }
868
871
872 return TRUE;
873}
#define wcschr
Definition: compat.h:17
#define TreeView_EnsureVisible(hwnd, hitem)
Definition: commctrl.h:3545
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)

Referenced by _CmdWndProc(), AddressBarProc(), ChooseFavorite(), FindNext(), and LoadSettings().

◆ SetupStatusBar()

void SetupStatusBar ( HWND  hWnd,
BOOL  bResize 
)

Definition at line 178 of file framewnd.c.

179{
180 RECT rc;
181 int nParts;
182 GetClientRect(hWnd, &rc);
183 nParts = rc.right;
184 /* nParts = -1;*/
185 if (bResize)
188}
#define SB_SETPARTS
Definition: commctrl.h:1954

Referenced by InitInstance(), OnExitMenuLoop(), and resize_frame_rect().

◆ ShowAboutBox()

void ShowAboutBox ( HWND  hWnd)

Definition at line 25 of file about.c.

26{
27 WCHAR AppStr[255];
28 LoadStringW(hInst, IDS_APP_TITLE, AppStr, ARRAY_SIZE(AppStr));
30}
#define IDI_REGEDIT
Definition: resource.h:35
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2119

◆ StartKeyRename()

HWND StartKeyRename ( HWND  hwndTV)

Definition at line 399 of file treeview.c.

400{
402
403 if(!(hItem = TreeView_GetSelection(hwndTV))) return 0;
404 return TreeView_EditLabel(hwndTV, hItem);
405}

◆ TreeWndNotifyProc()

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

Definition at line 643 of file treeview.c.

644{
646 *Result = TRUE;
647
648 switch (((LPNMHDR)lParam)->code)
649 {
652 return TRUE;
653 case TVN_SELCHANGED:
654 {
655 NMTREEVIEW* pnmtv = (NMTREEVIEW*)lParam;
656 /* Get the parent of the current item */
657 HTREEITEM hParentItem = TreeView_GetParent(g_pChildWnd->hTreeWnd, pnmtv->itemNew.hItem);
658
659 UpdateAddress(pnmtv->itemNew.hItem, NULL, NULL, TRUE);
660
661 /* Disable the Permissions and new key menu items for 'My Computer' */
664
665 /*
666 * Disable Delete/Rename menu options for 'My Computer' (first item so doesn't have any parent)
667 * and HKEY_* keys (their parent is 'My Computer' and the previous remark applies).
668 */
669 if (!hParentItem || !TreeView_GetParent(g_pChildWnd->hTreeWnd, hParentItem))
670 {
675 }
676 else
677 {
682 }
683
684 return TRUE;
685 }
686 case NM_SETFOCUS:
688 break;
690 {
692 /* cancel label edit for rootkeys */
693 if (!TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem) ||
695 {
696 *Result = TRUE;
697 }
698 else
699 {
700 *Result = FALSE;
701 }
702 return TRUE;
703 }
704 case TVN_ENDLABELEDIT:
705 {
706 LPCWSTR keyPath;
707 HKEY hRootKey;
708 HKEY hKey = NULL;
710 LONG nRenResult;
711 LONG lResult = TRUE;
712 WCHAR szBuffer[MAX_PATH];
713 WCHAR Caption[128];
714
715 if (ptvdi->item.pszText)
716 {
717 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem), &hRootKey);
718 if (wcslen(keyPath))
719 _snwprintf(szBuffer, ARRAY_SIZE(szBuffer), L"%s\\%s", keyPath, ptvdi->item.pszText);
720 else
721 _snwprintf(szBuffer, ARRAY_SIZE(szBuffer), L"%s", ptvdi->item.pszText);
722 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, ptvdi->item.hItem, &hRootKey);
723 if (RegOpenKeyExW(hRootKey, szBuffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
724 {
725 lResult = FALSE;
727 TreeView_EditLabel(g_pChildWnd->hTreeWnd, ptvdi->item.hItem);
728 }
729 else
730 {
731 nRenResult = RenameKey(hRootKey, keyPath, ptvdi->item.pszText);
732 if (nRenResult != ERROR_SUCCESS)
733 {
734 LoadStringW(hInst, IDS_ERROR, Caption, ARRAY_SIZE(Caption));
735 ErrorMessageBox(hWnd, Caption, nRenResult);
736 lResult = FALSE;
737 }
738 else
739 UpdateAddress(ptvdi->item.hItem, hRootKey, szBuffer, FALSE);
740 }
741 *Result = lResult;
742 }
743 return TRUE;
744 }
745 }
746 return FALSE;
747}
#define IDS_ERROR
Definition: resource.h:18
VOID UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath, BOOL bSelectNone)
Definition: childwnd.c:317
LONG RenameKey(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewName)
Definition: edit.c:1993
#define ID_EDIT_DELETE
Definition: resource.h:57
#define ID_EDIT_NEW_KEY
Definition: resource.h:63
#define ID_TREE_RENAME
Definition: resource.h:152
#define ID_TREE_DELETE
Definition: resource.h:151
#define ID_EDIT_PERMISSIONS
Definition: resource.h:150
BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW *pnmtv)
Definition: treeview.c:516
#define TVN_SELCHANGED
Definition: commctrl.h:3735
#define TVN_BEGINLABELEDIT
Definition: commctrl.h:3743
#define TVN_ENDLABELEDIT
Definition: commctrl.h:3744
#define NMTREEVIEW
Definition: commctrl.h:3642
#define TVN_ITEMEXPANDING
Definition: commctrl.h:3738
#define LPNMTVDISPINFO
Definition: commctrl.h:3676

Referenced by ChildWndProc().

◆ txt_export_registry_key()

BOOL txt_export_registry_key ( LPCWSTR  file_name,
LPCWSTR  path 
)

Definition at line 401 of file txtproc.c.

402{
403 if (path && *path)
405 else
407}
static BOOL txt_export_key(LPCWSTR file_name, LPCWSTR path)
Definition: txtproc.c:340
static BOOL txt_export_all(LPCWSTR file_name, LPCWSTR path)
Definition: txtproc.c:367

Referenced by ExportRegistryFile().

◆ UpdateAddress()

VOID UpdateAddress ( HTREEITEM  hItem,
HKEY  hRootKey,
LPCWSTR  pszPath,
BOOL  bSelectNone 
)

Definition at line 317 of file childwnd.c.

318{
319 LPCWSTR keyPath, rootName;
320 LPWSTR fullPath;
321 DWORD cbFullPath;
322
323 /* Wipe the listview, the status bar and the address bar if the root key was selected */
325 {
329 return;
330 }
331
332 if (pszPath == NULL)
333 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey);
334 else
335 keyPath = pszPath;
336
337 if (keyPath)
338 {
339 RefreshListView(g_pChildWnd->hListWnd, hRootKey, keyPath, bSelectNone);
340 rootName = get_root_key_name(hRootKey);
341 cbFullPath = (wcslen(rootName) + 1 + wcslen(keyPath) + 1) * sizeof(WCHAR);
342 fullPath = malloc(cbFullPath);
343 if (fullPath)
344 {
345 /* set (correct) the address bar text */
346 if (keyPath[0] != UNICODE_NULL)
347 StringCbPrintfW(fullPath, cbFullPath, L"%s%s%s", rootName,
348 ((keyPath[0] == L'\\') ? L"" : L"\\"), keyPath);
349 else
350 StringCbCopyW(fullPath, cbFullPath, rootName);
351
354 free(fullPath);
355
356 /* disable hive manipulation items temporarily (enable only if necessary) */