Rob Shearman : advapi32: Implement CredDeleteW.

Alexandre Julliard julliard at winehq.org
Wed Oct 31 08:35:22 CDT 2007


Module: wine
Branch: master
Commit: 72bd876599f796f513a59112d6cc121ea6760c6b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=72bd876599f796f513a59112d6cc121ea6760c6b

Author: Rob Shearman <rob at codeweavers.com>
Date:   Tue Oct 30 12:37:20 2007 +0000

advapi32: Implement CredDeleteW.

---

 dlls/advapi32/advapi32.spec |    2 +-
 dlls/advapi32/cred.c        |   52 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletions(-)

diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
index 5de5cc2..728d754 100644
--- a/dlls/advapi32/advapi32.spec
+++ b/dlls/advapi32/advapi32.spec
@@ -103,7 +103,7 @@
 # @ stub CreateTraceInstanceId
 @ stdcall CreateWellKnownSid(long ptr ptr ptr)
 # @ stub CredDeleteA
-# @ stub CredDeleteW
+@ stdcall CredDeleteW(wstr long long)
 @ stdcall CredEnumerateA(str long ptr ptr)
 @ stdcall CredEnumerateW(wstr long ptr ptr)
 @ stdcall CredFree(ptr)
diff --git a/dlls/advapi32/cred.c b/dlls/advapi32/cred.c
index 00df9b3..714d1af 100644
--- a/dlls/advapi32/cred.c
+++ b/dlls/advapi32/cred.c
@@ -385,6 +385,58 @@ static LPWSTR get_key_name_for_target(LPCWSTR target_name, DWORD type)
 }
 
 /******************************************************************************
+ * CredDeleteW [ADVAPI32.@]
+ */
+BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags)
+{
+    HKEY hkeyMgr;
+    DWORD ret;
+    LPWSTR key_name;
+
+    TRACE("(%s, %d, 0x%x)\n", debugstr_w(TargetName), Type, Flags);
+
+    if (!TargetName)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    if (Type != CRED_TYPE_GENERIC && Type != CRED_TYPE_DOMAIN_PASSWORD)
+    {
+        FIXME("unhandled type %d\n", Type);
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    if (Flags)
+    {
+        FIXME("unhandled flags 0x%x\n", Flags);
+        SetLastError(ERROR_INVALID_FLAGS);
+        return FALSE;
+    }
+
+    ret = open_cred_mgr_key(&hkeyMgr, TRUE);
+    if (ret != ERROR_SUCCESS)
+    {
+        WARN("couldn't open/create manager key, error %d\n", ret);
+        SetLastError(ERROR_NO_SUCH_LOGON_SESSION);
+        return FALSE;
+    }
+
+    key_name = get_key_name_for_target(TargetName, Type);
+    ret = RegDeleteKeyW(hkeyMgr, key_name);
+    HeapFree(GetProcessHeap(), 0, key_name);
+    RegCloseKey(hkeyMgr);
+    if (ret != ERROR_SUCCESS)
+    {
+        SetLastError(ERROR_NOT_FOUND);
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+/******************************************************************************
  * CredFree [ADVAPI32.@]
  */
 VOID WINAPI CredFree(PVOID Buffer)




More information about the wine-cvs mailing list