mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 01:15:43 +00:00
implemented GetUserNameA()
svn path=/trunk/; revision=12121
This commit is contained in:
parent
ddd8ede921
commit
7af8972536
1 changed files with 38 additions and 43 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: misc.c,v 1.33 2004/12/14 21:26:53 weiden Exp $
|
/* $Id: misc.c,v 1.34 2004/12/14 22:11:16 weiden Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -485,36 +485,38 @@ RevertToSelf(VOID)
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
GetUserNameA( LPSTR lpszName, LPDWORD lpSize )
|
GetUserNameA( LPSTR lpszName, LPDWORD lpSize )
|
||||||
{
|
{
|
||||||
WCHAR* lpszNameW = NULL;
|
UNICODE_STRING NameW;
|
||||||
DWORD len = 0;
|
ANSI_STRING NameA;
|
||||||
|
BOOL Ret;
|
||||||
|
|
||||||
|
/* apparently Win doesn't check whether lpSize is valid at all! */
|
||||||
|
|
||||||
if ( !lpSize )
|
NameW.Length = 0;
|
||||||
|
NameW.MaximumLength = (*lpSize) * sizeof(WCHAR);
|
||||||
|
NameW.Buffer = LocalAlloc(LMEM_FIXED, NameW.MaximumLength);
|
||||||
|
if(NameW.Buffer == NULL)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = *lpSize;
|
NameA.Length = 0;
|
||||||
lpszNameW = LocalAlloc ( LMEM_FIXED, len * sizeof(WCHAR) );
|
NameA.MaximumLength = ((*lpSize) < 0xFFFF ? (USHORT)(*lpSize) : 0xFFFF);
|
||||||
|
NameA.Buffer = lpszName;
|
||||||
if ( !GetUserNameW ( lpszNameW, &len ) )
|
|
||||||
|
Ret = GetUserNameW(NameW.Buffer,
|
||||||
|
lpSize);
|
||||||
|
if(Ret)
|
||||||
{
|
{
|
||||||
LocalFree ( lpszNameW );
|
RtlUnicodeStringToAnsiString(&NameA, &NameW, FALSE);
|
||||||
return FALSE;
|
NameA.Buffer[NameA.Length] = '\0';
|
||||||
|
|
||||||
|
*lpSize = NameA.Length + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = wcstombs ( lpszName, lpszNameW, len );
|
LocalFree(NameW.Buffer);
|
||||||
|
|
||||||
LocalFree ( lpszNameW );
|
return Ret;
|
||||||
|
|
||||||
if ( len > *lpSize )
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*lpSize = len;
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -642,12 +644,11 @@ LookupAccountSidA (LPCSTR lpSystemName,
|
||||||
PSID_NAME_USE peUse)
|
PSID_NAME_USE peUse)
|
||||||
{
|
{
|
||||||
UNICODE_STRING NameW, ReferencedDomainNameW, SystemNameW;
|
UNICODE_STRING NameW, ReferencedDomainNameW, SystemNameW;
|
||||||
LPWSTR lpSystemNameW, lpNameW, lpReferencedDomainNameW;
|
|
||||||
DWORD szName, szReferencedDomainName;
|
DWORD szName, szReferencedDomainName;
|
||||||
BOOL Ret;
|
BOOL Ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* save the buffer size 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;
|
szName = *cchName;
|
||||||
|
@ -667,11 +668,9 @@ LookupAccountSidA (LPCSTR lpSystemName,
|
||||||
SetLastError(ERROR_OUTOFMEMORY);
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpNameW = NameW.Buffer;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lpNameW = NULL;
|
NameW.Buffer = NULL;
|
||||||
|
|
||||||
if(szReferencedDomainName > 0)
|
if(szReferencedDomainName > 0)
|
||||||
{
|
{
|
||||||
|
@ -680,18 +679,16 @@ LookupAccountSidA (LPCSTR lpSystemName,
|
||||||
ReferencedDomainNameW.Buffer = (PWSTR)LocalAlloc(LMEM_FIXED, ReferencedDomainNameW.MaximumLength);
|
ReferencedDomainNameW.Buffer = (PWSTR)LocalAlloc(LMEM_FIXED, ReferencedDomainNameW.MaximumLength);
|
||||||
if(ReferencedDomainNameW.Buffer == NULL)
|
if(ReferencedDomainNameW.Buffer == NULL)
|
||||||
{
|
{
|
||||||
if((*cchName) > 0)
|
if(szName > 0)
|
||||||
{
|
{
|
||||||
LocalFree(NameW.Buffer);
|
LocalFree(NameW.Buffer);
|
||||||
}
|
}
|
||||||
SetLastError(ERROR_OUTOFMEMORY);
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpReferencedDomainNameW = ReferencedDomainNameW.Buffer;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lpReferencedDomainNameW = NULL;
|
ReferencedDomainNameW.Buffer = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* convert the system name to unicode - if present
|
* convert the system name to unicode - if present
|
||||||
|
@ -703,21 +700,19 @@ LookupAccountSidA (LPCSTR lpSystemName,
|
||||||
|
|
||||||
RtlInitAnsiString(&SystemNameA, lpSystemName);
|
RtlInitAnsiString(&SystemNameA, lpSystemName);
|
||||||
RtlAnsiStringToUnicodeString(&SystemNameW, &SystemNameA, TRUE);
|
RtlAnsiStringToUnicodeString(&SystemNameW, &SystemNameA, TRUE);
|
||||||
|
|
||||||
lpSystemNameW = SystemNameW.Buffer;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lpSystemNameW = NULL;
|
SystemNameW.Buffer = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* it's time to call the unicode version
|
* it's time to call the unicode version
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Ret = LookupAccountSidW(lpSystemNameW,
|
Ret = LookupAccountSidW(SystemNameW.Buffer,
|
||||||
lpSid,
|
lpSid,
|
||||||
lpNameW,
|
NameW.Buffer,
|
||||||
cchName,
|
cchName,
|
||||||
lpReferencedDomainNameW,
|
ReferencedDomainNameW.Buffer,
|
||||||
cchReferencedDomainName,
|
cchReferencedDomainName,
|
||||||
peUse);
|
peUse);
|
||||||
if(Ret)
|
if(Ret)
|
||||||
|
@ -757,15 +752,15 @@ LookupAccountSidA (LPCSTR lpSystemName,
|
||||||
* free previously allocated buffers
|
* free previously allocated buffers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(lpSystemName != NULL)
|
if(SystemNameW.Buffer != NULL)
|
||||||
{
|
{
|
||||||
RtlFreeUnicodeString(&SystemNameW);
|
RtlFreeUnicodeString(&SystemNameW);
|
||||||
}
|
}
|
||||||
if(lpNameW != NULL)
|
if(NameW.Buffer != NULL)
|
||||||
{
|
{
|
||||||
LocalFree(NameW.Buffer);
|
LocalFree(NameW.Buffer);
|
||||||
}
|
}
|
||||||
if(lpReferencedDomainNameW != NULL)
|
if(ReferencedDomainNameW.Buffer != NULL)
|
||||||
{
|
{
|
||||||
LocalFree(ReferencedDomainNameW.Buffer);
|
LocalFree(ReferencedDomainNameW.Buffer);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue