[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