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)
9 /* INCLUDES ******************************************************************/
19 #define NTOS_MODE_USER
20 #define WIN32_NO_STATUS
25 #include <ndk/ntndk.h>
26 #include <ddk/ntstatus.h>
29 #include <csrss/csrss.h>
31 /* Public Win32K Headers */
32 #include <win32k/ntusrtyp.h>
33 #include <win32k/ntuser.h>
34 #include <win32k/callback.h>
37 #include <wine/unicode.h>
39 /* Internal User32 Headers */
42 /* SEH Support with PSEH */
43 #include <pseh/pseh2.h>
45 /* Temporarily in here for now. */
46 typedef struct _USERAPIHOOKINFO
53 } USERAPIHOOKINFO
,*PUSERAPIHOOKINFO
;
55 typedef LRESULT(CALLBACK
*WNDPROC_OWP
)(HWND
,UINT
,WPARAM
,LPARAM
,ULONG_PTR
,PDWORD
);
57 typedef struct _UAHOWP
63 typedef struct tagUSERAPIHOOK
66 WNDPROC DefWindowProcA
;
67 WNDPROC DefWindowProcW
;
68 UAHOWP DefWndProcArray
;
69 FARPROC GetScrollInfo
;
70 FARPROC SetScrollInfo
;
71 FARPROC EnableScrollBar
;
72 FARPROC AdjustWindowRectEx
;
74 WNDPROC_OWP PreWndProc
;
75 WNDPROC_OWP PostWndProc
;
77 WNDPROC_OWP PreDefDlgProc
;
78 WNDPROC_OWP PostDefDlgProc
;
80 FARPROC GetSystemMetrics
;
81 FARPROC SystemParametersInfoA
;
82 FARPROC SystemParametersInfoW
;
83 FARPROC ForceResetUserApiHook
;
84 FARPROC DrawFrameControl
;
86 FARPROC MDIRedrawFrame
;
87 FARPROC GetRealWindowOwner
;
88 } USERAPIHOOK
, *PUSERAPIHOOK
;
97 extern RTL_CRITICAL_SECTION gcsUserApiHook
;
98 extern USERAPIHOOK guah
;
99 typedef DWORD (CALLBACK
* USERAPIHOOKPROC
)(UAPIHK State
, ULONG_PTR Info
);
100 BOOL FASTCALL
BeginIfHookedUserApiHook(VOID
);
101 BOOL FASTCALL
EndUserApiHook(VOID
);
102 BOOL FASTCALL
IsInsideUserApiHook(VOID
);
103 VOID FASTCALL
ResetUserApiHook(PUSERAPIHOOK
);
104 BOOL FASTCALL
IsMsgOverride(UINT
,PUAHOWP
);
106 #define LOADUSERAPIHOOK \
107 if (!gfServerProcess && \
108 !IsInsideUserApiHook() && \
109 (gpsi->dwSRVIFlags & SRVINFO_APIHOOK) && \
110 !RtlIsThreadWithinLoaderCallout()) \
112 NtUserCallNoParam(NOPARAM_ROUTINE_LOADUSERAPIHOOK); \
115 /* FIXME: Use ntgdi.h then cleanup... */
116 LONG WINAPI
GdiGetCharDimensions(HDC
, LPTEXTMETRICW
, LONG
*);
117 BOOL FASTCALL
IsMetaFile(HDC
);
119 extern PPROCESSINFO g_ppi
;
120 extern ULONG_PTR g_ulSharedDelta
;
121 extern PSERVERINFO gpsi
;
122 extern BOOL gfServerProcess
;
124 static __inline PVOID
125 SharedPtrToUser(PVOID Ptr
)
128 ASSERT(g_ulSharedDelta
!= 0);
129 return (PVOID
)((ULONG_PTR
)Ptr
- g_ulSharedDelta
);
132 static __inline PVOID
133 DesktopPtrToUser(PVOID Ptr
)
138 pci
= GetWin32ClientInfo();
139 pdi
= pci
->pDeskInfo
;
143 if ((ULONG_PTR
)Ptr
>= (ULONG_PTR
)pdi
->pvDesktopBase
&&
144 (ULONG_PTR
)Ptr
< (ULONG_PTR
)pdi
->pvDesktopLimit
)
146 return (PVOID
)((ULONG_PTR
)Ptr
- pci
->ulClientDelta
);
150 /* NOTE: This is slow as it requires a call to win32k. This should only be
151 neccessary if a thread wants to access an object on a different
153 return NtUserGetDesktopMapping(Ptr
);
157 static __inline PVOID
158 SharedPtrToKernel(PVOID Ptr
)
161 ASSERT(g_ulSharedDelta
!= 0);
162 return (PVOID
)((ULONG_PTR
)Ptr
+ g_ulSharedDelta
);
166 IsThreadHooked(PCLIENTINFO pci
)
168 return pci
->fsHooks
!= 0;
171 static __inline PDESKTOPINFO
172 GetThreadDesktopInfo(VOID
)
175 PDESKTOPINFO di
= NULL
;
177 ti
= GetW32ThreadInfo();
179 di
= GetWin32ClientInfo()->pDeskInfo
;
184 PCALLPROCDATA FASTCALL
ValidateCallProc(HANDLE hCallProc
);
185 PWND FASTCALL
ValidateHwnd(HWND hwnd
);
186 PWND FASTCALL
ValidateHwndOrDesk(HWND hwnd
);
187 PWND FASTCALL
GetThreadDesktopWnd(VOID
);
188 PVOID FASTCALL
ValidateHandleNoErr(HANDLE handle
, UINT uType
);
189 PWND FASTCALL
ValidateHwndNoErr(HWND hwnd
);
190 VOID FASTCALL
GetConnected(VOID
);
191 BOOL FASTCALL
DefSetText(HWND hWnd
, PCWSTR String
, BOOL Ansi
);
192 BOOL FASTCALL
TestWindowProcess(PWND
);
193 VOID
UserGetWindowBorders(DWORD
, DWORD
, SIZE
*, BOOL
);