Commit 92fe612a authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

ntdll/tests: Skip broken SYSTEM_HANDLE_INFORMATION behaviour.

Vista and 2008 only copy the first handle's information into the buffer. Signed-off-by: 's avatarHuw Davies <huw@codeweavers.com> Signed-off-by: 's avatarSebastian Lackner <sebastian@fds-team.de> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 9dfa1022
...@@ -504,6 +504,7 @@ static void test_query_handle(void) ...@@ -504,6 +504,7 @@ static void test_query_handle(void)
SystemInformationLength = ReturnLength; SystemInformationLength = ReturnLength;
shi = HeapReAlloc(GetProcessHeap(), 0, shi , SystemInformationLength); shi = HeapReAlloc(GetProcessHeap(), 0, shi , SystemInformationLength);
memset(shi, 0x55, SystemInformationLength);
ReturnLength = 0xdeadbeef; ReturnLength = 0xdeadbeef;
status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength); status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength);
...@@ -511,6 +512,7 @@ static void test_query_handle(void) ...@@ -511,6 +512,7 @@ static void test_query_handle(void)
{ {
SystemInformationLength *= 2; SystemInformationLength *= 2;
shi = HeapReAlloc(GetProcessHeap(), 0, shi, SystemInformationLength); shi = HeapReAlloc(GetProcessHeap(), 0, shi, SystemInformationLength);
memset(shi, 0x55, SystemInformationLength);
status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength); status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength);
} }
ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status ); ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
...@@ -518,6 +520,15 @@ static void test_query_handle(void) ...@@ -518,6 +520,15 @@ static void test_query_handle(void)
ok( ReturnLength == ExpectedLength || broken(ReturnLength == ExpectedLength - sizeof(DWORD)), /* Vista / 2008 */ ok( ReturnLength == ExpectedLength || broken(ReturnLength == ExpectedLength - sizeof(DWORD)), /* Vista / 2008 */
"Expected length %u, got %u\n", ExpectedLength, ReturnLength ); "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
ok( shi->Count > 1, "Expected more than 1 handle, got %u\n", shi->Count ); ok( shi->Count > 1, "Expected more than 1 handle, got %u\n", shi->Count );
ok( shi->Handle[1].HandleValue != 0x5555 || broken( shi->Handle[1].HandleValue == 0x5555 ), /* Vista / 2008 */
"Uninitialized second handle\n" );
if (shi->Handle[1].HandleValue == 0x5555)
{
win_skip("Skipping broken SYSTEM_HANDLE_INFORMATION\n");
CloseHandle(EventHandle);
goto done;
}
for (i = 0, found = FALSE; i < shi->Count && !found; i++) for (i = 0, found = FALSE; i < shi->Count && !found; i++)
found = (shi->Handle[i].OwnerPid == GetCurrentProcessId()) && found = (shi->Handle[i].OwnerPid == GetCurrentProcessId()) &&
((HANDLE)(ULONG_PTR)shi->Handle[i].HandleValue == EventHandle); ((HANDLE)(ULONG_PTR)shi->Handle[i].HandleValue == EventHandle);
...@@ -546,6 +557,7 @@ static void test_query_handle(void) ...@@ -546,6 +557,7 @@ static void test_query_handle(void)
status = pNtQuerySystemInformation(SystemHandleInformation, NULL, SystemInformationLength, &ReturnLength); status = pNtQuerySystemInformation(SystemHandleInformation, NULL, SystemInformationLength, &ReturnLength);
ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status ); ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status );
done:
HeapFree( GetProcessHeap(), 0, shi); HeapFree( GetProcessHeap(), 0, shi);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment