Attempt to fix build
[reactos.git] / reactos / dll / win32 / user32 / include / user32.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS System Libraries
4 * FILE: lib/user32/include/user32.h
5 * PURPOSE: Win32 User Library
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 /* C Headers */
12 #include <assert.h>
13 #include <stdio.h>
14 #include <math.h>
15
16 /* SDK/NDK Headers */
17 #define _USER32_
18 #define OEMRESOURCE
19 #define NTOS_MODE_USER
20 #define WIN32_NO_STATUS
21 #include <windows.h>
22 #include <winuser.h>
23 #include <windowsx.h>
24 #include <winnls32.h>
25 #include <ndk/ntndk.h>
26 #include <ddk/ntstatus.h>
27
28 /* CSRSS Headers */
29 #include <csrss/csrss.h>
30
31 /* Public Win32K Headers */
32 #include <win32k/ntusrtyp.h>
33 #include <win32k/ntuser.h>
34 #include <win32k/callback.h>
35
36 /* WINE Headers */
37 #include <wine/unicode.h>
38
39 /* Internal User32 Headers */
40 #include "user32p.h"
41
42 #include <libs/pseh/pseh.h>
43 #include <libs/pseh/framebased.h>
44
45 /* FIXME: Use ntgdi.h then cleanup... */
46 HGDIOBJ STDCALL NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj);
47 BOOL STDCALL NtGdiPatBlt(HDC hdcDst, INT x, INT y, INT cx, INT cy, DWORD rop4);
48 LONG STDCALL GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *);
49 BOOL FASTCALL IsMetaFile(HDC);
50
51 extern PW32PROCESSINFO g_pi;
52 extern PW32PROCESSINFO g_kpi;
53
54 static __inline PVOID
55 SharedPtrToUser(PVOID Ptr)
56 {
57 ASSERT(Ptr != NULL);
58 ASSERT(g_pi != NULL);
59 ASSERT(g_pi->UserHeapDelta != 0);
60 return (PVOID)((ULONG_PTR)Ptr - g_pi->UserHeapDelta);
61 }
62
63 static __inline PVOID
64 DesktopPtrToUser(PVOID Ptr)
65 {
66 PW32THREADINFO ti = GetW32ThreadInfo();
67 ASSERT(Ptr != NULL);
68 ASSERT(ti != NULL);
69 if ((ULONG_PTR)Ptr >= (ULONG_PTR)ti->DesktopHeapBase &&
70 (ULONG_PTR)Ptr < (ULONG_PTR)ti->DesktopHeapBase + ti->DesktopHeapLimit)
71 {
72 return (PVOID)((ULONG_PTR)Ptr - ti->DesktopHeapDelta);
73 }
74 else
75 {
76 /* NOTE: This is slow as it requires a call to win32k. This should only be
77 neccessary if a thread wants to access an object on a different
78 desktop */
79 return NtUserGetDesktopMapping(Ptr);
80 }
81 }
82
83 static __inline PVOID
84 SharedPtrToKernel(PVOID Ptr)
85 {
86 ASSERT(Ptr != NULL);
87 ASSERT(g_pi != NULL);
88 ASSERT(g_pi->UserHeapDelta != 0);
89 return (PVOID)((ULONG_PTR)Ptr + g_pi->UserHeapDelta);
90 }
91
92 static __inline BOOL
93 IsThreadHooked(PW32THREADINFO ti)
94 {
95 return ti->Hooks != 0;
96 }
97
98 static __inline PDESKTOP
99 GetThreadDesktopInfo(VOID)
100 {
101 PW32THREADINFO ti;
102 PDESKTOP di = NULL;
103
104 ti = GetW32ThreadInfo();
105 if (ti != NULL)
106 di = DesktopPtrToUser(ti->Desktop);
107
108 return di;
109 }
110
111 PCALLPROC FASTCALL ValidateCallProc(HANDLE hCallProc);
112 PWINDOW FASTCALL ValidateHwnd(HWND hwnd);
113 PWINDOW FASTCALL ValidateHwndOrDesk(HWND hwnd);
114 PWINDOW FASTCALL GetThreadDesktopWnd(VOID);
115 PVOID FASTCALL ValidateHandleNoErr(HANDLE handle, UINT uType);
116 PWINDOW FASTCALL ValidateHwndNoErr(HWND hwnd);