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