55 (*pKeyPath)[*pPathLen] =
L'\\';
63 item.pszText = *pKeyPath + *pPathLen;
64 maxLen = *pMaxLen - *pPathLen;
74 if (!newStr)
return FALSE;
85 int pathLen = 0, maxLen;
92 if (maxLen == -1)
return NULL;
117 if (
RegQueryInfoKeyW(
hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) !=
ERROR_SUCCESS)
141 DWORD dwCount, dwIndex, dwMaxSubKeyLen;
163 if (
RegQueryInfoKeyW(
hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) !=
ERROR_SUCCESS)
197 DWORD dwPhysicalSize = 0;
198 DWORD dwActualSize = 0;
199 DWORD dwNewPhysicalSize;
201 DWORD dwStep = 10000;
207 if (dwActualSize + dwMaxSubKeyLen + 1 > dwPhysicalSize)
209 dwNewPhysicalSize = dwActualSize + dwMaxSubKeyLen + 1 + dwStep;
218 dwPhysicalSize = dwNewPhysicalSize;
219 pszNodes = pszNewNodes;
223 tvItem.
hItem = childItem;
224 tvItem.
pszText = &pszNodes[dwActualSize];
225 tvItem.
cchTextMax = dwPhysicalSize - dwActualSize;
229 dwActualSize += (
DWORD)
wcslen(&pszNodes[dwActualSize]) + 1;
233 pszNodes[dwActualSize] =
L'\0';
245 childItem = nextItem;
250 for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
252 DWORD cName = dwMaxSubKeyLen, dwSubCount;
280 if (
RegQueryInfoKeyW(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) !=
ERROR_SUCCESS)
371 item.hItem = hNewItem;
505 DWORD dwCount, dwIndex, dwMaxSubKeyLen;
512 static int expanding;
513 if (expanding)
return FALSE;
523 if (!keyPath)
goto done;
535 errCode =
RegQueryInfoKeyW(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
539 if (!
Name)
goto done;
541 for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
543 DWORD cName = dwMaxSubKeyLen, dwSubCount;
550 errCode =
RegQueryInfoKeyW(
hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
573 WCHAR szNewKeyFormat[128];
584 if (pszKeyPath[0] ==
L'\0')
595 wsprintf(szNewKey, szNewKeyFormat, iIndex++);
699 if (ptvdi->item.pszText)
715 nRenResult =
RenameKey(hRootKey, keyPath, ptvdi->item.pszText);
749 if (!hwndTV)
return NULL;
775 WCHAR szPathPart[128];
786 keyPath +=
wcslen(szBuffer);
803 wcscpy(szPathPart,
L"HKEY_CLASSES_ROOT");
805 wcscpy(szPathPart,
L"HKEY_CURRENT_USER");
807 wcscpy(szPathPart,
L"HKEY_LOCAL_MACHINE");
809 wcscpy(szPathPart,
L"HKEY_USERS");
811 wcscpy(szPathPart,
L"HKEY_CURRENT_CONFIG");
813 wcscpy(szPathPart,
L"HKEY_DYN_DATA");
819 memset(&tvi, 0,
sizeof(tvi));
820 tvi.
hItem = hChildItem;
827 if (!
_wcsicmp(szBuffer, szPathPart))
840 keyPath =
s ?
s + 1 :
L"";
INT WINAPI ImageList_GetImageCount(HIMAGELIST himl)
BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW *pnmtv)
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode,...)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
static BOOL InitTreeViewItems(HWND hwndTV, LPWSTR pHostName)
BOOL WINAPI DestroyIcon(_In_ HICON)
#define UNREFERENCED_PARAMETER(P)
#define TreeView_EditLabel(hwnd, hitem)
#define HKEY_CURRENT_USER
#define TreeView_GetChild(hwnd, hitem)
struct _TREEITEM * HTREEITEM
_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)
BOOL RefreshTreeView(HWND hwndTV)
int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage,...)
#define TVIS_EXPANDEDONCE
#define REG_OPENED_EXISTING_KEY
#define TreeView_GetNextSibling(hwnd, hitem)
#define TVIF_SELECTEDIMAGE
#define HKEY_CURRENT_CONFIG
BOOL WINAPI DestroyWindow(_In_ HWND)
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
void DestroyTreeView(HWND hwndTV)
#define TreeView_GetImageList(hwnd, iImage)
DWORD WINAPI GetVersion(VOID)
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)
static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY *phKey, LPWSTR *pKeyPath, int *pPathLen, int *pMaxLen)
LONG RenameKey(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewName)
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
#define TreeView_InsertItem(hwnd, lpis)
GLenum GLuint GLenum GLsizei const GLchar * buf
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LONG WINAPI RegCloseKey(HKEY hKey)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define TVN_BEGINLABELEDIT
#define ID_EDIT_PERMISSIONS
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
HWND CreateTreeView(HWND hwndParent, LPWSTR pHostName, HMENU id)
#define TreeView_SetImageList(hwnd, himl, iImage)
#define TreeView_DeleteItem(hwnd, hitem)
#define REG_OPTION_NON_VOLATILE
#define TreeView_GetSelection(hwnd)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define TreeView_GetItemState(hwndTV, hti, mask)
BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
int WINAPI GetSystemMetrics(_In_ int)
INT WINAPI ImageList_AddIcon(HIMAGELIST himl, HICON hIcon)
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)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
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 TreeView_GetParent(hwnd, hitem)
BOOL DeleteNode(HWND hwndTV, HTREEITEM hItem)
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define TVN_ITEMEXPANDING
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static BOOL InitTreeViewImageLists(HWND hwndTV)
#define TreeView_EnsureVisible(hwnd, hitem)
#define TreeView_GetRoot(hwnd)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define TreeView_SelectItem(hwnd, hitem)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define TreeView_Select(hwnd, hitem, code)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define TreeView_SetItem(hwnd, pitem)
#define TVS_SHOWSELALWAYS
HWND StartKeyRename(HWND hwndTV)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define HKEY_CLASSES_ROOT
#define MAKEINTRESOURCEW(i)
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)
#define TreeView_Expand(hwnd, hitem, code)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
#define HeapFree(x, y, z)
#define TreeView_GetItem(hwnd, pitem)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define HKEY_LOCAL_MACHINE
VOID UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath)