[GDITOOLS]

Add a library with some helper routines for GDI tests

svn path=/trunk/; revision=70457
This commit is contained in:
Timo Kreuzer 2015-12-28 20:24:57 +00:00
parent c88949294c
commit 3ef0e98b4b
3 changed files with 107 additions and 0 deletions

View file

@ -0,0 +1,5 @@
include_directories(${REACTOS_SOURCE_DIR}/win32ss/include)
add_library(gditools
gditools.c)

View file

@ -0,0 +1,82 @@
/* SDK/DDK/NDK Headers. */
#define WIN32_NO_STATUS
#include <windef.h>
#include <winbase.h>
#include <wingdi.h>
#include <winddi.h>
#include <prntfont.h>
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
/* Public Win32K Headers */
#include <ntgdityp.h>
#include <ntgdi.h>
#include <ntgdihdl.h>
PENTRY
GdiQueryTable(
VOID)
{
PTEB pTeb = NtCurrentTeb();
PPEB pPeb = pTeb->ProcessEnvironmentBlock;
return pPeb->GdiSharedHandleTable;
}
BOOL
GdiIsHandleValid(
_In_ HGDIOBJ hobj)
{
PENTRY pentHmgr = GdiQueryTable();
USHORT Index = (ULONG_PTR)hobj & 0xFFFF;
PENTRY pentry = &pentHmgr[Index];
if ((pentry->einfo.pobj == NULL) ||
((LONG_PTR)pentry->einfo.pobj > 0) ||
(pentry->FullUnique != (USHORT)((ULONG_PTR)hobj >> 16)))
{
return FALSE;
}
return TRUE;
}
BOOL
GdiIsHandleValidEx(
_In_ HGDIOBJ hobj,
_In_ GDILOOBJTYPE ObjectType)
{
PENTRY pentHmgr = GdiQueryTable();
USHORT Index = (ULONG_PTR)hobj & 0xFFFF;
PENTRY pentry = &pentHmgr[Index];
if ((pentry->einfo.pobj == NULL) ||
((LONG_PTR)pentry->einfo.pobj > 0) ||
(pentry->FullUnique != (USHORT)((ULONG_PTR)hobj >> 16)) ||
(pentry->Objt != (UCHAR)(ObjectType >> 16)) ||
(pentry->Flags != (UCHAR)(ObjectType >> 24)))
{
return FALSE;
}
return TRUE;
}
PVOID
GdiGetHandleUserData(
_In_ HGDIOBJ hobj)
{
PENTRY pentHmgr = GdiQueryTable();
USHORT Index = (ULONG_PTR)hobj;
PENTRY pentry = &pentHmgr[Index];
if (!GdiIsHandleValid(hobj))
{
return NULL;
}
return pentry->pUser;
}

View file

@ -0,0 +1,20 @@
#pragma once
PENTRY
GdiQueryTable(
VOID);
BOOL
GdiIsHandleValid(
_In_ HGDIOBJ hobj);
BOOL
GdiIsHandleValidEx(
_In_ HGDIOBJ hobj,
_In_ GDILOOBJTYPE ObjectType);
PVOID
GdiGetHandleUserData(
_In_ HGDIOBJ hobj);