diff --git a/winsup/w32api/ChangeLog b/winsup/w32api/ChangeLog
index d08d4e766..b59a953d5 100644
--- a/winsup/w32api/ChangeLog
+++ b/winsup/w32api/ChangeLog
@@ -1,3 +1,19 @@
+2003-09-26  Dimitri Papadopoulos  <papadopo@users.sourceforge.net>
+
+	* include/winuser.h [WINVER >= 0x0500] (SetWinEventHook, WINEVENTPROC,
+	WINEVENT_OUTOFCONTEXT, WINEVENT_SKIPOWNTHREAD, WINEVENT_SKIPOWNPROCESS,
+	WINEVENT_INCONTEXT): Add function, typedef, and constants.
+
+	* include/winable.h [WINVER < 0x0500] (SetWinEventHook, WINEVENTPROC,
+	WINEVENT_OUTOFCONTEXT, WINEVENT_SKIPOWNTHREAD, WINEVENT_SKIPOWNPROCESS,
+	WINEVENT_INCONTEXT): Add function, typedef, and constants.
+
+	* include/winuser.h [_WIN32_WINNT >= 0x0500] (UserHandleGrantAccess):
+	Add function.
+
+	* lib/user32.def (SetWinEventHook, UserHandleGrantAccess):
+	Add functions.
+
 2003-09-26  Dimitri Papadopoulos  <papadopo@users.sourceforge.net>
 
 	* include/winnt.h (ACE_INHERITED_OBJECT_TYPE_PRESENT,
diff --git a/winsup/w32api/include/winable.h b/winsup/w32api/include/winable.h
index 75af57c28..aa33511fd 100644
--- a/winsup/w32api/include/winable.h
+++ b/winsup/w32api/include/winable.h
@@ -32,6 +32,10 @@ extern "C" {
 #define GUI_INMENUMODE 0x00000004
 #define GUI_SYSTEMMENUMODE 0x00000008
 #define GUI_POPUPMENUMODE 0x00000010
+#define WINEVENT_OUTOFCONTEXT   0x0000
+#define WINEVENT_SKIPOWNTHREAD  0x0001
+#define WINEVENT_SKIPOWNPROCESS 0x0002
+#define WINEVENT_INCONTEXT      0x0004
 typedef struct tagGUITHREADINFO {
 	DWORD cbSize;
 	DWORD flags;
@@ -43,7 +47,9 @@ typedef struct tagGUITHREADINFO {
 	HWND hwndCaret;
 	RECT rcCaret;
 } GUITHREADINFO,*PGUITHREADINFO,*LPGUITHREADINFO;
+typedef VOID (*WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,DWORD,DWORD);
 BOOL WINAPI GetGUIThreadInfo(DWORD,LPGUITHREADINFO);
+HWINEVENTHOOK WINAPI SetWinEventHook(UINT,UINT,HMODULE,WINEVENTPROC,DWORD,DWORD,UINT);
 #endif /* (WINVER < 0x0500) */
 
 #ifdef __cplusplus
diff --git a/winsup/w32api/include/winuser.h b/winsup/w32api/include/winuser.h
index 0cbe7fbc6..ce7282d22 100644
--- a/winsup/w32api/include/winuser.h
+++ b/winsup/w32api/include/winuser.h
@@ -7,6 +7,7 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
+
 #define WC_DIALOG MAKEINTATOM(0x8002)
 #define FALT	16
 #define FCONTROL	8
@@ -401,7 +402,7 @@ extern "C" {
 #if (_WIN32_WINNT >= 0x0501)
 #define DC_BUTTONS	0x00001000
 #endif
-/* Where are these documented?   */
+/* Where are these documented? */
 #define DC_CAPTION	(DC_ICON|DC_TEXT|DC_BUTTONS)
 #define DC_NC	(DC_CAPTION|DC_FRAME)
 
@@ -595,7 +596,7 @@ extern "C" {
     /* This is supposed to be defined by the program using it not defined
        in the w32api headers.  I've left it here for documentation purposes.
     */
-#ifndef IDC_STATIC  /* May be predefined by resource compiler.  */
+#ifndef IDC_STATIC  /* May be predefined by resource compiler. */
 #define IDC_STATIC (-1)
 #endif
 #endif
@@ -679,7 +680,7 @@ extern "C" {
 #define SW_RESTORE 9
 #define SW_SHOWDEFAULT 10
 #define SW_FORCEMINIMIZE 11
-#define SW_MAX  11
+#define SW_MAX 11
 #define MB_USERICON 128
 #define MB_ICONASTERISK 64
 #define MB_ICONEXCLAMATION 0x30
@@ -705,11 +706,11 @@ extern "C" {
 #define MB_RETRYCANCEL 5
 #ifdef _WIN32_WINNT
 #if (_WIN32_WINNT >= 0x0400)
-#define MB_SERVICE_NOTIFICATION  0x00200000
+#define MB_SERVICE_NOTIFICATION 0x00200000
 #else
-#define MB_SERVICE_NOTIFICATION  0x00040000
+#define MB_SERVICE_NOTIFICATION 0x00040000
 #endif
-#define MB_SERVICE_NOTIFICATION_NT3X  0x00040000
+#define MB_SERVICE_NOTIFICATION_NT3X 0x00040000
 #endif
 #define MB_SETFOREGROUND 0x10000
 #define MB_SYSTEMMODAL 4096
@@ -2070,6 +2071,10 @@ extern "C" {
 #if (_WIN32_WINNT >= 0x0501)
 #define GUI_16BITTASK 0x00000020
 #endif
+#define WINEVENT_OUTOFCONTEXT   0x0000
+#define WINEVENT_SKIPOWNTHREAD  0x0001
+#define WINEVENT_SKIPOWNPROCESS 0x0002
+#define WINEVENT_INCONTEXT      0x0004
 #define AW_HOR_POSITIVE 0x00000001
 #define AW_HOR_NEGATIVE 0x00000002
 #define AW_VER_POSITIVE 0x00000004
@@ -2883,6 +2888,7 @@ typedef struct tagGUITHREADINFO {
 	HWND hwndCaret;
 	RECT rcCaret;
 } GUITHREADINFO,*PGUITHREADINFO,*LPGUITHREADINFO;
+typedef VOID (*WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,DWORD,DWORD);
 #endif /* (WINVER >= 0x0500) */
 #if (_WIN32_WINNT >= 0x0501)
 typedef struct {
@@ -3461,6 +3467,9 @@ UINT WINAPI SetTimer(HWND,UINT,UINT,TIMERPROC);
 BOOL WINAPI SetUserObjectInformationA(HANDLE,int,PVOID,DWORD);
 BOOL WINAPI SetUserObjectInformationW(HANDLE,int,PVOID,DWORD);
 BOOL WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+#if (WINVER >= 0x0500)
+HWINEVENTHOOK WINAPI SetWinEventHook(UINT,UINT,HMODULE,WINEVENTPROC,DWORD,DWORD,UINT);
+#endif
 BOOL WINAPI SetWindowContextHelpId(HWND,DWORD);
 LONG WINAPI SetWindowLongA(HWND,int,LONG);
 LONG WINAPI SetWindowLongW(HWND,int,LONG);
@@ -3516,6 +3525,9 @@ BOOL WINAPI UnregisterClassA(LPCSTR,HINSTANCE);
 BOOL WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);
 BOOL WINAPI UnregisterHotKey(HWND,int);
 BOOL WINAPI UpdateWindow(HWND);
+#if (_WIN32_WINNT >= 0x0500)
+BOOL WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL);
+#endif
 BOOL WINAPI ValidateRect(HWND,LPCRECT);
 BOOL WINAPI ValidateRgn(HWND,HRGN);
 SHORT WINAPI VkKeyScanA(CHAR);
@@ -3533,7 +3545,7 @@ int WINAPIV wsprintfA(LPSTR,LPCSTR,...);
 int WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);
 int WINAPI wvsprintfA(LPSTR,LPCSTR,va_list arglist);
 int WINAPI wvsprintfW(LPWSTR,LPCWSTR,va_list arglist);
-#if (_WIN32_WINNT >= 0x0500  || _WIN32_WINDOWS >= 0x0490)
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
 BOOL WINAPI AllowSetForegroundWindow(DWORD);
 BOOL WINAPI LockSetForegroundWindow(UINT);
 #endif
@@ -3626,7 +3638,7 @@ typedef MONITORINFOEXW MONITORINFOEX, *LPMONITORINFOEX;
 #define GetMenuItemInfo GetMenuItemInfoW
 #define GetMenuString GetMenuStringW
 #define GetMessage GetMessageW
-#define GetMonitorInfo  GetMonitorInfoW
+#define GetMonitorInfo GetMonitorInfoW
 #define GetProp GetPropW
 #define GetTabbedTextExtent GetTabbedTextExtentW
 #define GetUserObjectInformation GetUserObjectInformationW
@@ -3787,7 +3799,7 @@ typedef MONITORINFOEXA MONITORINFOEX, *LPMONITORINFOEX;
 #define GetMenuItemInfo GetMenuItemInfoA
 #define GetMenuString GetMenuStringA
 #define GetMessage GetMessageA
-#define GetMonitorInfo  GetMonitorInfoA
+#define GetMonitorInfo GetMonitorInfoA
 #define GetProp GetPropA
 #define GetTabbedTextExtent GetTabbedTextExtentA
 #define GetUserObjectInformation GetUserObjectInformationA
@@ -3870,6 +3882,7 @@ typedef NONCLIENTMETRICSA NONCLIENTMETRICS,*LPNONCLIENTMETRICS;
 #endif /* NOGDI */
 #endif /* UNICODE */
 #endif /* RC_INVOKED */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/winsup/w32api/lib/user32.def b/winsup/w32api/lib/user32.def
index 712f4141e..2a88ebeec 100644
--- a/winsup/w32api/lib/user32.def
+++ b/winsup/w32api/lib/user32.def
@@ -542,6 +542,7 @@ SetTimer@16
 SetUserObjectInformationA@16
 SetUserObjectInformationW@16
 SetUserObjectSecurity@12
+SetWinEventHook@28
 SetWindowContextHelpId@8
 _imp__SetWindowContextHelpId@8
 SetWindowLongA@12
@@ -594,6 +595,7 @@ UnregisterClassW@8
 UnregisterHotKey@8
 UpdateLayeredWindow@36
 UpdateWindow@4
+UserHandleGrantAccess@12
 ValidateRect@8
 ValidateRgn@8
 VkKeyScanA@4