[2/5] taskschd: Implement ITaskFolder::DeleteFolder.

Dmitry Timoshkov dmitry at baikal.ru
Mon Jan 20 01:04:58 CST 2014


---
 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 cb285fd..9114417 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)
-- 
1.8.5.2




More information about the wine-patches mailing list