/*********************************************************************** * unregister_coclasses */ static HRESULT unregister_coclasses(struct regsvr_coclass const *list) { LONG res = ERROR_SUCCESS; HKEY coclass_key; res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, KEY_READ | KEY_WRITE, &coclass_key); if (res == ERROR_FILE_NOT_FOUND) return S_OK; if (res != ERROR_SUCCESS) goto error_return; for (; res == ERROR_SUCCESS && list->clsid; ++list) { WCHAR buf[39]; StringFromGUID2(list->clsid, buf, 39); res = RegDeleteTreeW(coclass_key, buf); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; if (res != ERROR_SUCCESS) goto error_close_coclass_key; if (list->progid) { res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; if (res != ERROR_SUCCESS) goto error_close_coclass_key; } if (list->viprogid) { res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->viprogid); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; if (res != ERROR_SUCCESS) goto error_close_coclass_key; } } error_close_coclass_key: RegCloseKey(coclass_key); error_return: return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
/*********************************************************************** * unregister_mediatypes_extension */ static HRESULT unregister_mediatypes_extension(struct regsvr_mediatype_extension const *list) { LONG res; HKEY mediatype_key; HKEY extensions_root_key = NULL; res = RegOpenKeyExW(HKEY_CLASSES_ROOT, mediatype_name, 0, KEY_READ | KEY_WRITE, &mediatype_key); if (res == ERROR_FILE_NOT_FOUND) return S_OK; if (res != ERROR_SUCCESS) return HRESULT_FROM_WIN32(res); res = RegOpenKeyExW(mediatype_key, extensions_keyname, 0, KEY_READ | KEY_WRITE, &extensions_root_key); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; else if (res == ERROR_SUCCESS) for (; res == ERROR_SUCCESS && list->majortype; ++list) { res = RegDeleteTreeA(extensions_root_key, list->extension); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; } RegCloseKey(mediatype_key); if (extensions_root_key) RegCloseKey(extensions_root_key); return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
/*********************************************************************** * unregister_progids */ static HRESULT unregister_progids(struct progid const *list) { LONG res = ERROR_SUCCESS; for (; res == ERROR_SUCCESS && list->name; ++list) { res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->name); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; } return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
static void init_original_display_mode(void) { BOOL success = FALSE; HKEY mac_driver_hkey, parent_hkey; DWORD disposition; struct macdrv_display *displays = NULL; int num_displays, i; if (inited_original_display_mode) return; /* @@ Wine registry key: HKLM\Software\Wine\Mac Driver */ if (RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Mac Driver", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &mac_driver_hkey, NULL)) return; /* @@ Wine registry key: HKLM\Software\Wine\Mac Driver\Initial Display Mode */ if (RegCreateKeyExA(mac_driver_hkey, initial_mode_key, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &parent_hkey, &disposition)) { parent_hkey = NULL; goto fail; } /* If we didn't create a new key, then it already existed. Something already stored the initial display mode since Wine was started. We don't want to overwrite it. */ if (disposition != REG_CREATED_NEW_KEY) goto done; if (macdrv_get_displays(&displays, &num_displays)) goto fail; for (i = 0; i < num_displays; i++) { if (!write_display_settings(parent_hkey, displays[i].displayID)) goto fail; } done: success = TRUE; fail: macdrv_free_displays(displays); RegCloseKey(parent_hkey); if (!success && parent_hkey) RegDeleteTreeA(mac_driver_hkey, initial_mode_key); RegCloseKey(mac_driver_hkey); if (success) inited_original_display_mode = TRUE; }
DWORD DeleteTreeFromRegistry( PCSTR pszPath ) { DWORD ceError = ERROR_SUCCESS; HANDLE hReg = (HANDLE)NULL; HKEY pRootKey = NULL; ceError = RegOpenServer(&hReg); BAIL_ON_CENTERIS_ERROR(ceError); ceError = RegOpenKeyExA( hReg, NULL, HKEY_THIS_MACHINE, 0, KEY_ALL_ACCESS, &pRootKey); if (ceError) { DJ_LOG_ERROR( "Failed to open registry root key %s",HKEY_THIS_MACHINE); goto error; } ceError = RegDeleteTreeA( hReg, pRootKey, pszPath); if (ceError) { //Donot log if ceError is about the key which is not present ceError = ERROR_SUCCESS; } cleanup: RegCloseKey(hReg, pRootKey); pRootKey = NULL; RegCloseServer(hReg); hReg = NULL; return(ceError); error: goto cleanup; }
void Registry::deleteKeyRecursive(std::string const & subKey) { check( RegDeleteTreeA(hKey_, subKey.c_str()), "Error deleting key tree"); }