ReactOS  0.4.14-dev-552-g2fad488
gditools.c
Go to the documentation of this file.
1 
2 
3 /* SDK/DDK/NDK Headers. */
4 #define WIN32_NO_STATUS
5 #include <windef.h>
6 #include <winbase.h>
7 #include <wingdi.h>
8 #include <winddi.h>
9 #include <prntfont.h>
10 
11 #define NTOS_MODE_USER
12 #include <ndk/ntndk.h>
13 
14 /* Public Win32K Headers */
15 #include <ntgdityp.h>
16 #include <ntgdi.h>
17 #include <ntgdihdl.h>
18 
19 PENTRY
21  VOID)
22 {
23  PTEB pTeb = NtCurrentTeb();
24  PPEB pPeb = pTeb->ProcessEnvironmentBlock;
25  return pPeb->GdiSharedHandleTable;
26 }
27 
28 BOOL
30  _In_ HGDIOBJ hobj)
31 {
32  PENTRY pentHmgr = GdiQueryTable();
33  USHORT Index = (ULONG_PTR)hobj & 0xFFFF;
34  PENTRY pentry = &pentHmgr[Index];
35 
36  if ((pentry->einfo.pobj == NULL) ||
37  ((LONG_PTR)pentry->einfo.pobj > 0) ||
38  (pentry->FullUnique != (USHORT)((ULONG_PTR)hobj >> 16)))
39  {
40  return FALSE;
41  }
42 
43  return TRUE;
44 }
45 
46 BOOL
48  _In_ HGDIOBJ hobj,
50 {
51  PENTRY pentHmgr = GdiQueryTable();
52  USHORT Index = (ULONG_PTR)hobj & 0xFFFF;
53  PENTRY pentry = &pentHmgr[Index];
54 
55  if ((pentry->einfo.pobj == NULL) ||
56  ((LONG_PTR)pentry->einfo.pobj > 0) ||
57  (pentry->FullUnique != (USHORT)((ULONG_PTR)hobj >> 16)) ||
58  (pentry->Objt != (UCHAR)(ObjectType >> 16)) ||
59  (pentry->Flags != (UCHAR)(ObjectType >> 24)))
60  {
61  return FALSE;
62  }
63 
64  return TRUE;
65 }
66 
67 PVOID
69  _In_ HGDIOBJ hobj)
70 {
71  PENTRY pentHmgr = GdiQueryTable();
72  USHORT Index = (ULONG_PTR)hobj;
73  PENTRY pentry = &pentHmgr[Index];
74 
75  if (!GdiIsHandleValid(hobj))
76  {
77  return NULL;
78  }
79 
80  return pentry->pUser;
81 }
82 
ObjectType
Definition: metafile.c:80
#define LONG_PTR
Definition: treelist.c:79
#define TRUE
Definition: types.h:120
PVOID pUser
Definition: ntgdihdl.h:251
PPEB ProcessEnvironmentBlock
Definition: ntddk_ex.h:337
UCHAR Objt
Definition: ntgdihdl.h:249
BOOL GdiIsHandleValid(_In_ HGDIOBJ hobj)
Definition: gditools.c:29
struct _BASEOBJECT * pobj
Definition: ntgdihdl.h:234
UCHAR Flags
Definition: ntgdihdl.h:250
union _ENTRY::_EINFO einfo
uint32_t ULONG_PTR
Definition: typedefs.h:63
BOOL GdiIsHandleValidEx(_In_ HGDIOBJ hobj, _In_ GDILOOBJTYPE ObjectType)
Definition: gditools.c:47
PVOID GdiSharedHandleTable
Definition: ntddk_ex.h:292
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned char UCHAR
Definition: xmlstorage.h:181
PENTRY GdiQueryTable(VOID)
Definition: gditools.c:20
#define _In_
Definition: no_sal2.h:204
Definition: compat.h:492
PVOID GdiGetHandleUserData(_In_ HGDIOBJ hobj)
Definition: gditools.c:68
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
unsigned short USHORT
Definition: pedump.c:61
USHORT FullUnique
Definition: ntgdihdl.h:248
#define ULONG_PTR
Definition: config.h:101
Definition: ntgdihdl.h:230
enum GDILoObjType GDILOOBJTYPE