[1/3] secur32: Implement GetUserNameEx(NameSamCompatible)

Alexandre Julliard julliard at winehq.org
Mon Apr 6 05:55:50 CDT 2009


"Ge van Geldorp" <ge at gse.nl> writes:

> @@ -1055,15 +1056,86 @@ BOOLEAN WINAPI GetComputerObjectNameW(
>  BOOLEAN WINAPI GetUserNameExA(
>    EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize)
>  {
> -    FIXME("%d %p %p\n", NameFormat, lpNameBuffer, nSize);
> -    return FALSE;
> +    BOOLEAN rc;
> +    LPWSTR bufferW = NULL;
> +    ULONG sizeW = *nSize;
> +    TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize);
> +    if (lpNameBuffer) {
> +        bufferW = HeapAlloc(GetProcessHeap(), 0, sizeW * sizeof(WCHAR));
> +        if (bufferW == NULL) {
> +            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
> +            return FALSE;
> +        }
> +    }
> +    rc = GetUserNameExW(NameFormat, bufferW, &sizeW);
> +    if (rc && bufferW) {
> +        ULONG len = WideCharToMultiByte(CP_ACP, 0, bufferW, -1, NULL, 0, NULL, NULL);
> +        WideCharToMultiByte(CP_ACP, 0, bufferW, -1, lpNameBuffer, *nSize, NULL, NULL);
> +        *nSize = len;
> +    }

You need to check for buffer overflows and return the appropriate error,
preferably with test cases.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list