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