From 616c17cc58a4943d3a367704943e737d5713740d Mon Sep 17 00:00:00 2001 From: Qian Hong Date: Tue, 7 Apr 2015 11:23:34 +0800 Subject: advapi32: Fallback to Sid string when LookupAccountSid fails. --- dlls/advapi32/lsa.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c index 258b8ca..93afa20 100644 --- a/dlls/advapi32/lsa.c +++ b/dlls/advapi32/lsa.c @@ -29,6 +29,7 @@ #include "winbase.h" #include "winreg.h" #include "winternl.h" +#include "sddl.h" #include "advapi32_misc.h" #include "wine/debug.h" @@ -554,6 +555,21 @@ NTSTATUS WINAPI LsaLookupSids( heap_free(name); } } + else + { + WCHAR *strsid = NULL; + + if (ConvertSidToStringSidW(Sids[i], &strsid)) + { + name_size = strlenW(strsid) + 1; + + (*Names)[i].Name.Length = (name_size - 1) * sizeof(WCHAR); + (*Names)[i].Name.MaximumLength = name_size * sizeof(WCHAR); + name_fullsize += (*Names)[i].Name.MaximumLength; + + LocalFree(strsid); + } + } } /* now we have full length needed for both */ @@ -593,6 +609,21 @@ NTSTATUS WINAPI LsaLookupSids( heap_free(domain.Buffer); } } + else + { + WCHAR *strsid = NULL; + + if (ConvertSidToStringSidW(Sids[i], &strsid)) + { + name_size = strlenW(strsid) + 1; + mapped++; + + (*Names)[i].Name.Buffer = name_buffer; + memcpy((*Names)[i].Name.Buffer, strsid, name_size * sizeof(WCHAR)); + + LocalFree(strsid); + } + } name_buffer += name_size; } -- 2.3.5