return NULL;
}
-BOOL CreateKey(HKEY hKey)
+BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
{
+ BOOL result = FALSE;
LONG lRet = ERROR_SUCCESS;
HKEY retKey;
TCHAR keyName[32];
TCHAR newKey[COUNT_OF(keyName) - 4];
int keyNum;
+ HKEY hKey;
- /* If we have illegal parameter return with operation failure */
- if (!hKey) return FALSE;
+ lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_CREATE_SUB_KEY, &hKey);
+ if (lRet != ERROR_SUCCESS) return FALSE;
- if (!LoadString(GetModuleHandle(0), IDS_NEWKEY, newKey, COUNT_OF(newKey))) return FALSE;
+ if (!LoadString(GetModuleHandle(0), IDS_NEWKEY, newKey, COUNT_OF(newKey))) goto done;
/* try to find out a name for the newly create key (max 100 times) */
for (keyNum = 1; keyNum < 100; keyNum++) {
if (lRet != ERROR_SUCCESS) break;
RegCloseKey(retKey);
}
- if (lRet == ERROR_SUCCESS) return FALSE;
+ if (lRet == ERROR_SUCCESS) goto done;
lRet = RegCreateKey(hKey, keyName, &retKey);
- if (lRet != ERROR_SUCCESS) return FALSE;
+ if (lRet != ERROR_SUCCESS) goto done;
+ result = TRUE;
+done:
RegCloseKey(retKey);
- return TRUE;
+ return result;
}
-BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
+BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName)
{
+ BOOL result = FALSE;
DWORD type;
LONG lRet;
- BOOL result = FALSE;
+ HKEY hKey;
- if (!hKey || !valueName) return FALSE;
+ lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
+ if (lRet != ERROR_SUCCESS) return FALSE;
editValueName = valueName;
if(!(stringValueData = read_value(hwnd, hKey, valueName, &type, 0))) goto done;
done:
HeapFree(GetProcessHeap(), 0, stringValueData);
stringValueData = NULL;
-
+ RegCloseKey(hKey);
return result;
}
-BOOL DeleteValue(HWND hwnd, HKEY hKey, LPCTSTR valueName)
+BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName)
{
+ BOOL result = FALSE;
LONG lRet;
+ HKEY hKey;
- if (!hKey || !valueName) return FALSE;
+ lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_SET_VALUE, &hKey);
+ if (lRet != ERROR_SUCCESS) return FALSE;
if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, valueName) != IDYES)
- return FALSE;
+ goto done;
lRet = RegDeleteValue(hKey, valueName);
if (lRet != ERROR_SUCCESS) {
error(hwnd, IDS_BAD_VALUE, valueName);
}
- return lRet == ERROR_SUCCESS;
+ if (lRet != ERROR_SUCCESS) goto done;
+ result = TRUE;
+
+done:
+ RegCloseKey(hKey);
+ return result;
}
-BOOL CreateValue(HWND hwnd, HKEY hKey, DWORD valueType)
+BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, DWORD valueType)
{
LONG lRet = ERROR_SUCCESS;
TCHAR valueName[32];
TCHAR newValue[COUNT_OF(valueName) - 4];
DWORD valueDword = 0;
+ BOOL result = FALSE;
int valueNum;
+ HKEY hKey;
- /* If we have illegal parameter return with operation failure */
- if (!hKey) return FALSE;
+ lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
+ if (lRet != ERROR_SUCCESS) return FALSE;
- if (!LoadString(GetModuleHandle(0), IDS_NEWVALUE, newValue, COUNT_OF(newValue))) return FALSE;
+ if (!LoadString(GetModuleHandle(0), IDS_NEWVALUE, newValue, COUNT_OF(newValue))) goto done;
/* try to find out a name for the newly create key (max 100 times) */
for (valueNum = 1; valueNum < 100; valueNum++) {
lRet = RegQueryValueEx(hKey, valueName, 0, 0, 0, 0);
if (lRet != ERROR_SUCCESS) break;
}
- if (lRet == ERROR_SUCCESS) return FALSE;
+ if (lRet == ERROR_SUCCESS) goto done;
lRet = RegSetValueEx(hKey, valueName, 0, valueType, (BYTE*)&valueDword, sizeof(DWORD));
- if (lRet != ERROR_SUCCESS) return FALSE;
+ if (lRet != ERROR_SUCCESS) goto done;
+ result = TRUE;
- return TRUE;
+done:
+ RegCloseKey(hKey);
+ return result;
}
-BOOL RenameValue(HWND hwnd, HKEY hRootKey, LPCTSTR keyPath, LPCTSTR oldName, LPCTSTR newName)
+BOOL RenameValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR oldName, LPCTSTR newName)
{
LPTSTR value = NULL;
DWORD type;
BOOL result = FALSE;
HKEY hKey;
- lRet = RegOpenKeyEx(hRootKey, keyPath, 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS) goto done;
+ lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
+ if (lRet != ERROR_SUCCESS) return FALSE;
value = read_value(hwnd, hKey, oldName, &type, &len);
if(!value) goto done;
lRet = RegSetValueEx(hKey, newName, 0, type, (BYTE*)value, len);
done:
HeapFree(GetProcessHeap(), 0, value);
+ RegCloseKey(hKey);
return result;
}
*/
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- HKEY hKeyRoot = 0, hKey = 0;
+ HKEY hKeyRoot = 0;
LPCTSTR keyPath;
LPCTSTR valueName;
- BOOL result = TRUE;
- LONG lRet;
DWORD valueType;
- if ((keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot))) {
- lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS) hKey = 0;
- }
+ keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
valueName = GetValueName(g_pChildWnd->hListWnd);
switch (LOWORD(wParam)) {
PrintRegistryHive(hWnd, _T(""));
break;
case ID_EDIT_DELETE:
- if (DeleteValue(hWnd, hKey, valueName))
+ if (DeleteValue(hWnd, hKeyRoot, keyPath, valueName))
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
break;
case ID_EDIT_MODIFY:
- if (ModifyValue(hWnd, hKey, valueName))
+ if (ModifyValue(hWnd, hKeyRoot, keyPath, valueName))
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
break;
case ID_EDIT_COPYKEYNAME:
CopyKeyName(hWnd, _T(""));
break;
case ID_EDIT_NEW_KEY:
- CreateKey(hKey);
+ CreateKey(hWnd, hKeyRoot, keyPath);
break;
case ID_EDIT_NEW_STRINGVALUE:
valueType = REG_SZ;
valueType = REG_DWORD;
/* fall through */
create_value:
- if (CreateValue(hWnd, hKey, valueType))
+ if (CreateValue(hWnd, hKeyRoot, keyPath, valueType))
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
case ID_EDIT_RENAME:
StartValueRename(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
return TRUE;
}
default:
- result = FALSE;
+ return FALSE;
}
- RegCloseKey(hKey);
- return result;
+ return TRUE;
}
/********************************************************************************