Rob Shearman : advapi32: Implement filter matching for CredEnumerate.

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


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

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

advapi32: Implement filter matching for CredEnumerate.

---

 dlls/advapi32/cred.c |   34 ++++++++++++++++++++++++++++++++--
 1 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/dlls/advapi32/cred.c b/dlls/advapi32/cred.c
index 6c6792d..d151412 100644
--- a/dlls/advapi32/cred.c
+++ b/dlls/advapi32/cred.c
@@ -676,10 +676,40 @@ BOOL WINAPI CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD *Count,
 
 static BOOL credential_matches_filter(HKEY hkeyCred, LPCWSTR filter)
 {
+    LPWSTR target_name;
+    DWORD ret;
+    DWORD type;
+    DWORD count;
+    LPCWSTR p;
+
     if (!filter) return TRUE;
 
-    FIXME("%s\n", debugstr_w(filter));
-    return TRUE;
+    ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, NULL, &count);
+    if (ret != ERROR_SUCCESS)
+        return FALSE;
+    else if (type != REG_SZ)
+        return FALSE;
+
+    target_name = HeapAlloc(GetProcessHeap(), 0, count);
+    if (!target_name)
+        return FALSE;
+    ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, (LPVOID)target_name, &count);
+    if (ret != ERROR_SUCCESS || type != REG_SZ)
+    {
+        HeapFree(GetProcessHeap(), 0, target_name);
+        return FALSE;
+    }
+
+    TRACE("comparing filter %s to target name %s\n", debugstr_w(filter),
+          debugstr_w(target_name));
+
+    p = strchrW(filter, '*');
+    ret = CompareStringW(GetThreadLocale(), 0, filter,
+                         (p && !p[1] ? p - filter : -1), target_name,
+                         (p && !p[1] ? p - filter : -1)) == CSTR_EQUAL;
+
+    HeapFree(GetProcessHeap(), 0, target_name);
+    return ret;
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list