[ADVAPI32]

LookupAccountSidA:
- Change variable prefixes according to the variable type.
- Initialize Unicode strings after the call to LookupAccountSidW because the string length is not set properly otherwise.

svn path=/trunk/; revision=48121
This commit is contained in:
Eric Kohl 2010-07-19 20:27:36 +00:00
parent 4ea3ee5cd7
commit d4353528e6

View file

@ -906,51 +906,49 @@ LookupAccountSidA(LPCSTR lpSystemName,
PSID_NAME_USE peUse) PSID_NAME_USE peUse)
{ {
UNICODE_STRING NameW, ReferencedDomainNameW, SystemNameW; UNICODE_STRING NameW, ReferencedDomainNameW, SystemNameW;
DWORD szName, szReferencedDomainName; LPWSTR NameBuffer = NULL;
LPWSTR ReferencedDomainNameBuffer = NULL;
DWORD dwName, dwReferencedDomainName;
BOOL Ret; BOOL Ret;
/* /*
* save the buffer sizes the caller passed to us, as they may get modified and * save the buffer sizes the caller passed to us, as they may get modified and
* we require the original values when converting back to ansi * we require the original values when converting back to ansi
*/ */
szName = *cchName; dwName = *cchName;
szReferencedDomainName = *cchReferencedDomainName; dwReferencedDomainName = *cchReferencedDomainName;
/* /*
* allocate buffers for the unicode strings to receive * allocate buffers for the unicode strings to receive
*/ */
if(szName > 0) if(dwName > 0)
{ {
NameW.Length = 0; NameBuffer = (PWSTR)LocalAlloc(LMEM_FIXED, dwName);
NameW.MaximumLength = szName * sizeof(WCHAR); if(NameBuffer == NULL)
NameW.Buffer = (PWSTR)LocalAlloc(LMEM_FIXED, NameW.MaximumLength);
if(NameW.Buffer == NULL)
{ {
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return FALSE; return FALSE;
} }
} }
else else
NameW.Buffer = NULL; NameBuffer = NULL;
if(szReferencedDomainName > 0) if(dwReferencedDomainName > 0)
{ {
ReferencedDomainNameW.Length = 0; ReferencedDomainNameBuffer = (PWSTR)LocalAlloc(LMEM_FIXED, dwReferencedDomainName);
ReferencedDomainNameW.MaximumLength = szReferencedDomainName * sizeof(WCHAR); if(ReferencedDomainNameBuffer == NULL)
ReferencedDomainNameW.Buffer = (PWSTR)LocalAlloc(LMEM_FIXED, ReferencedDomainNameW.MaximumLength);
if(ReferencedDomainNameW.Buffer == NULL)
{ {
if(szName > 0) if(dwName > 0)
{ {
LocalFree(NameW.Buffer); LocalFree(NameBuffer);
} }
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return FALSE; return FALSE;
} }
} }
else else
ReferencedDomainNameW.Buffer = NULL; ReferencedDomainNameBuffer = NULL;
/* /*
* convert the system name to unicode - if present * convert the system name to unicode - if present
@ -972,9 +970,9 @@ LookupAccountSidA(LPCSTR lpSystemName,
Ret = LookupAccountSidW(SystemNameW.Buffer, Ret = LookupAccountSidW(SystemNameW.Buffer,
lpSid, lpSid,
NameW.Buffer, NameBuffer,
cchName, cchName,
ReferencedDomainNameW.Buffer, ReferencedDomainNameBuffer,
cchReferencedDomainName, cchReferencedDomainName,
peUse); peUse);
if(Ret) if(Ret)
@ -989,9 +987,10 @@ LookupAccountSidA(LPCSTR lpSystemName,
ANSI_STRING NameA; ANSI_STRING NameA;
NameA.Length = 0; NameA.Length = 0;
NameA.MaximumLength = ((szName <= 0xFFFF) ? (USHORT)szName : 0xFFFF); NameA.MaximumLength = ((dwName <= 0xFFFF) ? (USHORT)dwName : 0xFFFF);
NameA.Buffer = lpName; NameA.Buffer = lpName;
RtlInitUnicodeString(&NameW, NameBuffer);
RtlUnicodeStringToAnsiString(&NameA, &NameW, FALSE); RtlUnicodeStringToAnsiString(&NameA, &NameW, FALSE);
NameA.Buffer[NameA.Length] = '\0'; NameA.Buffer[NameA.Length] = '\0';
} }
@ -1001,10 +1000,11 @@ LookupAccountSidA(LPCSTR lpSystemName,
ANSI_STRING ReferencedDomainNameA; ANSI_STRING ReferencedDomainNameA;
ReferencedDomainNameA.Length = 0; ReferencedDomainNameA.Length = 0;
ReferencedDomainNameA.MaximumLength = ((szReferencedDomainName <= 0xFFFF) ? ReferencedDomainNameA.MaximumLength = ((dwReferencedDomainName <= 0xFFFF) ?
(USHORT)szReferencedDomainName : 0xFFFF); (USHORT)dwReferencedDomainName : 0xFFFF);
ReferencedDomainNameA.Buffer = lpReferencedDomainName; ReferencedDomainNameA.Buffer = lpReferencedDomainName;
RtlInitUnicodeString(&ReferencedDomainNameW, ReferencedDomainNameBuffer);
RtlUnicodeStringToAnsiString(&ReferencedDomainNameA, &ReferencedDomainNameW, FALSE); RtlUnicodeStringToAnsiString(&ReferencedDomainNameA, &ReferencedDomainNameW, FALSE);
ReferencedDomainNameA.Buffer[ReferencedDomainNameA.Length] = '\0'; ReferencedDomainNameA.Buffer[ReferencedDomainNameA.Length] = '\0';
} }
@ -1018,13 +1018,13 @@ LookupAccountSidA(LPCSTR lpSystemName,
{ {
RtlFreeUnicodeString(&SystemNameW); RtlFreeUnicodeString(&SystemNameW);
} }
if(NameW.Buffer != NULL) if(NameBuffer != NULL)
{ {
LocalFree(NameW.Buffer); LocalFree(NameBuffer);
} }
if(ReferencedDomainNameW.Buffer != NULL) if(ReferencedDomainNameBuffer != NULL)
{ {
LocalFree(ReferencedDomainNameW.Buffer); LocalFree(ReferencedDomainNameBuffer);
} }
return Ret; return Ret;