From 4e381837a02b9069d2d7593933cc146df1d3400e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 3 Jun 2010 19:35:05 +0000 Subject: [PATCH] [GDI32API] add IsHandleValid and use it SelectObject test svn path=/trunk/; revision=47549 --- rostests/apitests/gdi32api/gdi32api.c | 16 ++++++++++++++++ rostests/apitests/gdi32api/gdi32api.h | 1 + rostests/apitests/gdi32api/tests/SelectObject.c | 2 ++ 3 files changed, 19 insertions(+) diff --git a/rostests/apitests/gdi32api/gdi32api.c b/rostests/apitests/gdi32api/gdi32api.c index ab8889503a5..245c40112ff 100644 --- a/rostests/apitests/gdi32api/gdi32api.c +++ b/rostests/apitests/gdi32api/gdi32api.c @@ -18,6 +18,22 @@ MyGdiQueryTable() return pPeb->GdiSharedHandleTable; } +BOOL +IsHandleValid(HGDIOBJ hobj) +{ + USHORT Index = (ULONG_PTR)hobj; + PGDI_TABLE_ENTRY pentry = &GdiHandleTable[Index]; + + if (pentry->KernelData == NULL || + pentry->KernelData < (PVOID)0x80000000 || + (USHORT)pentry->FullUnique != (USHORT)((ULONG_PTR)hobj >> 16)) + { + return FALSE; + } + + return TRUE; +} + int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, diff --git a/rostests/apitests/gdi32api/gdi32api.h b/rostests/apitests/gdi32api/gdi32api.h index 73ec2a95a5b..8811be18235 100644 --- a/rostests/apitests/gdi32api/gdi32api.h +++ b/rostests/apitests/gdi32api/gdi32api.h @@ -20,6 +20,7 @@ extern HINSTANCE g_hInstance; extern PGDI_TABLE_ENTRY GdiHandleTable; +BOOL IsHandleValid(HGDIOBJ hobj); #endif /* _GDITEST_H */ diff --git a/rostests/apitests/gdi32api/tests/SelectObject.c b/rostests/apitests/gdi32api/tests/SelectObject.c index 0df71e9837c..cb476f872b7 100644 --- a/rostests/apitests/gdi32api/tests/SelectObject.c +++ b/rostests/apitests/gdi32api/tests/SelectObject.c @@ -82,6 +82,8 @@ Test_SelectObject(PTESTINFO pti) DeleteObject(hOldObj); RTEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); // ??? Why this? DeleteObject(hNewObj); + TEST(IsHandleValid(hNewObj) == TRUE); + RTEST(GetLastError() == ERROR_SUCCESS); /* Test BITMAP */ -- 2.17.1