diff --git a/dlls/user32/tests/winstation.c b/dlls/user32/tests/winstation.c index bd042f246cb..23a4311553f 100644 --- a/dlls/user32/tests/winstation.c +++ b/dlls/user32/tests/winstation.c @@ -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); diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index 770245dc998..96b5117969c 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -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; }