STDAPI DllUnregisterServer(void) { SHDeleteKeyW(HKEY_CLASSES_ROOT, szNetConnectClass); SHDeleteKeyW(HKEY_LOCAL_MACHINE, szNamespaceKey); return S_OK; }
BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath) { BOOL result = FALSE; LONG lRet; HKEY hKey; lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey); if (lRet != ERROR_SUCCESS) { error_code_messagebox(hwnd, lRet); return FALSE; } if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, keyPath) != IDYES) goto done; lRet = SHDeleteKeyW(hKeyRoot, keyPath); if (lRet != ERROR_SUCCESS) { error(hwnd, IDS_BAD_KEY, keyPath); goto done; } result = TRUE; done: RegCloseKey(hKey); return result; }
/* * RegisterAllClasses() */ static HRESULT SetupRegisterAllClasses(const FactoryTemplate * pList, int num, LPCWSTR szFileName, BOOL bRegister) { HRESULT hr = NOERROR; HKEY hkey; OLECHAR szCLSID[CHARS_IN_GUID]; LONG i, ret = RegCreateKeyW(HKEY_CLASSES_ROOT, clsid_keyname, &hkey); if (ERROR_SUCCESS != ret) return HRESULT_FROM_WIN32(ret); for (i = 0; i < num; i++, pList++) { /* (un)register CLSID and InprocServer32 */ hr = StringFromGUID2(pList->m_ClsID, szCLSID, CHARS_IN_GUID); if (SUCCEEDED(hr)) { if (bRegister ) hr = SetupRegisterClass(hkey, szCLSID, pList->m_Name, szFileName, ips32_keyname, tmodel_both); else hr = SHDeleteKeyW(hkey, szCLSID); } } RegCloseKey(hkey); return hr; }
static bool remove(const string& name) { lstring part = name.split("/"); HKEY rootKey = root(part.take(0)); string node = part.take(); string path = part.merge("\\"); if(node.empty()) return SHDeleteKeyW(rootKey, utf16_t(path)) == ERROR_SUCCESS; return SHDeleteValueW(rootKey, utf16_t(path), utf16_t(node)) == ERROR_SUCCESS; }
int _tmain(int argc, _TCHAR* argv[]) { DWORD result = SHDeleteKeyW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\сп╣ю╢й╣Д"); if (result != ERROR_SUCCESS) { DWORD error = GetLastError(); } return 0; }
/*********************************************************************** * NdrDllUnregisterProxy [RPCRT4.@] */ HRESULT WINAPI NdrDllUnregisterProxy(HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid) { static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0}; static const WCHAR interfaceW[] = {'I','n','t','e','r','f','a','c','e','\\',0}; WCHAR keyname[50]; WCHAR clsid[39]; TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid)); if (pclsid) format_clsid( clsid, pclsid ); else if ((*pProxyFileList)->TableSize > 0) format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid); else return E_NOINTERFACE; /* unregister interfaces */ while (*pProxyFileList) { unsigned u; for (u=0; u<(*pProxyFileList)->TableSize; u++) { CInterfaceStubVtbl *proxy = (*pProxyFileList)->pStubVtblList[u]; PCInterfaceName name = (*pProxyFileList)->pNamesArray[u]; TRACE("unregistering %s %s\n", debugstr_a(name), debugstr_guid(proxy->header.piid)); strcpyW( keyname, interfaceW ); format_clsid( keyname + strlenW(keyname), proxy->header.piid ); SHDeleteKeyW(HKEY_CLASSES_ROOT, keyname); } pProxyFileList++; } /* unregister clsid */ strcpyW( keyname, clsidW ); strcatW( keyname, clsid ); SHDeleteKeyW(HKEY_CLASSES_ROOT, keyname); return S_OK; }
/// <summary> /// Unload arbitrary driver /// </summary> /// <param name="svcName">Driver service name</param> /// <returns>Status</returns> NTSTATUS DriverControl::UnloadDriver( const std::wstring& svcName ) { UNICODE_STRING Ustr = { 0 }; std::wstring regPath = L"\\registry\\machine\\SYSTEM\\CurrentControlSet\\Services\\" + svcName; SAFE_CALL( RtlInitUnicodeString, &Ustr, regPath.c_str() ); // Remove previously loaded instance, if any NTSTATUS status = SAFE_NATIVE_CALL( NtUnloadDriver, &Ustr ); SHDeleteKeyW( HKEY_LOCAL_MACHINE, (L"SYSTEM\\CurrentControlSet\\Services\\" + svcName).c_str() ); return status; }
// // Registry keys are removed here. // STDAPI DllUnregisterServer() { WCHAR szSubKey[MAX_PATH]; WCHAR szBoxShellFolderID[MAX_PATH]; //Delete the context menu entries. HRESULT hr = StringFromGUID2(CLSID_BoxShellFolder, szBoxShellFolderID, ARRAYSIZE(szBoxShellFolderID)); if (SUCCEEDED(hr)) { hr = StringCchPrintfW(szSubKey, ARRAYSIZE(szSubKey), L"Software\\Classes\\CLSID\\%s", szBoxShellFolderID); if (SUCCEEDED(hr)) { hr = SHDeleteKeyW(HKEY_CURRENT_USER, szSubKey); } } hr = StringCchPrintfW(szSubKey, ARRAYSIZE(szSubKey), MYCOMPUTER_NAMESPACE_GUID, szBoxShellFolderID); if (SUCCEEDED(hr)) { //MessageBoxW(NULL, szSubKey, NULL, 0); hr = SHDeleteKeyW(HKEY_CURRENT_USER, szSubKey); } hr = StringCchPrintfW(szSubKey, ARRAYSIZE(szSubKey), SHELL_EXT_APPROVED, szBoxShellFolderID); if (SUCCEEDED(hr)) { //MessageBoxW(NULL, szSubKey, NULL, 0); hr = SHDeleteKeyW(HKEY_LOCAL_MACHINE, szSubKey); } RefreshFolderViews(CSIDL_DRIVES); return SUCCEEDED(hr) ? S_OK : SELFREG_E_CLASS; }
ULONG DeleteRegistryKey( const LPWSTR DriverName ) { LPWSTR RegistryPath; ULONG dwErrorCode; dwErrorCode = StringConcat(&RegistryPath, REGISTRY_PATH_PREFIX, DriverName); if (dwErrorCode) return GetLastError(); dwErrorCode = SHDeleteKeyW(HKEY_LOCAL_MACHINE, RegistryPath); StringFree(RegistryPath); return dwErrorCode; }
JNIEXPORT void JNICALL Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteKeyW( JNIEnv *env, jclass cla, jint _type, jstring _subkey_name, jboolean _recursive ) { HKEY key; HKEY subkey; WCHAR subkey_name[1024]; jstring result = NULL; key = mapHKEY( env, _type ); if ( key == NULL ){ return; } if ( !jstringToCharsW( env, _subkey_name, subkey_name, sizeof( subkey_name ))){ return; } if ( RegOpenKeyW( key, subkey_name, &subkey ) == ERROR_SUCCESS ){ RegCloseKey(subkey); if ( _recursive ){ if ( SHDeleteKeyW( key, subkey_name ) != ERROR_SUCCESS ){ throwException( env, "deleteKey", "SHDeleteKey failed" ); } }else{ if ( RegDeleteKeyW( key, subkey_name ) != ERROR_SUCCESS ){ throwException( env, "deleteKey", "RegDeleteKey failed" ); } } } }
int RegElement::removeRegKey(HKEY root, const QString& path, const QString& subkey) { HKEY hKey; LONG result = RegOpenKeyExW(root, path.toStdWString().c_str(), 0L, KEY_ALL_ACCESS, &hKey); if (result != ERROR_SUCCESS) { return -1; } result = SHDeleteKeyW(hKey, subkey.toStdWString().c_str()); if (result != ERROR_SUCCESS) { return -1; } return 0; }
/*********************************************************************** * unregister_interfaces */ static HRESULT unregister_interfaces(struct regsvr_interface const *list) { LONG res = ERROR_SUCCESS; HKEY interface_key; res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, KEY_READ | KEY_WRITE, &interface_key); if (res == ERROR_FILE_NOT_FOUND) return S_OK; if (res != ERROR_SUCCESS) goto error_return; for (; res == ERROR_SUCCESS && list->iid; ++list) { WCHAR buf[39]; StringFromGUID2(list->iid, buf, 39); res = SHDeleteKeyW(interface_key, buf); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; } RegCloseKey(interface_key); error_return: return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
/*********************************************************************** * unregister_mediatypes_parsing */ static HRESULT unregister_mediatypes_parsing(struct regsvr_mediatype_parsing const *list) { LONG res; HKEY mediatype_key; HKEY majortype_key; WCHAR buf[39]; 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); for (; res == ERROR_SUCCESS && list->majortype; ++list) { StringFromGUID2(list->majortype, buf, 39); res = RegOpenKeyExW(mediatype_key, buf, 0, KEY_READ | KEY_WRITE, &majortype_key); if (res == ERROR_FILE_NOT_FOUND) { res = ERROR_SUCCESS; continue; } if (res != ERROR_SUCCESS) break; StringFromGUID2(list->subtype, buf, 39); res = SHDeleteKeyW(majortype_key, buf); if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS; /* Removed majortype key if there is no more subtype key */ res = RegDeleteKeyW(majortype_key, 0); if (res == ERROR_ACCESS_DENIED) res = ERROR_SUCCESS; RegCloseKey(majortype_key); } RegCloseKey(mediatype_key); return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; }
/*********************************************************************** * 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 = SHDeleteKeyW(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 = SHDeleteKeyA(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 = SHDeleteKeyA(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; }
BOOL RenameKey(HWND hwnd, HKEY hRootKey, LPCWSTR keyPath, LPCWSTR newName) { LPWSTR parentPath = 0; LPCWSTR srcSubKey = 0; HKEY parentKey = 0; HKEY destKey = 0; BOOL result = FALSE; LONG lRet; DWORD disposition; if (!keyPath || !newName) return FALSE; if (!strrchrW(keyPath, '\\')) { parentKey = hRootKey; srcSubKey = keyPath; } else { LPWSTR srcSubKey_copy; parentPath = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(keyPath)+1)*sizeof(WCHAR)); lstrcpyW(parentPath, keyPath); srcSubKey_copy = strrchrW(parentPath, '\\'); *srcSubKey_copy = 0; srcSubKey = srcSubKey_copy + 1; lRet = RegOpenKeyExW(hRootKey, parentPath, 0, KEY_READ | KEY_CREATE_SUB_KEY, &parentKey); if (lRet != ERROR_SUCCESS) { error_code_messagebox(hwnd, lRet); goto done; } } /* The following fails if the old name is the same as the new name. */ if (!lstrcmpW(srcSubKey, newName)) goto done; lRet = RegCreateKeyExW(parentKey, newName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL /* FIXME */, &destKey, &disposition); if (disposition == REG_OPENED_EXISTING_KEY) lRet = ERROR_FILE_EXISTS; /* FIXME: we might want a better error message than this */ if (lRet != ERROR_SUCCESS) { error_code_messagebox(hwnd, lRet); goto done; } /* FIXME: SHCopyKey does not copy the security attributes */ lRet = SHCopyKeyW(parentKey, srcSubKey, destKey, 0); if (lRet != ERROR_SUCCESS) { RegCloseKey(destKey); RegDeleteKeyW(parentKey, newName); error_code_messagebox(hwnd, lRet); goto done; } lRet = SHDeleteKeyW(hRootKey, keyPath); if (lRet != ERROR_SUCCESS) { error_code_messagebox(hwnd, lRet); goto done; } result = TRUE; done: RegCloseKey(destKey); if (parentKey) { RegCloseKey(parentKey); HeapFree(GetProcessHeap(), 0, parentPath); } return result; }