user32: Return Unicode length instead of ANSI in GetUserObjectInformationA.

This commit is contained in:
Owen Rudge 2012-05-14 15:25:03 +01:00 committed by Alexandre Julliard
parent 83f67ff998
commit fecde1ead8
2 changed files with 8 additions and 4 deletions

View File

@ -397,7 +397,7 @@ static void test_getuserobjectinformation(void)
ok(!ret, "GetUserObjectInformationA returned %x", ret);
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "LastError is set to %08x\n", GetLastError());
todo_wine ok(size == 22, "size is set to %d\n", size); /* Windows returns Unicode length (11*2) */
ok(size == 22, "size is set to %d\n", size); /* Windows returns Unicode length (11*2) */
/* Get string */
SetLastError(0xdeadbeef);
@ -439,7 +439,7 @@ static void test_getuserobjectinformation(void)
ok(!ret, "GetUserObjectInformationA returned %x", ret);
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "LastError is set to %08x\n", GetLastError());
todo_wine ok(size == 16, "size is set to %d\n", size); /* Windows returns Unicode length (8*2) */
ok(size == 16, "size is set to %d\n", size); /* Windows returns Unicode length (8*2) */
/* Get string */
SetLastError(0xdeadbeef);

View File

@ -477,13 +477,17 @@ BOOL WINAPI GetUserObjectInformationA( HANDLE handle, INT index, LPVOID info, DW
if (index == UOI_TYPE || index == UOI_NAME)
{
WCHAR buffer[MAX_PATH];
DWORD lenA;
DWORD lenA, lenW;
if (!GetUserObjectInformationW( handle, index, buffer, sizeof(buffer), NULL )) return FALSE;
if (!GetUserObjectInformationW( handle, index, buffer, sizeof(buffer), &lenW )) return FALSE;
lenA = WideCharToMultiByte( CP_ACP, 0, buffer, -1, NULL, 0, NULL, NULL );
if (needed) *needed = lenA;
if (lenA > len)
{
/* If the buffer length supplied by the caller is insufficient, Windows returns a
'needed' length based upon the Unicode byte length, so we should do similarly. */
if (needed) *needed = lenW;
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return FALSE;
}