From 3003ee9ba1a395a3da20d54efb6641759d942635 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Mon, 20 Jan 2014 16:04:58 +0900 Subject: [PATCH] taskschd: Implement ITaskFolder::DeleteFolder. --- dlls/taskschd/folder.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/dlls/taskschd/folder.c b/dlls/taskschd/folder.c index cb285fdc88..9114417f73 100644 --- a/dlls/taskschd/folder.c +++ b/dlls/taskschd/folder.c @@ -137,6 +137,29 @@ static HRESULT reg_open_folder(const WCHAR *path, HKEY *hfolder) return HRESULT_FROM_WIN32(ret); } +static HRESULT reg_delete_folder(const WCHAR *path, const WCHAR *name) +{ + HKEY hroot, hfolder; + DWORD ret; + + ret = RegCreateKeyA(HKEY_LOCAL_MACHINE, root, &hroot); + if (ret) return HRESULT_FROM_WIN32(ret); + + while (*path == '\\') path++; + ret = RegOpenKeyExW(hroot, path, 0, DELETE, &hfolder); + + RegCloseKey(hroot); + + while (*name == '\\') name++; + if (ret == ERROR_SUCCESS) + { + ret = RegDeleteKeyW(hfolder, name); + RegCloseKey(hfolder); + } + + return HRESULT_FROM_WIN32(ret); +} + static inline void reg_close_folder(HKEY hfolder) { RegCloseKey(hfolder); @@ -176,8 +199,14 @@ static HRESULT WINAPI TaskFolder_CreateFolder(ITaskFolder *iface, BSTR name, VAR static HRESULT WINAPI TaskFolder_DeleteFolder(ITaskFolder *iface, BSTR name, LONG flags) { - FIXME("%p,%s,%x: stub\n", iface, debugstr_w(name), flags); - return E_NOTIMPL; + TaskFolder *folder = impl_from_ITaskFolder(iface); + + TRACE("%p,%s,%x\n", iface, debugstr_w(name), flags); + + if (flags) + FIXME("unsupported flags %x\n", flags); + + return reg_delete_folder(folder->path, name); } static HRESULT WINAPI TaskFolder_GetTask(ITaskFolder *iface, BSTR path, IRegisteredTask **task)