Began work on message queue and default window procedure

svn path=/trunk/; revision=2504
This commit is contained in:
David Welch 2002-01-13 22:52:08 +00:00
parent a600e78a7a
commit 43b2190795
27 changed files with 956 additions and 924 deletions

View file

@ -2,7 +2,7 @@
#include <string.h> #include <string.h>
#include <windows.h> #include <windows.h>
#define SIZE (128*1024*1024) #define SIZE (65*1024*1024)
ULONG x[SIZE / 4096]; ULONG x[SIZE / 4096];

View file

@ -531,3 +531,5 @@ NtUserWaitMessage 0
NtUserWin32PoolAllocationStats 6 NtUserWin32PoolAllocationStats 6
NtUserWindowFromPoint 2 NtUserWindowFromPoint 2
NtUserYieldTask 0 NtUserYieldTask 0
# ReactOS only system calls
NtUserAcquireOrReleaseInputOwnership 1

View file

@ -318,8 +318,10 @@ typedef enum _SID_NAME_USE {
#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF)) #define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF))
#define HIWORD(l) ((WORD) (((DWORD) (l) >> 16) & 0xFFFF)) #define HIWORD(l) ((WORD) (((DWORD) (l) >> 16) & 0xFFFF))
#define SHIWORD(l) ((INT16) (((DWORD) (l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE) (w)) #define LOBYTE(w) ((BYTE) (w))
#define LOWORD(l) ((WORD) (l)) #define LOWORD(l) ((WORD) (l))
#define SLOWORD(l) ((INT16) (l))
#define MAKELONG(a, b) ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16)) #define MAKELONG(a, b) ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))
#define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8)) #define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8))

View file

@ -154,12 +154,14 @@ typedef struct _GDI_TEB_BATCH
ULONG Buffer[0x136]; ULONG Buffer[0x136];
} GDI_TEB_BATCH, *PGDI_TEB_BATCH; } GDI_TEB_BATCH, *PGDI_TEB_BATCH;
// FIXME: Redundant definition of W32THREAD also in ntoskrnl\include\internal\ps.h
typedef struct _W32THREAD typedef struct _W32THREAD
{ {
PVOID MessageQueue; PVOID MessageQueue;
} __attribute__((packed)) W32THREAD, *PW32THREAD; } __attribute__((packed)) W32THREAD, *PW32THREAD;
PW32THREAD STDCALL
PsGetWin32Thread(VOID);
typedef struct _TEB typedef struct _TEB
{ {
NT_TIB Tib; // 00h NT_TIB Tib; // 00h

View file

@ -1,4 +1,4 @@
# $Id: makefile_rex,v 1.20 2001/08/21 20:13:07 chorns Exp $ # $Id: makefile_rex,v 1.21 2002/01/13 22:52:07 dwelch Exp $
PATH_TO_TOP = ../.. PATH_TO_TOP = ../..
@ -32,7 +32,8 @@ MISC_OBJECTS = \
WINDOWS_OBJECTS = \ WINDOWS_OBJECTS = \
windows/class.o \ windows/class.o \
windows/message.o \ windows/message.o \
windows/window.o windows/window.o \
windows/defwnd.o
OBJECTS = \ OBJECTS = \
$(MISC_OBJECTS) \ $(MISC_OBJECTS) \

View file

@ -1,4 +1,4 @@
/* $Id: window.c,v 1.2 2001/07/06 00:05:05 rex Exp $ /* $Id: window.c,v 1.3 2002/01/13 22:52:07 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS user32.dll * PROJECT: ReactOS user32.dll
@ -8,79 +8,67 @@
* UPDATE HISTORY: * UPDATE HISTORY:
* 06-06-2001 CSH Created * 06-06-2001 CSH Created
*/ */
/* INCLUDES ******************************************************************/
#include <windows.h> #include <windows.h>
#include <user32.h> #include <user32.h>
#include <window.h> #include <window.h>
#include <debug.h> #include <debug.h>
/* FUNCTIONS *****************************************************************/
WINBOOL WINBOOL STDCALL
STDCALL AdjustWindowRect(LPRECT lpRect,
AdjustWindowRect(
LPRECT lpRect,
DWORD dwStyle, DWORD dwStyle,
WINBOOL bMenu) WINBOOL bMenu)
{ {
return FALSE; return(AdjustWindowRectEx(lpRect, dwStyle, bMenu, 0));
} }
WINBOOL WINBOOL STDCALL
STDCALL AdjustWindowRectEx(LPRECT lpRect,
AdjustWindowRectEx(
LPRECT lpRect,
DWORD dwStyle, DWORD dwStyle,
WINBOOL bMenu, WINBOOL bMenu,
DWORD dwExStyle) DWORD dwExStyle)
{ {
return FALSE; return(FALSE);
} }
WINBOOL WINBOOL STDCALL
STDCALL AllowSetForegroundWindow(DWORD dwProcessId)
AllowSetForegroundWindow(
DWORD dwProcessId)
{ {
return FALSE; return(FALSE);
} }
WINBOOL WINBOOL STDCALL
STDCALL AnimateWindow(HWND hwnd,
AnimateWindow(
HWND hwnd,
DWORD dwTime, DWORD dwTime,
DWORD dwFlags) DWORD dwFlags)
{ {
return FALSE; return FALSE;
} }
UINT UINT STDCALL
STDCALL ArrangeIconicWindows(HWND hWnd)
ArrangeIconicWindows(
HWND hWnd)
{ {
return 0; return 0;
} }
HDWP HDWP STDCALL
STDCALL BeginDeferWindowPos(int nNumWindows)
BeginDeferWindowPos(
int nNumWindows)
{ {
return (HDWP)0; return (HDWP)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL BringWindowToTop(HWND hWnd)
BringWindowToTop(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WORD WORD STDCALL
STDCALL CascadeWindows(HWND hwndParent,
CascadeWindows(
HWND hwndParent,
UINT wHow, UINT wHow,
CONST RECT *lpRect, CONST RECT *lpRect,
UINT cKids, UINT cKids,
@ -89,37 +77,29 @@ CascadeWindows(
return 0; return 0;
} }
HWND HWND STDCALL
STDCALL ChildWindowFromPoint(HWND hWndParent,
ChildWindowFromPoint(
HWND hWndParent,
POINT Point) POINT Point)
{ {
return (HWND)0; return (HWND)0;
} }
HWND HWND STDCALL
STDCALL ChildWindowFromPointEx(HWND hwndParent,
ChildWindowFromPointEx(
HWND hwndParent,
POINT pt, POINT pt,
UINT uFlags) UINT uFlags)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL CloseWindow(HWND hWnd)
CloseWindow(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL CreateWindowExA(DWORD dwExStyle,
CreateWindowExA(
DWORD dwExStyle,
LPCSTR lpClassName, LPCSTR lpClassName,
LPCSTR lpWindowName, LPCSTR lpWindowName,
DWORD dwStyle, DWORD dwStyle,
@ -136,26 +116,31 @@ CreateWindowExA(
UNICODE_STRING ClassName; UNICODE_STRING ClassName;
HWND Handle; HWND Handle;
if (IS_ATOM(lpClassName)) { if (IS_ATOM(lpClassName))
{
RtlInitUnicodeString(&ClassName, NULL); RtlInitUnicodeString(&ClassName, NULL);
ClassName.Buffer = (LPWSTR)lpClassName; ClassName.Buffer = (LPWSTR)lpClassName;
} else { }
if (!RtlCreateUnicodeStringFromAsciiz(&(ClassName), (PCSZ)lpClassName)) { else
{
if (!RtlCreateUnicodeStringFromAsciiz(&(ClassName), (PCSZ)lpClassName))
{
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return (HWND)0; return (HWND)0;
} }
} }
if (!RtlCreateUnicodeStringFromAsciiz(&WindowName, (PCSZ)lpWindowName)) { if (!RtlCreateUnicodeStringFromAsciiz(&WindowName, (PCSZ)lpWindowName))
if (!IS_ATOM(lpClassName)) { {
if (!IS_ATOM(lpClassName))
{
RtlFreeUnicodeString(&ClassName); RtlFreeUnicodeString(&ClassName);
} }
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return (HWND)0; return (HWND)0;
} }
Handle = NtUserCreateWindowEx( Handle = NtUserCreateWindowEx(dwExStyle,
dwExStyle,
&ClassName, &ClassName,
&WindowName, &WindowName,
dwStyle, dwStyle,
@ -171,17 +156,16 @@ CreateWindowExA(
RtlFreeUnicodeString(&WindowName); RtlFreeUnicodeString(&WindowName);
if (!IS_ATOM(lpClassName)) { if (!IS_ATOM(lpClassName))
{
RtlFreeUnicodeString(&ClassName); RtlFreeUnicodeString(&ClassName);
} }
return Handle; return Handle;
} }
HWND HWND STDCALL
STDCALL CreateWindowExW(DWORD dwExStyle,
CreateWindowExW(
DWORD dwExStyle,
LPCWSTR lpClassName, LPCWSTR lpClassName,
LPCWSTR lpWindowName, LPCWSTR lpWindowName,
DWORD dwStyle, DWORD dwStyle,
@ -198,17 +182,19 @@ CreateWindowExW(
UNICODE_STRING ClassName; UNICODE_STRING ClassName;
HANDLE Handle; HANDLE Handle;
if (IS_ATOM(lpClassName)) { if (IS_ATOM(lpClassName))
{
RtlInitUnicodeString(&ClassName, NULL); RtlInitUnicodeString(&ClassName, NULL);
ClassName.Buffer = (LPWSTR)lpClassName; ClassName.Buffer = (LPWSTR)lpClassName;
} else { }
else
{
RtlInitUnicodeString(&ClassName, lpClassName); RtlInitUnicodeString(&ClassName, lpClassName);
} }
RtlInitUnicodeString(&WindowName, lpWindowName); RtlInitUnicodeString(&WindowName, lpWindowName);
Handle = NtUserCreateWindowEx( Handle = NtUserCreateWindowEx(dwExStyle,
dwExStyle,
&ClassName, &ClassName,
&WindowName, &WindowName,
dwStyle, dwStyle,
@ -225,10 +211,8 @@ CreateWindowExW(
return (HWND)Handle; return (HWND)Handle;
} }
HDWP HDWP STDCALL
STDCALL DeferWindowPos(HDWP hWinPosInfo,
DeferWindowPos(
HDWP hWinPosInfo,
HWND hWnd, HWND hWnd,
HWND hWndInsertAfter, HWND hWndInsertAfter,
int x, int x,
@ -240,87 +224,42 @@ DeferWindowPos(
return (HDWP)0; return (HDWP)0;
} }
LRESULT WINBOOL STDCALL
STDCALL DestroyWindow(HWND hWnd)
DefWindowProcA(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE:
return 0;
case WM_DESTROY:
return 0;
default:
return 0;
}
return 0;
}
LRESULT
STDCALL
DefWindowProcW(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam)
{
return (LRESULT)0;
}
WINBOOL
STDCALL
DestroyWindow(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL EndDeferWindowPos(HDWP hWinPosInfo)
EndDeferWindowPos(
HDWP hWinPosInfo)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL EnumChildWindows(HWND hWndParent,
EnumChildWindows(
HWND hWndParent,
ENUMWINDOWSPROC lpEnumFunc, ENUMWINDOWSPROC lpEnumFunc,
LPARAM lParam) LPARAM lParam)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL EnumThreadWindows(DWORD dwThreadId,
EnumThreadWindows(
DWORD dwThreadId,
ENUMWINDOWSPROC lpfn, ENUMWINDOWSPROC lpfn,
LPARAM lParam) LPARAM lParam)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL EnumWindows(ENUMWINDOWSPROC lpEnumFunc,
EnumWindows(
ENUMWINDOWSPROC lpEnumFunc,
LPARAM lParam) LPARAM lParam)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL
FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName) FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
{ {
//FIXME: FindWindow does not search children, but FindWindowEx does. //FIXME: FindWindow does not search children, but FindWindowEx does.
@ -328,10 +267,8 @@ FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
return FindWindowExA (NULL, NULL, lpClassName, lpWindowName); return FindWindowExA (NULL, NULL, lpClassName, lpWindowName);
} }
HWND HWND STDCALL
STDCALL FindWindowExA(HWND hwndParent,
FindWindowExA(
HWND hwndParent,
HWND hwndChildAfter, HWND hwndChildAfter,
LPCSTR lpszClass, LPCSTR lpszClass,
LPCSTR lpszWindow) LPCSTR lpszWindow)
@ -339,8 +276,7 @@ FindWindowExA(
return (HWND)0; return (HWND)0;
} }
HWND HWND STDCALL
STDCALL
FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName) FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
{ {
//FIXME: FindWindow does not search children, but FindWindowEx does. //FIXME: FindWindow does not search children, but FindWindowEx does.
@ -348,10 +284,8 @@ FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
return FindWindowExW (NULL, NULL, lpClassName, lpWindowName); return FindWindowExW (NULL, NULL, lpClassName, lpWindowName);
} }
HWND HWND STDCALL
STDCALL FindWindowExW(HWND hwndParent,
FindWindowExW(
HWND hwndParent,
HWND hwndChildAfter, HWND hwndChildAfter,
LPCWSTR lpszClass, LPCWSTR lpszClass,
LPCWSTR lpszWindow) LPCWSTR lpszWindow)
@ -359,10 +293,8 @@ FindWindowExW(
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetAltTabInfo(HWND hwnd,
GetAltTabInfo(
HWND hwnd,
int iItem, int iItem,
PALTTABINFO pati, PALTTABINFO pati,
LPTSTR pszItemText, LPTSTR pszItemText,
@ -371,10 +303,8 @@ GetAltTabInfo(
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetAltTabInfoA(HWND hwnd,
GetAltTabInfoA(
HWND hwnd,
int iItem, int iItem,
PALTTABINFO pati, PALTTABINFO pati,
LPSTR pszItemText, LPSTR pszItemText,
@ -383,10 +313,8 @@ GetAltTabInfoA(
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetAltTabInfoW(HWND hwnd,
GetAltTabInfoW(
HWND hwnd,
int iItem, int iItem,
PALTTABINFO pati, PALTTABINFO pati,
LPWSTR pszItemText, LPWSTR pszItemText,
@ -395,260 +323,202 @@ GetAltTabInfoW(
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL GetAncestor(HWND hwnd,
GetAncestor(
HWND hwnd,
UINT gaFlags) UINT gaFlags)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetClientRect(HWND hWnd,
GetClientRect(
HWND hWnd,
LPRECT lpRect) LPRECT lpRect)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL
GetDesktopWindow(VOID) GetDesktopWindow(VOID)
{ {
return (HWND)0; return (HWND)0;
} }
HWND HWND STDCALL
STDCALL
GetForegroundWindow(VOID) GetForegroundWindow(VOID)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetGUIThreadInfo(DWORD idThread,
GetGUIThreadInfo(
DWORD idThread,
LPGUITHREADINFO lpgui) LPGUITHREADINFO lpgui)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL GetLastActivePopup(HWND hWnd)
GetLastActivePopup(
HWND hWnd)
{ {
return (HWND)0; return (HWND)0;
} }
HWND HWND STDCALL
STDCALL GetParent(HWND hWnd)
GetParent(
HWND hWnd)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetProcessDefaultLayout(DWORD *pdwDefaultLayout)
GetProcessDefaultLayout(
DWORD *pdwDefaultLayout)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetTitleBarInfo(HWND hwnd,
GetTitleBarInfo(
HWND hwnd,
PTITLEBARINFO pti) PTITLEBARINFO pti)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL GetTopWindow(HWND hWnd)
GetTopWindow(
HWND hWnd)
{ {
return (HWND)0; return (HWND)0;
} }
HWND HWND STDCALL
STDCALL GetWindow(HWND hWnd,
GetWindow(
HWND hWnd,
UINT uCmd) UINT uCmd)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetWindowInfo(HWND hwnd,
GetWindowInfo(
HWND hwnd,
PWINDOWINFO pwi) PWINDOWINFO pwi)
{ {
return FALSE; return FALSE;
} }
UINT UINT STDCALL
STDCALL GetWindowModuleFileName(HWND hwnd,
GetWindowModuleFileName(
HWND hwnd,
LPSTR lpszFileName, LPSTR lpszFileName,
UINT cchFileNameMax) UINT cchFileNameMax)
{ {
return 0; return 0;
} }
UINT UINT STDCALL
STDCALL GetWindowModuleFileNameA(HWND hwnd,
GetWindowModuleFileNameA(
HWND hwnd,
LPSTR lpszFileName, LPSTR lpszFileName,
UINT cchFileNameMax) UINT cchFileNameMax)
{ {
return 0; return 0;
} }
UINT UINT STDCALL
STDCALL GetWindowModuleFileNameW(HWND hwnd,
GetWindowModuleFileNameW(
HWND hwnd,
LPWSTR lpszFileName, LPWSTR lpszFileName,
UINT cchFileNameMax) UINT cchFileNameMax)
{ {
return 0; return 0;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetWindowPlacement(HWND hWnd,
GetWindowPlacement(
HWND hWnd,
WINDOWPLACEMENT *lpwndpl) WINDOWPLACEMENT *lpwndpl)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL GetWindowRect(HWND hWnd,
GetWindowRect(
HWND hWnd,
LPRECT lpRect) LPRECT lpRect)
{ {
return FALSE; return FALSE;
} }
int int STDCALL
STDCALL GetWindowTextA(HWND hWnd,
GetWindowTextA(
HWND hWnd,
LPSTR lpString, LPSTR lpString,
int nMaxCount) int nMaxCount)
{ {
return 0; return 0;
} }
int int STDCALL
STDCALL GetWindowTextLengthA(HWND hWnd)
GetWindowTextLengthA(
HWND hWnd)
{ {
return 0; return 0;
} }
int int STDCALL
STDCALL GetWindowTextLengthW(HWND hWnd)
GetWindowTextLengthW(
HWND hWnd)
{ {
return 0; return 0;
} }
int int STDCALL
STDCALL GetWindowTextW(HWND hWnd,
GetWindowTextW(
HWND hWnd,
LPWSTR lpString, LPWSTR lpString,
int nMaxCount) int nMaxCount)
{ {
return 0; return 0;
} }
DWORD DWORD STDCALL
STDCALL GetWindowThreadProcessId(HWND hWnd,
GetWindowThreadProcessId(
HWND hWnd,
LPDWORD lpdwProcessId) LPDWORD lpdwProcessId)
{ {
return 0; return 0;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsChild(HWND hWndParent,
IsChild(
HWND hWndParent,
HWND hWnd) HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsIconic(HWND hWnd)
IsIconic(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsWindow(HWND hWnd)
IsWindow(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsWindowUnicode(HWND hWnd)
IsWindowUnicode(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsWindowVisible(HWND hWnd)
IsWindowVisible(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL IsZoomed(HWND hWnd)
IsZoomed(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL LockSetForegroundWindow(UINT uLockCode)
LockSetForegroundWindow(
UINT uLockCode)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL MoveWindow(HWND hWnd,
MoveWindow(
HWND hWnd,
int X, int X,
int Y, int Y,
int nWidth, int nWidth,
@ -658,44 +528,35 @@ MoveWindow(
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL OpenIcon(HWND hWnd)
OpenIcon(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL RealChildWindowFromPoint(HWND hwndParent,
RealChildWindowFromPoint(
HWND hwndParent,
POINT ptParentClientCoords) POINT ptParentClientCoords)
{ {
return (HWND)0; return (HWND)0;
} }
UINT UINT
RealGetWindowClass( RealGetWindowClass(HWND hwnd,
HWND hwnd,
LPTSTR pszType, LPTSTR pszType,
UINT cchType) UINT cchType)
{ {
return 0; return 0;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetForegroundWindow(HWND hWnd)
SetForegroundWindow(
HWND hWnd)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetLayeredWindowAttributes(HWND hwnd,
SetLayeredWindowAttributes(
HWND hwnd,
COLORREF crKey, COLORREF crKey,
BYTE bAlpha, BYTE bAlpha,
DWORD dwFlags) DWORD dwFlags)
@ -703,36 +564,28 @@ SetLayeredWindowAttributes(
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL SetParent(HWND hWndChild,
SetParent(
HWND hWndChild,
HWND hWndNewParent) HWND hWndNewParent)
{ {
return (HWND)0; return (HWND)0;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetProcessDefaultLayout(DWORD dwDefaultLayout)
SetProcessDefaultLayout(
DWORD dwDefaultLayout)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetWindowPlacement(HWND hWnd,
SetWindowPlacement(
HWND hWnd,
CONST WINDOWPLACEMENT *lpwndpl) CONST WINDOWPLACEMENT *lpwndpl)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetWindowPos(HWND hWnd,
SetWindowPos(
HWND hWnd,
HWND hWndInsertAfter, HWND hWndInsertAfter,
int X, int X,
int Y, int Y,
@ -743,55 +596,43 @@ SetWindowPos(
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetWindowTextA(HWND hWnd,
SetWindowTextA(
HWND hWnd,
LPCSTR lpString) LPCSTR lpString)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL SetWindowTextW(HWND hWnd,
SetWindowTextW(
HWND hWnd,
LPCWSTR lpString) LPCWSTR lpString)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL ShowOwnedPopups(HWND hWnd,
ShowOwnedPopups(
HWND hWnd,
WINBOOL fShow) WINBOOL fShow)
{ {
return FALSE; return FALSE;
} }
WINBOOL WINBOOL STDCALL
STDCALL ShowWindow(HWND hWnd,
ShowWindow(
HWND hWnd,
int nCmdShow) int nCmdShow)
{ {
return NtUserShowWindow(hWnd, nCmdShow); return NtUserShowWindow(hWnd, nCmdShow);
} }
WINBOOL WINBOOL STDCALL
STDCALL ShowWindowAsync(HWND hWnd,
ShowWindowAsync(
HWND hWnd,
int nCmdShow) int nCmdShow)
{ {
return FALSE; return FALSE;
} }
WORD WORD STDCALL
STDCALL TileWindows(HWND hwndParent,
TileWindows(
HWND hwndParent,
UINT wHow, UINT wHow,
CONST RECT *lpRect, CONST RECT *lpRect,
UINT cKids, UINT cKids,
@ -800,10 +641,8 @@ TileWindows(
return 0; return 0;
} }
WINBOOL WINBOOL STDCALL
STDCALL UpdateLayeredWindow(HWND hwnd,
UpdateLayeredWindow(
HWND hwnd,
HDC hdcDst, HDC hdcDst,
POINT *pptDst, POINT *pptDst,
SIZE *psize, SIZE *psize,
@ -816,10 +655,8 @@ UpdateLayeredWindow(
return FALSE; return FALSE;
} }
HWND HWND STDCALL
STDCALL WindowFromPoint(POINT Point)
WindowFromPoint(
POINT Point)
{ {
return (HWND)0; return (HWND)0;
} }

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.def,v 1.124 2002/01/13 22:02:30 ea Exp $ ; $Id: ntoskrnl.def,v 1.125 2002/01/13 22:52:07 dwelch Exp $
; ;
; reactos/ntoskrnl/ntoskrnl.def ; reactos/ntoskrnl/ntoskrnl.def
; ;
@ -503,6 +503,7 @@ NlsMbOemCodePageTag DATA
NlsOemLeadByteInfo DATA NlsOemLeadByteInfo DATA
NtAddAtom@8 NtAddAtom@8
NtAdjustPrivilegesToken@24 NtAdjustPrivilegesToken@24
NtAlertThread@4
NtAllocateLocallyUniqueId@4 NtAllocateLocallyUniqueId@4
NtAllocateUuids@12 NtAllocateUuids@12
NtAllocateVirtualMemory@24 NtAllocateVirtualMemory@24
@ -593,7 +594,7 @@ PsAssignImpersonationToken@8
PsCreateSystemProcess@12 PsCreateSystemProcess@12
PsCreateSystemThread@28 PsCreateSystemThread@28
PsCreateWin32Process@4 PsCreateWin32Process@4
PsDispatchThread@4 PsGetWin32Thread@0
PsEstablishWin32Callouts@24 PsEstablishWin32Callouts@24
PsGetCurrentProcessId@0 PsGetCurrentProcessId@0
PsGetCurrentThreadId@0 PsGetCurrentThreadId@0

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.edf,v 1.110 2002/01/13 22:02:30 ea Exp $ ; $Id: ntoskrnl.edf,v 1.111 2002/01/13 22:52:07 dwelch Exp $
; ;
; reactos/ntoskrnl/ntoskrnl.def ; reactos/ntoskrnl/ntoskrnl.def
; ;
@ -503,6 +503,7 @@ NlsMbOemCodePageTag DATA
NlsOemLeadByteInfo DATA NlsOemLeadByteInfo DATA
NtAddAtom=NtAddAtom@8 NtAddAtom=NtAddAtom@8
NtAdjustPrivilegesToken=NtAdjustPrivilegesToken@24 NtAdjustPrivilegesToken=NtAdjustPrivilegesToken@24
NtAlertThread=NtAlertThread@4
NtAllocateLocallyUniqueId=NtAllocateLocallyUniqueId@4 NtAllocateLocallyUniqueId=NtAllocateLocallyUniqueId@4
NtAllocateUuids=NtAllocateUuids@12 NtAllocateUuids=NtAllocateUuids@12
NtAllocateVirtualMemory=NtAllocateVirtualMemory@24 NtAllocateVirtualMemory=NtAllocateVirtualMemory@24
@ -593,7 +594,7 @@ PsAssignImpersonationToken=PsAssignImpersonationToken@8
PsCreateSystemProcess=PsCreateSystemProcess@12 PsCreateSystemProcess=PsCreateSystemProcess@12
PsCreateSystemThread=PsCreateSystemThread@28 PsCreateSystemThread=PsCreateSystemThread@28
PsCreateWin32Process=PsCreateWin32Process@4 PsCreateWin32Process=PsCreateWin32Process@4
PsDispatchThread=PsDispatchThread@4 PsGetWin32Thread=PsGetWin32Thread@0
PsEstablishWin32Callouts=PsEstablishWin32Callouts@24 PsEstablishWin32Callouts=PsEstablishWin32Callouts@24
PsGetCurrentProcessId=PsGetCurrentProcessId@0 PsGetCurrentProcessId=PsGetCurrentProcessId@0
PsGetCurrentThreadId=PsGetCurrentThreadId@0 PsGetCurrentThreadId=PsGetCurrentThreadId@0

View file

@ -1,4 +1,4 @@
/* $Id: thread.c,v 1.83 2002/01/08 00:49:01 dwelch Exp $ /* $Id: thread.c,v 1.84 2002/01/13 22:52:07 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -462,7 +462,6 @@ NtAlertResumeThread(IN HANDLE ThreadHandle,
NTSTATUS STDCALL NtAlertThread (IN HANDLE ThreadHandle) NTSTATUS STDCALL NtAlertThread (IN HANDLE ThreadHandle)
{ {
#if 0
PETHREAD Thread; PETHREAD Thread;
NTSTATUS Status; NTSTATUS Status;
NTSTATUS ThreadStatus; NTSTATUS ThreadStatus;
@ -483,8 +482,6 @@ NTSTATUS STDCALL NtAlertThread (IN HANDLE ThreadHandle)
ObDereferenceObject(Thread); ObDereferenceObject(Thread);
return(STATUS_SUCCESS); return(STATUS_SUCCESS);
#endif
UNIMPLEMENTED;
} }
NTSTATUS STDCALL NTSTATUS STDCALL

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: win32.c,v 1.1 2002/01/04 13:09:11 ekohl Exp $ /* $Id: win32.c,v 1.2 2002/01/13 22:52:07 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -38,9 +38,14 @@
static ULONG PspWin32ProcessSize = 0; static ULONG PspWin32ProcessSize = 0;
/* FUNCTIONS ***************************************************************/ /* FUNCTIONS ***************************************************************/
PW32THREAD STDCALL
PsGetWin32Thread(VOID)
{
return(PsGetCurrentThread()->Win32Thread);
}
NTSTATUS STDCALL NTSTATUS STDCALL
PsCreateWin32Process(PEPROCESS Process) PsCreateWin32Process(PEPROCESS Process)
{ {

View file

@ -10,8 +10,17 @@ PFN_DIB_PutPixel DIB_4BPP_PutPixel(PSURFOBJ SurfObj, LONG x, LONG y, ULONG c);
PFN_DIB_GetPixel DIB_4BPP_GetPixel(PSURFOBJ SurfObj, LONG x, LONG y); PFN_DIB_GetPixel DIB_4BPP_GetPixel(PSURFOBJ SurfObj, LONG x, LONG y);
PFN_DIB_HLine DIB_4BPP_HLine(PSURFOBJ SurfObj, LONG x1, LONG x2, LONG y, ULONG c); PFN_DIB_HLine DIB_4BPP_HLine(PSURFOBJ SurfObj, LONG x1, LONG x2, LONG y, ULONG c);
PFN_DIB_VLine DIB_4BPP_VLine(PSURFOBJ SurfObj, LONG x, LONG y1, LONG y2, ULONG c); PFN_DIB_VLine DIB_4BPP_VLine(PSURFOBJ SurfObj, LONG x, LONG y1, LONG y2, ULONG c);
BOOLEAN DIB_To_4BPP_Bitblt( SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
SURFGDI *DestGDI, SURFGDI *SourceGDI,
PRECTL DestRect, POINTL *SourcePoint,
ULONG Delta, XLATEOBJ *ColorTranslation);
PFN_DIB_PutPixel DIB_24BPP_PutPixel(PSURFOBJ SurfObj, LONG x, LONG y, ULONG c); PFN_DIB_PutPixel DIB_24BPP_PutPixel(PSURFOBJ SurfObj, LONG x, LONG y, ULONG c);
PFN_DIB_GetPixel DIB_24BPP_GetPixel(PSURFOBJ SurfObj, LONG x, LONG y); PFN_DIB_GetPixel DIB_24BPP_GetPixel(PSURFOBJ SurfObj, LONG x, LONG y);
PFN_DIB_HLine DIB_24BPP_HLine(PSURFOBJ SurfObj, LONG x1, LONG x2, LONG y, ULONG c); PFN_DIB_HLine DIB_24BPP_HLine(PSURFOBJ SurfObj, LONG x1, LONG x2, LONG y, ULONG c);
PFN_DIB_VLine DIB_24BPP_VLine(PSURFOBJ SurfObj, LONG x, LONG y1, LONG y2, ULONG c); PFN_DIB_VLine DIB_24BPP_VLine(PSURFOBJ SurfObj, LONG x, LONG y1, LONG y2, ULONG
c);
BOOLEAN DIB_To_24BPP_Bitblt( SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
SURFGDI *DestGDI, SURFGDI *SourceGDI,
PRECTL DestRect, POINTL *SourcePoint,
ULONG Delta, XLATEOBJ *ColorTranslation);

View file

@ -14,6 +14,11 @@
#include "brush.h" #include "brush.h"
#include "enum.h" #include "enum.h"
#include "objects.h" #include "objects.h"
#include <include/mouse.h>
#include <include/object.h>
#include <include/dib.h>
#include <include/surface.h>
#include <include/copybits.h>
BOOL EngIntersectRect(PRECTL prcDst, PRECTL prcSrc1, PRECTL prcSrc2) BOOL EngIntersectRect(PRECTL prcDst, PRECTL prcSrc1, PRECTL prcSrc2)
{ {
@ -96,7 +101,7 @@ BOOL EngBitBlt(SURFOBJ *Dest, SURFOBJ *Source,
hTemp = EngCreateBitmap(TempSize, hTemp = EngCreateBitmap(TempSize,
DIB_GetDIBWidthBytes(DestRect->right - DestRect->left, BitsPerFormat(Dest->iBitmapFormat)), DIB_GetDIBWidthBytes(DestRect->right - DestRect->left, BitsPerFormat(Dest->iBitmapFormat)),
Dest->iBitmapFormat, 0, NULL); Dest->iBitmapFormat, 0, NULL);
TempSurf = (PSURFOBJ)AccessUserObject(hTemp); TempSurf = (PSURFOBJ)AccessUserObject((ULONG)hTemp);
// FIXME: Skip creating a TempSurf if we have the same BPP and palette // FIXME: Skip creating a TempSurf if we have the same BPP and palette
EngBitBlt(TempSurf, Source, NULL, NULL, ColorTranslation, &TempRect, SourcePoint, NULL, NULL, NULL, 0); EngBitBlt(TempSurf, Source, NULL, NULL, ColorTranslation, &TempRect, SourcePoint, NULL, NULL, NULL, 0);

View file

@ -12,6 +12,7 @@
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include "objects.h" #include "objects.h"
#include "clip.h" #include "clip.h"
#include <include/object.h>
// FIXME: Complex clipping doesn't work // FIXME: Complex clipping doesn't work

View file

@ -12,6 +12,9 @@
#include "objects.h" #include "objects.h"
#include "enum.h" #include "enum.h"
#include "../dib/dib.h" #include "../dib/dib.h"
#include <include/mouse.h>
#include <include/object.h>
#include <include/eng.h>
BOOLEAN CopyBitsCopy(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, BOOLEAN CopyBitsCopy(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
SURFGDI *DestGDI, SURFGDI *SourceGDI, SURFGDI *DestGDI, SURFGDI *SourceGDI,
@ -108,7 +111,7 @@ BOOL EngCopyBits(SURFOBJ *Dest, SURFOBJ *Source,
// If CopyBits wasn't hooked, BitBlt must be // If CopyBits wasn't hooked, BitBlt must be
ret = EngBitBlt(Dest, Source, ret = EngBitBlt(Dest, Source,
NULL, Clip, ColorTranslation, DestRect, SourcePoint, NULL, Clip, ColorTranslation, DestRect, SourcePoint,
NULL, NULL, NULL, NULL); NULL, NULL, NULL, 0);
MouseSafetyOnDrawEnd(Source, SourceGDI); MouseSafetyOnDrawEnd(Source, SourceGDI);
MouseSafetyOnDrawEnd(Dest, DestGDI); MouseSafetyOnDrawEnd(Dest, DestGDI);

View file

@ -15,7 +15,8 @@
BOOL FillSolid(SURFOBJ *Surface, PRECTL Dimensions, ULONG iColor) BOOL FillSolid(SURFOBJ *Surface, PRECTL Dimensions, ULONG iColor)
{ {
ULONG x, y, LineWidth, leftOfBitmap; LONG y;
ULONG x, LineWidth, leftOfBitmap;
SURFGDI *SurfaceGDI; SURFGDI *SurfaceGDI;
SurfaceGDI = (SURFGDI*)AccessInternalObjectFromUserObject(Surface); SurfaceGDI = (SURFGDI*)AccessInternalObjectFromUserObject(Surface);

View file

@ -38,7 +38,7 @@ HPALETTE EngCreatePalette(ULONG Mode,
if(Mode==PAL_INDEXED) if(Mode==PAL_INDEXED)
{ {
PalGDI->NumColors = NumColors; PalGDI->NumColors = NumColors;
PalGDI->IndexedColors = Colors; PalGDI->IndexedColors = (PULONG)Colors;
} else } else
if(Mode==PAL_BITFIELDS) if(Mode==PAL_BITFIELDS)
{ {

View file

@ -177,7 +177,7 @@ BOOL EngAssociateSurface(HSURF Surface, HDEV Dev, ULONG Hooks)
// Hook up specified functions // Hook up specified functions
if(Hooks & HOOK_BITBLT) SurfGDI->BitBlt = Dc->DriverFunctions.BitBlt; if(Hooks & HOOK_BITBLT) SurfGDI->BitBlt = Dc->DriverFunctions.BitBlt;
if(Hooks & HOOK_TRANSPARENTBLT) SurfGDI->TransparentBlt = Dc->DriverFunctions.TransparentBlt; if(Hooks & HOOK_TRANSPARENTBLT) SurfGDI->TransparentBlt = Dc->DriverFunctions.TransparentBlt;
if(Hooks & HOOK_STRETCHBLT) SurfGDI->StretchBlt = Dc->DriverFunctions.StretchBlt; if(Hooks & HOOK_STRETCHBLT) SurfGDI->StretchBlt = (PFN_StretchBlt)Dc->DriverFunctions.StretchBlt;
if(Hooks & HOOK_TEXTOUT) SurfGDI->TextOut = Dc->DriverFunctions.TextOut; if(Hooks & HOOK_TEXTOUT) SurfGDI->TextOut = Dc->DriverFunctions.TextOut;
if(Hooks & HOOK_PAINT) SurfGDI->Paint = Dc->DriverFunctions.Paint; if(Hooks & HOOK_PAINT) SurfGDI->Paint = Dc->DriverFunctions.Paint;
if(Hooks & HOOK_STROKEPATH) SurfGDI->StrokePath = Dc->DriverFunctions.StrokePath; if(Hooks & HOOK_STROKEPATH) SurfGDI->StrokePath = Dc->DriverFunctions.StrokePath;
@ -191,7 +191,7 @@ BOOL EngAssociateSurface(HSURF Surface, HDEV Dev, ULONG Hooks)
SurfGDI->CreateDeviceBitmap = Dc->DriverFunctions.CreateDeviceBitmap; SurfGDI->CreateDeviceBitmap = Dc->DriverFunctions.CreateDeviceBitmap;
SurfGDI->SetPalette = Dc->DriverFunctions.SetPalette; SurfGDI->SetPalette = Dc->DriverFunctions.SetPalette;
SurfGDI->MovePointer = Dc->DriverFunctions.MovePointer; SurfGDI->MovePointer = Dc->DriverFunctions.MovePointer;
SurfGDI->SetPointerShape = Dc->DriverFunctions.SetPointerShape; SurfGDI->SetPointerShape = (PFN_SetPointerShape)Dc->DriverFunctions.SetPointerShape;
return TRUE; return TRUE;
} }

View file

@ -5,7 +5,7 @@
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
VOID VOID
GuiCheck(VOID); W32kGuiCheck(VOID);
#endif /* __WIN32K_GUICHECK_H */ #endif /* __WIN32K_GUICHECK_H */

View file

@ -11,48 +11,51 @@ typedef struct _USER_MESSAGE
typedef struct _USER_MESSAGE_QUEUE typedef struct _USER_MESSAGE_QUEUE
{ {
LIST_ENTRY ListHead; LIST_ENTRY SentMessagesListHead;
PFAST_MUTEX ListLock; LIST_ENTRY PostedMessagesListHead;
LIST_ENTRY HardwareMessagesListHead;
FAST_MUTEX Lock;
BOOLEAN QuitPosted;
ULONG QuitExitCode;
KEVENT NewMessages;
ULONG QueueStatus;
HWND FocusWindow;
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE; } USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
VOID VOID
MsqInitializeMessage( MsqInitializeMessage(PUSER_MESSAGE Message,
PUSER_MESSAGE Message,
LPMSG Msg); LPMSG Msg);
PUSER_MESSAGE PUSER_MESSAGE
MsqCreateMessage( MsqCreateMessage(LPMSG Msg);
LPMSG Msg);
VOID VOID
MsqDestroyMessage( MsqDestroyMessage(PUSER_MESSAGE Message);
PUSER_MESSAGE Message);
VOID VOID
MsqPostMessage( MsqPostMessage(PUSER_MESSAGE_QUEUE MessageQueue,
PUSER_MESSAGE_QUEUE MessageQueue, PUSER_MESSAGE Message,
PUSER_MESSAGE Message); BOOLEAN Hardware);
BOOLEAN
BOOL MsqFindMessage(IN PUSER_MESSAGE_QUEUE MessageQueue,
MsqRetrieveMessage( IN BOOLEAN Hardware,
PUSER_MESSAGE_QUEUE MessageQueue, IN BOOLEAN Remove,
PUSER_MESSAGE *Message); IN HWND Wnd,
IN UINT MsgFilterLow,
IN UINT MsgFilterHigh,
OUT PUSER_MESSAGE* Message);
VOID VOID
MsqInitializeMessageQueue( MsqInitializeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE MessageQueue);
VOID VOID
MsqFreeMessageQueue( MsqFreeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE PUSER_MESSAGE_QUEUE
MsqCreateMessageQueue(VOID); MsqCreateMessageQueue(VOID);
VOID VOID
MsqDestroyMessageQueue( MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE MessageQueue); PUSER_MESSAGE_QUEUE
MsqGetHardwareMessageQueue(VOID);
NTSTATUS
MsqWaitForNewMessage(PUSER_MESSAGE_QUEUE MessageQueue);
NTSTATUS
MsqInitializeImpl(VOID);
#endif /* __WIN32K_MSGQUEUE_H */ #endif /* __WIN32K_MSGQUEUE_H */

View file

@ -102,6 +102,13 @@ VOID
ObmDestroyHandleTable( ObmDestroyHandleTable(
PUSER_HANDLE_TABLE HandleTable); PUSER_HANDLE_TABLE HandleTable);
PVOID AccessInternalObjectFromUserObject(PVOID UserObject);
PVOID AccessUserObject(ULONG Handle);
ULONG CreateGDIHandle(PVOID InternalObject, PVOID UserObject);
VOID FreeGDIHandle(ULONG Handle);
ULONG AccessHandleFromUserObject(PVOID UserObject);
PVOID AccessInternalObject(ULONG Handle);
#endif /* __WIN32K_OBJECT_H */ #endif /* __WIN32K_OBJECT_H */
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: dllmain.c,v 1.21 2001/11/02 06:10:11 rex Exp $ /* $Id: dllmain.c,v 1.22 2002/01/13 22:52:08 dwelch Exp $
* *
* Entry Point for win32k.sys * Entry Point for win32k.sys
*/ */
@ -71,6 +71,20 @@ DllMain (
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
Status = InitInputImpl();
if (!NT_SUCCESS(Status))
{
DbgPrint("Failed to initialize input implementation.\n");
return(Status);
}
Status = MsqInitializeImpl();
if (!NT_SUCCESS(Status))
{
DbgPrint("Failed to initialize message queue implementation.\n");
return(Status);
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,4 +1,4 @@
# $Id: makefile,v 1.40 2001/09/08 12:12:41 jfilby Exp $ # $Id: makefile,v 1.41 2002/01/13 22:52:08 dwelch Exp $
PATH_TO_TOP = ../.. PATH_TO_TOP = ../..
@ -13,24 +13,26 @@ TARGET_ENTRY = _DllMain@8
# from atheos appserver makefile # from atheos appserver makefile
COPTS = -pipe -O3 -I./freetype/include -c -Wall COPTS = -pipe -O3 -I./freetype/include -c -Wall
TARGET_CFLAGS = -I$(PATH_TO_TOP)/ntoskrnl/include -DUNICODE TARGET_CFLAGS = -I$(PATH_TO_TOP)/ntoskrnl/include -DUNICODE -Wall
ENG_OBJECTS= eng/debug.o eng/mem.o eng/brush.o eng/bitblt.o eng/clip.o eng/copybits.o \ ENG_OBJECTS= eng/debug.o eng/mem.o eng/brush.o eng/bitblt.o eng/clip.o \
eng/device.o eng/handle.o eng/lineto.o eng/paint.o eng/palette.o \ eng/copybits.o eng/device.o eng/handle.o eng/lineto.o eng/paint.o \
eng/surface.o eng/xlate.o eng/transblt.o eng/mouse.o eng/palette.o eng/surface.o eng/xlate.o eng/transblt.o eng/mouse.o
MAIN_OBJECTS = main/dllmain.o MAIN_OBJECTS = main/dllmain.o
MISC_OBJECTS = misc/driver.o misc/error.o misc/math.o misc/object.o MISC_OBJECTS = misc/driver.o misc/error.o misc/math.o misc/object.o
LDR_OBJECTS = ldr/loader.o LDR_OBJECTS = ldr/loader.o
NTUSER_OBJECTS = ntuser/class.o ntuser/guicheck.o ntuser/hook.o \ NTUSER_OBJECTS = ntuser/class.o ntuser/guicheck.o ntuser/hook.o \
ntuser/message.o ntuser/msgqueue.o ntuser/stubs.o \ ntuser/message.o ntuser/msgqueue.o ntuser/stubs.o \
ntuser/userobj.o ntuser/window.o ntuser/winsta.o ntuser/userobj.o ntuser/window.o ntuser/winsta.o \
ntuser/input.o
OBJECTS_OBJECTS = objects/bitmaps.o objects/brush.o objects/cliprgn.o \ OBJECTS_OBJECTS = objects/bitmaps.o objects/brush.o objects/cliprgn.o \
objects/color.o objects/coord.o objects/dc.o \ objects/color.o objects/coord.o objects/dc.o \
objects/fillshap.o objects/gdiobj.o objects/icm.o \ objects/fillshap.o objects/gdiobj.o objects/icm.o \
objects/line.o objects/metafile.o objects/paint.o \ objects/line.o objects/metafile.o objects/paint.o \
objects/path.o objects/pen.o objects/print.o \ objects/path.o objects/pen.o objects/print.o \
objects/region.o objects/text.o objects/wingl.o \ objects/region.o objects/text.o objects/wingl.o \
objects/bezier.o objects/objconv.o objects/dib.o objects/palette.o objects/bezier.o objects/objconv.o objects/dib.o \
objects/palette.o
DIB_OBJECTS = dib/dib4bpp.o dib/dib24bpp.o DIB_OBJECTS = dib/dib4bpp.o dib/dib24bpp.o
FREETYPE_OBJECTS = freetype/ctype.o freetype/grfont.o \ FREETYPE_OBJECTS = freetype/ctype.o freetype/grfont.o \
freetype/src/base/ftsystem.o freetype/src/base/ftdebug.o \ freetype/src/base/ftsystem.o freetype/src/base/ftdebug.o \

View file

@ -1,4 +1,4 @@
/* $Id: class.c,v 1.2 2001/07/06 00:05:05 rex Exp $ /* $Id: class.c,v 1.3 2002/01/13 22:52:08 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -8,6 +8,8 @@
* REVISION HISTORY: * REVISION HISTORY:
* 06-06-2001 CSH Created * 06-06-2001 CSH Created
*/ */
/* INCLUDES ******************************************************************/
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include <win32k/win32k.h> #include <win32k/win32k.h>
#include <win32k/userobj.h> #include <win32k/userobj.h>
@ -18,29 +20,32 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
/* GLOBALS *******************************************************************/
/* List of system classes */ /* List of system classes */
static LIST_ENTRY SystemClassListHead; static LIST_ENTRY SystemClassListHead;
static FAST_MUTEX SystemClassListLock; static FAST_MUTEX SystemClassListLock;
/* FUNCTIONS *****************************************************************/
NTSTATUS NTSTATUS
InitClassImpl(VOID) InitClassImpl(VOID)
{ {
ExInitializeFastMutex(&SystemClassListLock); ExInitializeFastMutex(&SystemClassListLock);
InitializeListHead(&SystemClassListHead); InitializeListHead(&SystemClassListHead);
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
NTSTATUS NTSTATUS
CleanupClassImpl(VOID) CleanupClassImpl(VOID)
{ {
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
DWORD DWORD
CliFindClassByName( CliFindClassByName(PWNDCLASS_OBJECT* Class,
PWNDCLASS_OBJECT *Class,
LPWSTR ClassName, LPWSTR ClassName,
PLIST_ENTRY ListHead) PLIST_ENTRY ListHead)
{ {
@ -57,19 +62,18 @@ CliFindClassByName(
{ {
*Class = Current; *Class = Current;
ExReleaseFastMutexUnsafe (&SystemClassListLock); ExReleaseFastMutexUnsafe (&SystemClassListLock);
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
CurrentEntry = CurrentEntry->Flink; CurrentEntry = CurrentEntry->Flink;
} }
ExReleaseFastMutexUnsafe (&SystemClassListLock); ExReleaseFastMutexUnsafe (&SystemClassListLock);
return STATUS_NOT_FOUND; return(STATUS_NOT_FOUND);
} }
NTSTATUS NTSTATUS
CliReferenceClassByNameWinSta( CliReferenceClassByNameWinSta(PWINSTATION_OBJECT WinStaObject,
PWINSTATION_OBJECT WinStaObject,
PWNDCLASS_OBJECT *Class, PWNDCLASS_OBJECT *Class,
LPWSTR ClassName) LPWSTR ClassName)
{ {
@ -84,12 +88,11 @@ CliReferenceClassByNameWinSta(
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
*/ */
return CliFindClassByName(Class, ClassName, &SystemClassListHead); return(CliFindClassByName(Class, ClassName, &SystemClassListHead));
} }
NTSTATUS NTSTATUS
ClassReferenceClassByName( ClassReferenceClassByName(PWNDCLASS_OBJECT *Class,
PWNDCLASS_OBJECT *Class,
LPWSTR ClassName) LPWSTR ClassName)
{ {
PWINSTATION_OBJECT WinStaObject; PWINSTATION_OBJECT WinStaObject;
@ -97,11 +100,10 @@ ClassReferenceClassByName(
if (!ClassName) if (!ClassName)
{ {
return STATUS_INVALID_PARAMETER; return(STATUS_INVALID_PARAMETER);
} }
Status = ValidateWindowStationHandle( Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(),
PROCESS_WINDOW_STATION(),
KernelMode, KernelMode,
0, 0,
&WinStaObject); &WinStaObject);
@ -109,11 +111,10 @@ ClassReferenceClassByName(
{ {
DPRINT("Validation of window station handle (0x%X) failed\n", DPRINT("Validation of window station handle (0x%X) failed\n",
PROCESS_WINDOW_STATION()); PROCESS_WINDOW_STATION());
return STATUS_UNSUCCESSFUL; return(STATUS_UNSUCCESSFUL);
} }
Status = CliReferenceClassByNameWinSta( Status = CliReferenceClassByNameWinSta(WinStaObject,
WinStaObject,
Class, Class,
ClassName); ClassName);
@ -123,8 +124,7 @@ ClassReferenceClassByName(
} }
NTSTATUS NTSTATUS
ClassReferenceClassByAtom( ClassReferenceClassByAtom(PWNDCLASS_OBJECT *Class,
PWNDCLASS_OBJECT *Class,
RTL_ATOM ClassAtom) RTL_ATOM ClassAtom)
{ {
PWINSTATION_OBJECT WinStaObject; PWINSTATION_OBJECT WinStaObject;
@ -134,11 +134,10 @@ ClassReferenceClassByAtom(
if (!ClassAtom) if (!ClassAtom)
{ {
return STATUS_INVALID_PARAMETER; return(STATUS_INVALID_PARAMETER);
} }
Status = ValidateWindowStationHandle( Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(),
PROCESS_WINDOW_STATION(),
KernelMode, KernelMode,
0, 0,
&WinStaObject); &WinStaObject);
@ -146,38 +145,36 @@ ClassReferenceClassByAtom(
{ {
DPRINT("Validation of window station handle (0x%X) failed\n", DPRINT("Validation of window station handle (0x%X) failed\n",
PROCESS_WINDOW_STATION()); PROCESS_WINDOW_STATION());
return STATUS_UNSUCCESSFUL; return(STATUS_UNSUCCESSFUL);
} }
ClassNameLength = sizeof(ClassName); ClassNameLength = sizeof(ClassName);
Status = RtlQueryAtomInAtomTable( Status = RtlQueryAtomInAtomTable(WinStaObject->AtomTable,
WinStaObject->AtomTable,
ClassAtom, ClassAtom,
NULL, NULL,
NULL, NULL,
&ClassName[0], &ClassName[0],
&ClassNameLength); &ClassNameLength);
Status = CliReferenceClassByNameWinSta( Status = CliReferenceClassByNameWinSta(WinStaObject,
WinStaObject,
Class, Class,
&ClassName[0]); &ClassName[0]);
ObDereferenceObject(WinStaObject); ObDereferenceObject(WinStaObject);
return Status; return(Status);
} }
NTSTATUS NTSTATUS
ClassReferenceClassByNameOrAtom( ClassReferenceClassByNameOrAtom(PWNDCLASS_OBJECT *Class,
PWNDCLASS_OBJECT *Class,
LPWSTR ClassNameOrAtom) LPWSTR ClassNameOrAtom)
{ {
NTSTATUS Status; NTSTATUS Status;
if (IS_ATOM(ClassNameOrAtom)) if (IS_ATOM(ClassNameOrAtom))
{ {
Status = ClassReferenceClassByAtom(Class, (RTL_ATOM)((ULONG_PTR)ClassNameOrAtom)); Status = ClassReferenceClassByAtom(Class,
(RTL_ATOM)((ULONG_PTR)ClassNameOrAtom));
} }
else else
{ {
@ -189,45 +186,38 @@ ClassReferenceClassByNameOrAtom(
SetLastNtError(Status); SetLastNtError(Status);
} }
return Status; return(Status);
} }
DWORD STDCALL
DWORD NtUserGetClassInfo(DWORD Unknown0,
STDCALL
NtUserGetClassInfo(
DWORD Unknown0,
DWORD Unknown1, DWORD Unknown1,
DWORD Unknown2, DWORD Unknown2,
DWORD Unknown3, DWORD Unknown3,
DWORD Unknown4) DWORD Unknown4)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
DWORD DWORD STDCALL
STDCALL NtUserGetClassName(DWORD Unknown0,
NtUserGetClassName(
DWORD Unknown0,
DWORD Unknown1, DWORD Unknown1,
DWORD Unknown2) DWORD Unknown2)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
DWORD DWORD STDCALL
STDCALL NtUserGetWOWClass(DWORD Unknown0,
NtUserGetWOWClass(
DWORD Unknown0,
DWORD Unknown1) DWORD Unknown1)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
/* /*
@ -240,10 +230,8 @@ NtUserGetWOWClass(
* RETURNS: * RETURNS:
* Atom identifying the new class * Atom identifying the new class
*/ */
RTL_ATOM RTL_ATOM STDCALL
STDCALL NtUserRegisterClassExWOW(LPWNDCLASSEX lpwcx,
NtUserRegisterClassExWOW(
LPWNDCLASSEX lpwcx,
BOOL bUnicodeClass, BOOL bUnicodeClass,
DWORD Unknown2, DWORD Unknown2,
DWORD Unknown3, DWORD Unknown3,
@ -257,10 +245,10 @@ NtUserRegisterClassExWOW(
WORD objectSize; WORD objectSize;
LPTSTR namePtr; LPTSTR namePtr;
DPRINT("About to open window station handle (0x%X)\n", PROCESS_WINDOW_STATION()); DPRINT("About to open window station handle (0x%X)\n",
PROCESS_WINDOW_STATION());
Status = ValidateWindowStationHandle( Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(),
PROCESS_WINDOW_STATION(),
KernelMode, KernelMode,
0, 0,
&WinStaObject); &WinStaObject);
@ -268,11 +256,10 @@ NtUserRegisterClassExWOW(
{ {
DPRINT("Validation of window station handle (0x%X) failed\n", DPRINT("Validation of window station handle (0x%X) failed\n",
PROCESS_WINDOW_STATION()); PROCESS_WINDOW_STATION());
return (RTL_ATOM)0; return((RTL_ATOM)0);
} }
Status = RtlAddAtomToAtomTable( Status = RtlAddAtomToAtomTable(WinStaObject->AtomTable,
WinStaObject->AtomTable,
(LPWSTR)lpwcx->lpszClassName, (LPWSTR)lpwcx->lpszClassName,
&Atom); &Atom);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -282,7 +269,7 @@ NtUserRegisterClassExWOW(
lpwcx->lpszClassName); lpwcx->lpszClassName);
SetLastNtError(Status); SetLastNtError(Status);
return (RTL_ATOM) 0; return((RTL_ATOM)0);
} }
objectSize = sizeof(WNDCLASS_OBJECT) + objectSize = sizeof(WNDCLASS_OBJECT) +
@ -296,7 +283,7 @@ NtUserRegisterClassExWOW(
DPRINT("Failed creating window class object\n"); DPRINT("Failed creating window class object\n");
SetLastNtError(STATUS_INSUFFICIENT_RESOURCES); SetLastNtError(STATUS_INSUFFICIENT_RESOURCES);
return (RTL_ATOM) 0; return((RTL_ATOM)0);
} }
ClassObject->Class = *lpwcx; ClassObject->Class = *lpwcx;
@ -323,44 +310,38 @@ NtUserRegisterClassExWOW(
ObDereferenceObject(WinStaObject); ObDereferenceObject(WinStaObject);
return Atom; return(Atom);
} }
DWORD DWORD STDCALL
STDCALL NtUserSetClassLong(DWORD Unknown0,
NtUserSetClassLong(
DWORD Unknown0,
DWORD Unknown1, DWORD Unknown1,
DWORD Unknown2, DWORD Unknown2,
DWORD Unknown3) DWORD Unknown3)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
DWORD DWORD STDCALL
STDCALL NtUserSetClassWord(DWORD Unknown0,
NtUserSetClassWord(
DWORD Unknown0,
DWORD Unknown1, DWORD Unknown1,
DWORD Unknown2) DWORD Unknown2)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
DWORD DWORD STDCALL
STDCALL NtUserUnregisterClass(DWORD Unknown0,
NtUserUnregisterClass(
DWORD Unknown0,
DWORD Unknown1, DWORD Unknown1,
DWORD Unknown2) DWORD Unknown2)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return(0);
} }
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: guicheck.c,v 1.2 2001/07/04 20:40:24 chorns Exp $ /* $Id: guicheck.c,v 1.3 2002/01/13 22:52:08 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -12,7 +12,11 @@
* REVISION HISTORY: * REVISION HISTORY:
* 06-06-2001 CSH Created * 06-06-2001 CSH Created
*/ */
/* INCLUDES ******************************************************************/
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include <napi/teb.h>
#include <win32k/win32k.h> #include <win32k/win32k.h>
#include <include/guicheck.h> #include <include/guicheck.h>
#include <include/msgqueue.h> #include <include/msgqueue.h>
@ -20,14 +24,15 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
/* FUNCTIONS *****************************************************************/
VOID VOID
GuiCheck(VOID) W32kGuiCheck(VOID)
{ {
/* if (NtCurrentTeb()->MessageQueue) if (PsGetWin32Thread()->MessageQueue != NULL)
return; return;
NtCurrentTeb()->MessageQueue = MsqCreateMessageQueue();*/ PsGetWin32Thread()->MessageQueue = MsqCreateMessageQueue();
} }
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: message.c,v 1.2 2001/12/20 03:56:10 dwelch Exp $ /* $Id: message.c,v 1.3 2002/01/13 22:52:08 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -8,8 +8,13 @@
* REVISION HISTORY: * REVISION HISTORY:
* 06-06-2001 CSH Created * 06-06-2001 CSH Created
*/ */
/* INCLUDES ******************************************************************/
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include <win32k/win32k.h> #include <win32k/win32k.h>
#include <include/guicheck.h>
#include <include/msgqueue.h>
#include <include/window.h> #include <include/window.h>
#include <include/class.h> #include <include/class.h>
#include <include/error.h> #include <include/error.h>
@ -19,26 +24,25 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
/* FUNCTIONS *****************************************************************/
NTSTATUS NTSTATUS
InitMessageImpl(VOID) W32kInitMessageImpl(VOID)
{ {
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
NTSTATUS NTSTATUS
CleanupMessageImpl(VOID) W32kCleanupMessageImpl(VOID)
{ {
return STATUS_SUCCESS; return(STATUS_SUCCESS);
} }
LRESULT LRESULT STDCALL
STDCALL NtUserDispatchMessage(LPMSG lpmsg)
NtUserDispatchMessage(
LPMSG lpmsg)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
@ -48,8 +52,81 @@ NtUserGetMessage(LPMSG lpMsg,
HWND hWnd, HWND hWnd,
UINT wMsgFilterMin, UINT wMsgFilterMin,
UINT wMsgFilterMax) UINT wMsgFilterMax)
/*
* FUNCTION: Get a message from the calling thread's message queue.
* ARGUMENTS:
* lpMsg - Pointer to the structure which receives the returned message.
* hWnd - Window whose messages are to be retrieved.
* wMsgFilterMin - Integer value of the lowest message value to be
* retrieved.
* wMsgFilterMax - Integer value of the highest message value to be
* retrieved.
*/
{ {
return FALSE; PUSER_MESSAGE_QUEUE ThreadQueue;
BOOLEAN Present;
PUSER_MESSAGE Message;
NTSTATUS Status;
W32kGuiCheck();
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
do
{
/* FIXME: Dispatch sent messages here. */
/* Now look for a quit message. */
/* FIXME: WINE checks the message number filter here. */
if (ThreadQueue->QuitPosted)
{
lpMsg->hwnd = hWnd;
lpMsg->message = WM_QUIT;
lpMsg->wParam = ThreadQueue->QuitExitCode;
lpMsg->lParam = 0;
ThreadQueue->QuitPosted = FALSE;
return(FALSE);
}
/* Now check for normal messages. */
Present = MsqFindMessage(ThreadQueue,
FALSE,
TRUE,
hWnd,
wMsgFilterMin,
wMsgFilterMax,
&Message);
if (Present)
{
RtlCopyMemory(lpMsg, &Message->Msg, sizeof(MSG));
ExFreePool(Message);
return(TRUE);
}
/* Check for hardware events. */
Present = MsqFindMessage(ThreadQueue,
TRUE,
TRUE,
hWnd,
wMsgFilterMin,
wMsgFilterMax,
&Message);
if (Present)
{
RtlCopyMemory(lpMsg, &Message->Msg, sizeof(MSG));
ExFreePool(Message);
return(TRUE);
}
/* FIXME: Check for sent messages again. */
/* FIXME: Check for paint messages. */
/* Nothing found so far. Wait for new messages. */
Status = MsqWaitForNewMessages(ThreadQueue);
}
while (Status == STATUS_WAIT_0);
return((BOOLEAN)(-1));
} }
DWORD DWORD
@ -68,100 +145,85 @@ NtUserMessageCall(
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserPeekMessage(LPMSG lpMsg,
NtUserPeekMessage(
LPMSG lpMsg,
HWND hWnd, HWND hWnd,
UINT wMsgFilterMin, UINT wMsgFilterMin,
UINT wMsgFilterMax, UINT wMsgFilterMax,
UINT wRemoveMsg) UINT wRemoveMsg)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserPostMessage(HWND hWnd,
NtUserPostMessage(
HWND hWnd,
UINT Msg, UINT Msg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserPostThreadMessage(DWORD idThread,
NtUserPostThreadMessage(
DWORD idThread,
UINT Msg, UINT Msg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
DWORD DWORD STDCALL
STDCALL NtUserQuerySendMessage(DWORD Unknown0)
NtUserQuerySendMessage(
DWORD Unknown0)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserSendMessageCallback(HWND hWnd,
NtUserSendMessageCallback(
HWND hWnd,
UINT Msg, UINT Msg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam, LPARAM lParam,
SENDASYNCPROC lpCallBack, SENDASYNCPROC lpCallBack,
ULONG_PTR dwData) ULONG_PTR dwData)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserSendNotifyMessage(HWND hWnd,
NtUserSendNotifyMessage(
HWND hWnd,
UINT Msg, UINT Msg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL NtUserTranslateMessage(LPMSG lpMsg,
NtUserTranslateMessage(
LPMSG lpMsg,
DWORD Unknown1) DWORD Unknown1)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }
BOOL BOOL STDCALL
STDCALL
NtUserWaitMessage(VOID) NtUserWaitMessage(VOID)
{ {
UNIMPLEMENTED UNIMPLEMENTED;
return 0; return 0;
} }

View file

@ -1,4 +1,4 @@
/* $Id: msgqueue.c,v 1.1 2001/06/12 17:50:29 chorns Exp $ /* $Id: msgqueue.c,v 1.2 2002/01/13 22:52:08 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -8,6 +8,9 @@
* REVISION HISTORY: * REVISION HISTORY:
* 06-06-2001 CSH Created * 06-06-2001 CSH Created
*/ */
/* INCLUDES ******************************************************************/
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
#include <win32k/win32k.h> #include <win32k/win32k.h>
#include <include/msgqueue.h> #include <include/msgqueue.h>
@ -15,23 +18,48 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
/* GLOBALS *******************************************************************/
static PUSER_MESSAGE_QUEUE CurrentFocusMessageQueue;
/* FUNCTIONS *****************************************************************/
NTSTATUS
MsqInitializeImpl(VOID)
{
CurrentFocusMessageQueue = NULL;
return(STATUS_SUCCESS);
}
VOID VOID
MsqInitializeMessage( MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
PUSER_MESSAGE Message, {
MSG Msg;
PUSER_MESSAGE Message;
Msg.hwnd = CurrentFocusMessageQueue->FocusWindow;
Msg.message = uMsg;
Msg.wParam = wParam;
Msg.lParam = lParam;
/* FIXME: Initialize time and point. */
Message = MsqCreateMessage(&Msg);
MsqPostMessage(CurrentFocusMessageQueue, Message, TRUE);
}
VOID
MsqInitializeMessage(PUSER_MESSAGE Message,
LPMSG Msg) LPMSG Msg)
{ {
RtlMoveMemory(&Message->Msg, Msg, sizeof(MSG)); RtlMoveMemory(&Message->Msg, Msg, sizeof(MSG));
} }
PUSER_MESSAGE PUSER_MESSAGE
MsqCreateMessage( MsqCreateMessage(LPMSG Msg)
LPMSG Msg)
{ {
PUSER_MESSAGE Message; PUSER_MESSAGE Message;
Message = (PUSER_MESSAGE)ExAllocatePool( Message = (PUSER_MESSAGE)ExAllocatePool(PagedPool, sizeof(USER_MESSAGE));
PagedPool, sizeof(USER_MESSAGE));
if (!Message) if (!Message)
{ {
return NULL; return NULL;
@ -43,60 +71,124 @@ MsqCreateMessage(
} }
VOID VOID
MsqDestroyMessage( MsqDestroyMessage(PUSER_MESSAGE Message)
PUSER_MESSAGE Message)
{ {
ExFreePool(Message); ExFreePool(Message);
} }
VOID VOID
MsqPostMessage( MsqPostMessage(PUSER_MESSAGE_QUEUE MessageQueue,
PUSER_MESSAGE_QUEUE MessageQueue, PUSER_MESSAGE Message,
PUSER_MESSAGE Message) BOOLEAN Hardware)
{ {
// FIXME: Grab lock ExAcquireFastMutex(&MessageQueue->Lock);
InsertTailList(&MessageQueue->ListHead, &Message->ListEntry); if (Hardware)
}
BOOL
MsqRetrieveMessage(
PUSER_MESSAGE_QUEUE MessageQueue,
PUSER_MESSAGE *Message)
{ {
PLIST_ENTRY CurrentEntry; InsertTailList(&MessageQueue->HardwareMessagesListHead,
&Message->ListEntry);
// FIXME: Grab lock
if (!IsListEmpty(&MessageQueue->ListHead))
{
CurrentEntry = RemoveHeadList(&MessageQueue->ListHead);
*Message = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE, ListEntry);
return TRUE;
} }
else else
{ {
return FALSE; InsertTailList(&MessageQueue->PostedMessagesListHead,
&Message->ListEntry);
} }
KeSetEvent(&MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
ExReleaseFastMutex(&MessageQueue->Lock);
} }
BOOLEAN
VOID MsqFindMessage(IN PUSER_MESSAGE_QUEUE MessageQueue,
MsqInitializeMessageQueue( IN BOOLEAN Hardware,
PUSER_MESSAGE_QUEUE MessageQueue) IN BOOLEAN Remove,
IN HWND Wnd,
IN UINT MsgFilterLow,
IN UINT MsgFilterHigh,
OUT PUSER_MESSAGE* Message)
{ {
InitializeListHead(&MessageQueue->ListHead); PLIST_ENTRY CurrentEntry;
ExInitializeFastMutex(MessageQueue->ListLock); PUSER_MESSAGE CurrentMessage;
PLIST_ENTRY ListHead;
ExAcquireFastMutex(&MessageQueue->Lock);
if (Hardware)
{
CurrentEntry = MessageQueue->HardwareMessagesListHead.Flink;
ListHead = &MessageQueue->HardwareMessagesListHead;
}
else
{
CurrentEntry = MessageQueue->PostedMessagesListHead.Flink;
ListHead = &MessageQueue->PostedMessagesListHead;
}
while (CurrentEntry != ListHead)
{
CurrentMessage = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE,
ListEntry);
if ((Wnd == 0 || Wnd == CurrentMessage->Msg.hwnd) &&
((MsgFilterLow == 0 && MsgFilterHigh == 0) ||
(MsgFilterLow <= CurrentMessage->Msg.message &&
MsgFilterHigh >= CurrentMessage->Msg.message)))
{
if (Remove)
{
RemoveEntryList(&CurrentMessage->ListEntry);
}
ExReleaseFastMutex(&MessageQueue->Lock);
*Message = CurrentMessage;
return(TRUE);
}
CurrentEntry = CurrentEntry->Flink;
}
ExReleaseFastMutex(&MessageQueue->Lock);
return(FALSE);
}
NTSTATUS
MsqWaitForNewMessages(PUSER_MESSAGE_QUEUE MessageQueue)
{
return(KeWaitForSingleObject(&MessageQueue->NewMessages,
0,
UserMode,
TRUE,
NULL));
} }
VOID VOID
MsqFreeMessageQueue( MsqInitializeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
PUSER_MESSAGE_QUEUE MessageQueue)
{ {
PUSER_MESSAGE Message; InitializeListHead(&MessageQueue->PostedMessagesListHead);
InitializeListHead(&MessageQueue->HardwareMessagesListHead);
InitializeListHead(&MessageQueue->SentMessagesListHead);
ExInitializeFastMutex(&MessageQueue->Lock);
MessageQueue->QuitPosted = FALSE;
MessageQueue->QuitExitCode = 0;
KeInitializeEvent(&MessageQueue->NewMessages, NotificationEvent, FALSE);
MessageQueue->QueueStatus = 0;
MessageQueue->FocusWindow = NULL;
}
// FIXME: Grab lock VOID
while (MsqRetrieveMessage(MessageQueue, &Message)) MsqFreeMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
{ {
ExFreePool(Message); PLIST_ENTRY CurrentEntry;
PUSER_MESSAGE CurrentMessage;
CurrentEntry = MessageQueue->PostedMessagesListHead.Flink;
while (CurrentEntry != &MessageQueue->PostedMessagesListHead)
{
CurrentMessage = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE,
ListEntry);
CurrentEntry = CurrentEntry->Flink;
ExFreePool(CurrentMessage);
}
CurrentEntry = MessageQueue->HardwareMessagesListHead.Flink;
while (CurrentEntry != &MessageQueue->HardwareMessagesListHead)
{
CurrentMessage = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE,
ListEntry);
CurrentEntry = CurrentEntry->Flink;
ExFreePool(CurrentMessage);
} }
} }
@ -105,8 +197,8 @@ MsqCreateMessageQueue(VOID)
{ {
PUSER_MESSAGE_QUEUE MessageQueue; PUSER_MESSAGE_QUEUE MessageQueue;
MessageQueue = (PUSER_MESSAGE_QUEUE)ExAllocatePool( MessageQueue = (PUSER_MESSAGE_QUEUE)ExAllocatePool(PagedPool,
PagedPool, sizeof(USER_MESSAGE_QUEUE)); sizeof(USER_MESSAGE_QUEUE));
if (!MessageQueue) if (!MessageQueue)
{ {
return NULL; return NULL;
@ -118,8 +210,7 @@ MsqCreateMessageQueue(VOID)
} }
VOID VOID
MsqDestroyMessageQueue( MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
PUSER_MESSAGE_QUEUE MessageQueue)
{ {
MsqFreeMessageQueue(MessageQueue); MsqFreeMessageQueue(MessageQueue);
ExFreePool(MessageQueue); ExFreePool(MessageQueue);

View file

@ -1,4 +1,4 @@
/* $Id: window.c,v 1.3 2001/08/28 18:16:32 jfilby Exp $ /* $Id: window.c,v 1.4 2002/01/13 22:52:08 dwelch Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -93,7 +93,7 @@ NtUserCreateWindowEx(
NTSTATUS Status; NTSTATUS Status;
HANDLE Handle; HANDLE Handle;
GuiCheck(); W32kGuiCheck();
Status = ClassReferenceClassByNameOrAtom(&ClassObject, lpClassName->Buffer); Status = ClassReferenceClassByNameOrAtom(&ClassObject, lpClassName->Buffer);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -222,7 +222,7 @@ NtUserFindWindowEx(
PLIST_ENTRY currentEntry; PLIST_ENTRY currentEntry;
PWNDCLASS_OBJECT classObject; PWNDCLASS_OBJECT classObject;
GuiCheck(); W32kGuiCheck();
status = ClassReferenceClassByNameOrAtom(&classObject, ucClassName->Buffer); status = ClassReferenceClassByNameOrAtom(&classObject, ucClassName->Buffer);
if (!NT_SUCCESS(status)) if (!NT_SUCCESS(status))
@ -567,7 +567,7 @@ NtUserShowWindow(
{ {
PWINDOW_OBJECT WindowObject; PWINDOW_OBJECT WindowObject;
GuiCheck(); W32kGuiCheck();
WindowObject = USEROBJ_HandleToPtr (hWnd, UO_WINDOW_MAGIC); WindowObject = USEROBJ_HandleToPtr (hWnd, UO_WINDOW_MAGIC);