Aric Stewart : advapi32: Implement LsaLookupSids.
Alexandre Julliard
julliard at winehq.org
Thu Sep 24 10:55:38 CDT 2009
Module: wine
Branch: master
Commit: caf66f0fe28da8964b5f84be682c527559fb9e52
URL: http://source.winehq.org/git/wine.git/?a=commit;h=caf66f0fe28da8964b5f84be682c527559fb9e52
Author: Aric Stewart <aric at codeweavers.com>
Date: Thu Sep 24 08:38:35 2009 -0500
advapi32: Implement LsaLookupSids.
---
dlls/advapi32/lsa.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 796fa45..a0a332e 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -408,9 +408,50 @@ NTSTATUS WINAPI LsaLookupSids(
OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
OUT PLSA_TRANSLATED_NAME *Names )
{
- FIXME("(%p,%u,%p,%p,%p) stub\n", PolicyHandle, Count, Sids,
+ ULONG i, mapped, size;
+ ULONG name_size, domain_size;
+ SID_NAME_USE use;
+
+ TRACE("(%p,%u,%p,%p,%p) stub\n", PolicyHandle, Count, Sids,
ReferencedDomains, Names);
+ size = sizeof(LSA_TRANSLATED_NAME) * Count;
+ if (!(*Names = HeapAlloc( GetProcessHeap(), 0, size) )) return STATUS_NO_MEMORY;
+ if (!(*ReferencedDomains = HeapAlloc( GetProcessHeap(), 0, sizeof(LSA_REFERENCED_DOMAIN_LIST)) ))
+ {
+ HeapFree( GetProcessHeap(), 0, *Names);
+ return STATUS_NO_MEMORY;
+ }
+ (*ReferencedDomains)->Entries = 0;
+ (*ReferencedDomains)->Domains = NULL;
+
+ mapped = 0;
+ for (i = 0; i < Count; i++)
+ {
+ name_size = domain_size = 0;
+ (*Names)[i].Use = SidTypeUnknown;
+ (*Names)[i].DomainIndex = -1;
+ (*Names)[i].Name.Length = 0;
+ (*Names)[i].Name.MaximumLength = 0;
+ (*Names)[i].Name.Buffer = NULL;
+ if (LookupAccountSidW(NULL, Sids[i], NULL, &name_size, NULL, &domain_size, &use))
+ {
+ if (domain_size)
+ FIXME("domains not handled\n");
+ mapped++;
+
+ domain_size = 0;
+ (*Names)[i].Use = use;
+ (*Names)[i].Name.Length = name_size * sizeof(WCHAR);
+ (*Names)[i].Name.MaximumLength = name_size * sizeof(WCHAR);
+ (*Names)[i].Name.Buffer = HeapAlloc(GetProcessHeap(),0,name_size * sizeof(WCHAR));
+ LookupAccountSidW(NULL, Sids[i], (*Names)[i].Name.Buffer, &name_size, NULL, &domain_size, &use);
+ }
+ }
+ TRACE("mapped %u out of %u\n",mapped,Count);
+
+ if (mapped == Count) return STATUS_SUCCESS;
+ if (mapped) return STATUS_SOME_NOT_MAPPED;
return STATUS_NONE_MAPPED;
}
More information about the wine-cvs
mailing list