mirror of
https://github.com/reactos/reactos.git
synced 2025-06-09 03:10:18 +00:00
- [Win32k] More work on classes. ReactOS seems to return the opposite WinProc and sometimes it is a CallProcData handle. This is confusing the class wine tests. The last thing it should do is return CallProcData handle after attempting to find the right proc. Fixed message class bits. Moved CallProc to CallProcData and updated related code. Started alternate function to replace NtUserGetClassLong and NtUserGetWindowLong.
- Tested wine, Firefox 1.15.xx and AbiWord 2.6.8. svn path=/trunk/; revision=42185
This commit is contained in:
parent
f9fe2ff6a8
commit
3ac2563fbb
13 changed files with 192 additions and 143 deletions
|
@ -108,7 +108,7 @@ GetThreadDesktopInfo(VOID)
|
||||||
return di;
|
return di;
|
||||||
}
|
}
|
||||||
|
|
||||||
PCALLPROC FASTCALL ValidateCallProc(HANDLE hCallProc);
|
PCALLPROCDATA FASTCALL ValidateCallProc(HANDLE hCallProc);
|
||||||
PWND FASTCALL ValidateHwnd(HWND hwnd);
|
PWND FASTCALL ValidateHwnd(HWND hwnd);
|
||||||
PWND FASTCALL ValidateHwndOrDesk(HWND hwnd);
|
PWND FASTCALL ValidateHwndOrDesk(HWND hwnd);
|
||||||
PWND FASTCALL GetThreadDesktopWnd(VOID);
|
PWND FASTCALL GetThreadDesktopWnd(VOID);
|
||||||
|
|
|
@ -270,7 +270,7 @@ BOOL
|
||||||
FASTCALL
|
FASTCALL
|
||||||
TestWindowProcess(PWND Wnd)
|
TestWindowProcess(PWND Wnd)
|
||||||
{
|
{
|
||||||
if (Wnd->ti == (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo)
|
if (Wnd->pti == (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return (NtUserQueryWindow(Wnd->hdr.Handle, QUERY_WINDOW_UNIQUE_PROCESS_ID) ==
|
return (NtUserQueryWindow(Wnd->hdr.Handle, QUERY_WINDOW_UNIQUE_PROCESS_ID) ==
|
||||||
|
@ -426,12 +426,17 @@ ValidateHandleNoErr(HANDLE handle, UINT uType)
|
||||||
//
|
//
|
||||||
// Validate a callproc handle and return the pointer to the object.
|
// Validate a callproc handle and return the pointer to the object.
|
||||||
//
|
//
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
FASTCALL
|
FASTCALL
|
||||||
ValidateCallProc(HANDLE hCallProc)
|
ValidateCallProc(HANDLE hCallProc)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc = ValidateHandle(hCallProc, VALIDATE_TYPE_CALLPROC);
|
PUSER_HANDLE_ENTRY pEntry;
|
||||||
if (CallProc != NULL && CallProc->pi == g_ppi)
|
|
||||||
|
PCALLPROCDATA CallProc = ValidateHandle(hCallProc, VALIDATE_TYPE_CALLPROC);
|
||||||
|
|
||||||
|
pEntry = GetUser32Handle(hCallProc);
|
||||||
|
|
||||||
|
if (CallProc != NULL && pEntry->ppi == g_ppi)
|
||||||
return CallProc;
|
return CallProc;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1238,7 +1238,7 @@ CallWindowProcA(WNDPROC lpPrevWndFunc,
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
|
|
||||||
if (lpPrevWndFunc == NULL)
|
if (lpPrevWndFunc == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1253,7 +1253,7 @@ CallWindowProcA(WNDPROC lpPrevWndFunc,
|
||||||
CallProc = ValidateCallProc((HANDLE)lpPrevWndFunc);
|
CallProc = ValidateCallProc((HANDLE)lpPrevWndFunc);
|
||||||
if (CallProc != NULL)
|
if (CallProc != NULL)
|
||||||
{
|
{
|
||||||
return IntCallWindowProcA(!CallProc->Unicode, CallProc->WndProc,
|
return IntCallWindowProcA(!CallProc->Unicode, CallProc->pfnClientPrevious,
|
||||||
hWnd, Msg, wParam, lParam);
|
hWnd, Msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1275,7 +1275,7 @@ CallWindowProcW(WNDPROC lpPrevWndFunc,
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
|
|
||||||
/* FIXME - can the first parameter be NULL? */
|
/* FIXME - can the first parameter be NULL? */
|
||||||
if (lpPrevWndFunc == NULL)
|
if (lpPrevWndFunc == NULL)
|
||||||
|
@ -1291,7 +1291,7 @@ CallWindowProcW(WNDPROC lpPrevWndFunc,
|
||||||
CallProc = ValidateCallProc((HANDLE)lpPrevWndFunc);
|
CallProc = ValidateCallProc((HANDLE)lpPrevWndFunc);
|
||||||
if (CallProc != NULL)
|
if (CallProc != NULL)
|
||||||
{
|
{
|
||||||
return IntCallWindowProcW(!CallProc->Unicode, CallProc->WndProc,
|
return IntCallWindowProcW(!CallProc->Unicode, CallProc->pfnClientPrevious,
|
||||||
hWnd, Msg, wParam, lParam);
|
hWnd, Msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1340,7 +1340,7 @@ DispatchMessageA(CONST MSG *lpmsg)
|
||||||
if (lpmsg->hwnd != NULL)
|
if (lpmsg->hwnd != NULL)
|
||||||
{
|
{
|
||||||
Wnd = ValidateHwnd(lpmsg->hwnd);
|
Wnd = ValidateHwnd(lpmsg->hwnd);
|
||||||
if (!Wnd || SharedPtrToUser(Wnd->ti) != GetW32ThreadInfo())
|
if (!Wnd || SharedPtrToUser(Wnd->pti) != GetW32ThreadInfo())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1401,7 +1401,7 @@ DispatchMessageW(CONST MSG *lpmsg)
|
||||||
if (lpmsg->hwnd != NULL)
|
if (lpmsg->hwnd != NULL)
|
||||||
{
|
{
|
||||||
Wnd = ValidateHwnd(lpmsg->hwnd);
|
Wnd = ValidateHwnd(lpmsg->hwnd);
|
||||||
if (!Wnd || SharedPtrToUser(Wnd->ti) != GetW32ThreadInfo())
|
if (!Wnd || SharedPtrToUser(Wnd->pti) != GetW32ThreadInfo())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1801,7 +1801,7 @@ SendMessageW(HWND Wnd,
|
||||||
PW32THREADINFO ti = GetW32ThreadInfo();
|
PW32THREADINFO ti = GetW32ThreadInfo();
|
||||||
|
|
||||||
Window = ValidateHwnd(Wnd);
|
Window = ValidateHwnd(Wnd);
|
||||||
if (Window != NULL && SharedPtrToUser(Window->ti) == ti && !IsThreadHooked(GetWin32ClientInfo()))
|
if (Window != NULL && SharedPtrToUser(Window->pti) == ti && !IsThreadHooked(GetWin32ClientInfo()))
|
||||||
{
|
{
|
||||||
/* NOTE: We can directly send messages to the window procedure
|
/* NOTE: We can directly send messages to the window procedure
|
||||||
if *all* the following conditions are met:
|
if *all* the following conditions are met:
|
||||||
|
@ -1865,7 +1865,7 @@ SendMessageA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
PW32THREADINFO ti = GetW32ThreadInfo();
|
PW32THREADINFO ti = GetW32ThreadInfo();
|
||||||
|
|
||||||
Window = ValidateHwnd(Wnd);
|
Window = ValidateHwnd(Wnd);
|
||||||
if (Window != NULL && SharedPtrToUser(Window->ti) == ti && !IsThreadHooked(GetWin32ClientInfo()))
|
if (Window != NULL && SharedPtrToUser(Window->pti) == ti && !IsThreadHooked(GetWin32ClientInfo()))
|
||||||
{
|
{
|
||||||
/* NOTE: We can directly send messages to the window procedure
|
/* NOTE: We can directly send messages to the window procedure
|
||||||
if *all* the following conditions are met:
|
if *all* the following conditions are met:
|
||||||
|
|
|
@ -1268,7 +1268,7 @@ GetWindowThreadProcessId(HWND hWnd,
|
||||||
|
|
||||||
if (!pWnd) return Ret;
|
if (!pWnd) return Ret;
|
||||||
|
|
||||||
ti = SharedPtrToUser(pWnd->ti);
|
ti = SharedPtrToUser(pWnd->pti);
|
||||||
|
|
||||||
if (ti)
|
if (ti)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
typedef struct _PROCESSINFO *PPROCESSINFO;
|
typedef struct _PROCESSINFO *PPROCESSINFO;
|
||||||
struct _W32THREADINFO;
|
struct _W32THREADINFO;
|
||||||
|
struct _DESKTOP;
|
||||||
struct _WND;
|
struct _WND;
|
||||||
|
|
||||||
typedef struct _LARGE_UNICODE_STRING
|
typedef struct _LARGE_UNICODE_STRING
|
||||||
|
@ -89,14 +90,29 @@ typedef struct _DESKTOPINFO
|
||||||
WCHAR szDesktopName[1];
|
WCHAR szDesktopName[1];
|
||||||
} DESKTOPINFO, *PDESKTOPINFO;
|
} DESKTOPINFO, *PDESKTOPINFO;
|
||||||
|
|
||||||
typedef struct _CALLPROC
|
typedef enum _GETCPD
|
||||||
{
|
{
|
||||||
|
UserGetCPDU2A = 0x01,
|
||||||
|
UserGetCPDA2U = 0X02,
|
||||||
|
UserGetCPDClass = 0X10,
|
||||||
|
UserGetCPDWindow = 0X20,
|
||||||
|
UserGetCPDDialog = 0X40,
|
||||||
|
UserGetCPDWndtoCls = 0X80
|
||||||
|
} GETCPD, *PGETCPD;
|
||||||
|
|
||||||
|
typedef struct _CALLPROCDATA
|
||||||
|
{
|
||||||
|
// PROCDESKHEAD head; // Use this once new handle manager is implemented!!!
|
||||||
USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */
|
USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */
|
||||||
struct _PROCESSINFO *pi;
|
//
|
||||||
WNDPROC WndProc;
|
struct _CALLPROCDATA *spcpdNext;
|
||||||
struct _CALLPROC *Next;
|
WNDPROC pfnClientPrevious;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
GETCPD wType;
|
||||||
UINT Unicode : 1;
|
UINT Unicode : 1;
|
||||||
} CALLPROC, *PCALLPROC;
|
};
|
||||||
|
} CALLPROCDATA, *PCALLPROCDATA;
|
||||||
|
|
||||||
#define CSF_SERVERSIDEPROC 0x0001
|
#define CSF_SERVERSIDEPROC 0x0001
|
||||||
#define CSF_ANSIPROC 0x0002
|
#define CSF_ANSIPROC 0x0002
|
||||||
|
@ -118,7 +134,7 @@ typedef struct _CLS
|
||||||
DWORD CSF_flags;
|
DWORD CSF_flags;
|
||||||
PSTR lpszClientAnsiMenuName; // For client use
|
PSTR lpszClientAnsiMenuName; // For client use
|
||||||
PWSTR lpszClientUnicodeMenuName; // " " "
|
PWSTR lpszClientUnicodeMenuName; // " " "
|
||||||
PCALLPROC spcpdFirst;
|
PCALLPROCDATA spcpdFirst;
|
||||||
struct _CLS *pclsBase;
|
struct _CLS *pclsBase;
|
||||||
struct _CLS *pclsClone;
|
struct _CLS *pclsClone;
|
||||||
ULONG cWndReferenceCount;
|
ULONG cWndReferenceCount;
|
||||||
|
@ -127,7 +143,7 @@ typedef struct _CLS
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
WNDPROC WndProcExtra;
|
WNDPROC WndProcExtra;
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
};
|
};
|
||||||
INT cbclsExtra;
|
INT cbclsExtra;
|
||||||
INT cbwndExtra;
|
INT cbwndExtra;
|
||||||
|
@ -241,14 +257,15 @@ typedef struct _CLS
|
||||||
|
|
||||||
typedef struct _WND
|
typedef struct _WND
|
||||||
{
|
{
|
||||||
|
//THRDESKHEAD head; // head.h == handle
|
||||||
USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */
|
USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */
|
||||||
/* NOTE: This structure is located in the desktop heap and will
|
/* NOTE: This structure is located in the desktop heap and will
|
||||||
eventually replace WINDOW_OBJECT. Right now WINDOW_OBJECT
|
eventually replace WINDOW_OBJECT. Right now WINDOW_OBJECT
|
||||||
keeps a reference to this structure until all the information
|
keeps a reference to this structure until all the information
|
||||||
is moved to this structure */
|
is moved to this structure */
|
||||||
struct _PROCESSINFO *pi; /* FIXME: Move to object header some day */
|
struct _PROCESSINFO *pi; // head.pti->ppi
|
||||||
struct _W32THREADINFO *ti;
|
struct _W32THREADINFO *pti; // head.pti
|
||||||
struct _DESKTOP *pdesktop;
|
struct _DESKTOP *rpdesk; // head.rpdesk
|
||||||
|
|
||||||
DWORD state;
|
DWORD state;
|
||||||
DWORD state2;
|
DWORD state2;
|
||||||
|
@ -270,7 +287,7 @@ typedef struct _WND
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
/* Pointer to a call procedure handle */
|
/* Pointer to a call procedure handle */
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
/* Extra Wnd proc (windows of system classes) */
|
/* Extra Wnd proc (windows of system classes) */
|
||||||
WNDPROC WndProcExtra;
|
WNDPROC WndProcExtra;
|
||||||
};
|
};
|
||||||
|
@ -545,7 +562,7 @@ typedef struct _CLIENTTHREADINFO
|
||||||
WORD fsWakeBits;
|
WORD fsWakeBits;
|
||||||
WORD fsWakeBitsJournal;
|
WORD fsWakeBitsJournal;
|
||||||
WORD fsWakeMask;
|
WORD fsWakeMask;
|
||||||
LONG timeLastRead;
|
ULONG tickLastMsgChecked;
|
||||||
DWORD dwcPumpHook;
|
DWORD dwcPumpHook;
|
||||||
} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
|
} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
|
||||||
|
|
||||||
|
@ -1379,7 +1396,8 @@ NtUserDdeSetQualityOfService(
|
||||||
OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
|
OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
|
||||||
|
|
||||||
HDWP NTAPI
|
HDWP NTAPI
|
||||||
NtUserDeferWindowPos(HDWP WinPosInfo,
|
NtUserDeferWindowPos(
|
||||||
|
HDWP WinPosInfo,
|
||||||
HWND Wnd,
|
HWND Wnd,
|
||||||
HWND WndInsertAfter,
|
HWND WndInsertAfter,
|
||||||
int x,
|
int x,
|
||||||
|
@ -1387,6 +1405,7 @@ NtUserDeferWindowPos(HDWP WinPosInfo,
|
||||||
int cx,
|
int cx,
|
||||||
int cy,
|
int cy,
|
||||||
UINT Flags);
|
UINT Flags);
|
||||||
|
|
||||||
BOOL NTAPI
|
BOOL NTAPI
|
||||||
NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText);
|
NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText);
|
||||||
|
|
||||||
|
@ -1680,12 +1699,12 @@ NtUserGetControlColor(
|
||||||
HDC hdc,
|
HDC hdc,
|
||||||
UINT CtlMsg);
|
UINT CtlMsg);
|
||||||
|
|
||||||
DWORD
|
ULONG_PTR
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetCPD(
|
NtUserGetCPD(
|
||||||
DWORD Unknown0,
|
HWND hWnd,
|
||||||
DWORD Unknown1,
|
GETCPD Flags,
|
||||||
DWORD Unknown2);
|
ULONG_PTR Proc);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3025,7 +3044,7 @@ NtUserCreateCursorIconHandle(
|
||||||
BOOL Indirect);
|
BOOL Indirect);
|
||||||
|
|
||||||
|
|
||||||
/* Should be done in usermode */
|
/* Should be done in usermode and use NtUserGetCPD. */
|
||||||
ULONG_PTR
|
ULONG_PTR
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetClassLong(HWND hWnd, INT Offset, BOOL Ansi);
|
NtUserGetClassLong(HWND hWnd, INT Offset, BOOL Ansi);
|
||||||
|
@ -3067,7 +3086,7 @@ HWND
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetWindow(HWND hWnd, UINT Relationship);
|
NtUserGetWindow(HWND hWnd, UINT Relationship);
|
||||||
|
|
||||||
/* Should be done in usermode */
|
/* Should be done in usermode and use NtUserGetCPD. */
|
||||||
LONG
|
LONG
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
|
NtUserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
|
||||||
|
|
|
@ -21,17 +21,17 @@ IsCallProcHandle(IN WNDPROC lpWndProc)
|
||||||
}
|
}
|
||||||
|
|
||||||
WNDPROC
|
WNDPROC
|
||||||
GetCallProcHandle(IN PCALLPROC CallProc);
|
GetCallProcHandle(IN PCALLPROCDATA CallProc);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DestroyCallProc(IN PDESKTOPINFO Desktop,
|
DestroyCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN OUT PCALLPROC CallProc);
|
IN OUT PCALLPROCDATA CallProc);
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
CloneCallProc(IN PDESKTOPINFO Desktop,
|
CloneCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN PCALLPROC CallProc);
|
IN PCALLPROCDATA CallProc);
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
CreateCallProc(IN PDESKTOPINFO Desktop,
|
CreateCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN WNDPROC WndProc,
|
IN WNDPROC WndProc,
|
||||||
IN BOOL Unicode,
|
IN BOOL Unicode,
|
||||||
|
@ -87,7 +87,7 @@ IntCreateClass(IN CONST WNDCLASSEXW* lpwcx,
|
||||||
IN PDESKTOP Desktop,
|
IN PDESKTOP Desktop,
|
||||||
IN PPROCESSINFO pi);
|
IN PPROCESSINFO pi);
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
UserFindCallProc(IN PCLS Class,
|
UserFindCallProc(IN PCLS Class,
|
||||||
IN WNDPROC WndProc,
|
IN WNDPROC WndProc,
|
||||||
IN BOOL bUnicode);
|
IN BOOL bUnicode);
|
||||||
|
@ -98,7 +98,7 @@ UserRegisterSystemClasses(IN ULONG Count,
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
UserAddCallProcToClass(IN OUT PCLS Class,
|
UserAddCallProcToClass(IN OUT PCLS Class,
|
||||||
IN PCALLPROC CallProc);
|
IN PCALLPROCDATA CallProc);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
IntGetAtomFromStringOrAtom(IN PUNICODE_STRING ClassName,
|
IntGetAtomFromStringOrAtom(IN PUNICODE_STRING ClassName,
|
||||||
|
|
|
@ -1,27 +1,8 @@
|
||||||
/*
|
/*
|
||||||
* ReactOS W32 Subsystem
|
|
||||||
* Copyright (C) 1998 - 2006 ReactOS Team
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
/* $Id: class.c 21596 2006-04-15 10:41:58Z greatlrd $
|
|
||||||
*
|
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* PURPOSE: Window classes
|
* PURPOSE: Window classes
|
||||||
* FILE: subsys/win32k/ntuser/class.c
|
* FILE: subsystems/win32/win32k/ntuser/class.c
|
||||||
* PROGRAMER: Thomas Weidenmueller <w3seek@reactos.com>
|
* PROGRAMER: Thomas Weidenmueller <w3seek@reactos.com>
|
||||||
* REVISION HISTORY:
|
* REVISION HISTORY:
|
||||||
* 06-06-2001 CSH Created
|
* 06-06-2001 CSH Created
|
||||||
|
@ -36,7 +17,7 @@
|
||||||
/* CALLPROC ******************************************************************/
|
/* CALLPROC ******************************************************************/
|
||||||
|
|
||||||
WNDPROC
|
WNDPROC
|
||||||
GetCallProcHandle(IN PCALLPROC CallProc)
|
GetCallProcHandle(IN PCALLPROCDATA CallProc)
|
||||||
{
|
{
|
||||||
/* FIXME - check for 64 bit architectures... */
|
/* FIXME - check for 64 bit architectures... */
|
||||||
return (WNDPROC)((ULONG_PTR)UserObjectToHandle(CallProc) | 0xFFFF0000);
|
return (WNDPROC)((ULONG_PTR)UserObjectToHandle(CallProc) | 0xFFFF0000);
|
||||||
|
@ -44,7 +25,7 @@ GetCallProcHandle(IN PCALLPROC CallProc)
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DestroyCallProc(IN PDESKTOPINFO Desktop,
|
DestroyCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN OUT PCALLPROC CallProc)
|
IN OUT PCALLPROCDATA CallProc)
|
||||||
{
|
{
|
||||||
/* FIXME - use new object manager! */
|
/* FIXME - use new object manager! */
|
||||||
HANDLE Handle = UserObjectToHandle(CallProc);
|
HANDLE Handle = UserObjectToHandle(CallProc);
|
||||||
|
@ -53,51 +34,49 @@ DestroyCallProc(IN PDESKTOPINFO Desktop,
|
||||||
otCallProc);
|
otCallProc);
|
||||||
}
|
}
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
CloneCallProc(IN PDESKTOPINFO Desktop,
|
CloneCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN PCALLPROC CallProc)
|
IN PCALLPROCDATA CallProc)
|
||||||
{
|
{
|
||||||
PCALLPROC NewCallProc;
|
PCALLPROCDATA NewCallProc;
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
|
|
||||||
/* FIXME - use new object manager! */
|
/* FIXME - use new object manager! */
|
||||||
NewCallProc = (PCALLPROC)UserCreateObject(gHandleTable,
|
NewCallProc = (PCALLPROCDATA)UserCreateObject(gHandleTable,
|
||||||
&Handle,
|
&Handle,
|
||||||
otCallProc,
|
otCallProc,
|
||||||
sizeof(CALLPROC));
|
sizeof(CALLPROCDATA));
|
||||||
if (NewCallProc != NULL)
|
if (NewCallProc != NULL)
|
||||||
{
|
{
|
||||||
NewCallProc->hdr.Handle = Handle; /* FIXME: Remove hack */
|
NewCallProc->hdr.Handle = Handle; /* FIXME: Remove hack */
|
||||||
NewCallProc->pi = CallProc->pi;
|
NewCallProc->pfnClientPrevious = CallProc->pfnClientPrevious;
|
||||||
NewCallProc->WndProc = CallProc->WndProc;
|
|
||||||
NewCallProc->Unicode = CallProc->Unicode;
|
NewCallProc->Unicode = CallProc->Unicode;
|
||||||
NewCallProc->Next = NULL;
|
NewCallProc->spcpdNext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewCallProc;
|
return NewCallProc;
|
||||||
}
|
}
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
CreateCallProc(IN PDESKTOPINFO Desktop,
|
CreateCallProc(IN PDESKTOPINFO Desktop,
|
||||||
IN WNDPROC WndProc,
|
IN WNDPROC WndProc,
|
||||||
IN BOOL Unicode,
|
IN BOOL Unicode,
|
||||||
IN PPROCESSINFO pi)
|
IN PPROCESSINFO pi)
|
||||||
{
|
{
|
||||||
PCALLPROC NewCallProc;
|
PCALLPROCDATA NewCallProc;
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
|
|
||||||
/* FIXME - use new object manager! */
|
/* FIXME - use new object manager! */
|
||||||
NewCallProc = (PCALLPROC)UserCreateObject(gHandleTable,
|
NewCallProc = (PCALLPROCDATA)UserCreateObject(gHandleTable,
|
||||||
&Handle,
|
&Handle,
|
||||||
otCallProc,
|
otCallProc,
|
||||||
sizeof(CALLPROC));
|
sizeof(CALLPROCDATA));
|
||||||
if (NewCallProc != NULL)
|
if (NewCallProc != NULL)
|
||||||
{
|
{
|
||||||
NewCallProc->hdr.Handle = Handle; /* FIXME: Remove hack */
|
NewCallProc->hdr.Handle = Handle; /* FIXME: Remove hack */
|
||||||
NewCallProc->pi = pi;
|
NewCallProc->pfnClientPrevious = WndProc;
|
||||||
NewCallProc->WndProc = WndProc;
|
|
||||||
NewCallProc->Unicode = Unicode;
|
NewCallProc->Unicode = Unicode;
|
||||||
NewCallProc->Next = NULL;
|
NewCallProc->spcpdNext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewCallProc;
|
return NewCallProc;
|
||||||
|
@ -107,7 +86,7 @@ BOOL
|
||||||
UserGetCallProcInfo(IN HANDLE hCallProc,
|
UserGetCallProcInfo(IN HANDLE hCallProc,
|
||||||
OUT PWNDPROC_INFO wpInfo)
|
OUT PWNDPROC_INFO wpInfo)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
|
|
||||||
/* NOTE: Accessing the WNDPROC_INFO structure may raise an exception! */
|
/* NOTE: Accessing the WNDPROC_INFO structure may raise an exception! */
|
||||||
|
|
||||||
|
@ -120,13 +99,70 @@ UserGetCallProcInfo(IN HANDLE hCallProc,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Use Handle pEntry->ppi!
|
||||||
if (CallProc->pi != GetW32ProcessInfo())
|
if (CallProc->pi != GetW32ProcessInfo())
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
wpInfo->WindowProc = CallProc->WndProc;
|
wpInfo->WindowProc = CallProc->pfnClientPrevious;
|
||||||
wpInfo->IsUnicode = CallProc->Unicode;
|
wpInfo->IsUnicode = CallProc->Unicode;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* SYSCALLS *****************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Retrieve the WinProcA/W or CallProcData handle for Class, Dialog or Window.
|
||||||
|
This Function called from user space uses Window handle for class, window
|
||||||
|
and dialog procs only.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
ProcIn is the default proc from pCls/pDlg/pWnd->lpfnXxyz, caller is
|
||||||
|
looking for another type of proc if the original lpfnXxyz proc is preset
|
||||||
|
to Ansi or Unicode.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
If pWnd is created from Ansi and lpfnXxyz is assumed to be Ansi, caller
|
||||||
|
will ask for Unicode Proc return Proc or CallProcData handle.
|
||||||
|
|
||||||
|
This function should replaced NtUserGetClassLong and NtUserGetWindowLong.
|
||||||
|
*/
|
||||||
|
ULONG_PTR
|
||||||
|
APIENTRY
|
||||||
|
NtUserGetCPD(
|
||||||
|
HWND hWnd,
|
||||||
|
GETCPD Flags,
|
||||||
|
ULONG_PTR ProcIn)
|
||||||
|
{
|
||||||
|
PWINDOW_OBJECT Window;
|
||||||
|
PWND Wnd;
|
||||||
|
PCLS Class;
|
||||||
|
ULONG_PTR Result = 0;
|
||||||
|
BOOL Ansi;
|
||||||
|
|
||||||
|
UserEnterExclusive();
|
||||||
|
if (!(Window = UserGetWindowObject(hWnd)) || !Window->Wnd)
|
||||||
|
{
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
Wnd = Window->Wnd;
|
||||||
|
Class = Wnd->pcls;
|
||||||
|
/* Ex: Retrieve the Unicode Proc since the default is Ansi. */
|
||||||
|
Ansi = (Flags & UserGetCPDA2U); // Ansi to Unicode request from user.
|
||||||
|
|
||||||
|
if ( Flags & (UserGetCPDWindow|UserGetCPDDialog))
|
||||||
|
{
|
||||||
|
Result = UserGetWindowLong( hWnd, GWL_WNDPROC, Ansi);
|
||||||
|
}
|
||||||
|
else if (Flags & (UserGetCPDClass|UserGetCPDWndtoCls))
|
||||||
|
{
|
||||||
|
Result = UserGetClassLongPtr( Class, GCLP_WNDPROC, Ansi);
|
||||||
|
}
|
||||||
|
|
||||||
|
Cleanup:
|
||||||
|
UserLeave();
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,15 +80,15 @@ IntDestroyClass(IN OUT PCLS Class)
|
||||||
|
|
||||||
if (Class->pclsBase == Class)
|
if (Class->pclsBase == Class)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc, NextCallProc;
|
PCALLPROCDATA CallProc, NextCallProc;
|
||||||
|
|
||||||
/* Destroy allocated callproc handles */
|
/* Destroy allocated callproc handles */
|
||||||
CallProc = Class->spcpdFirst;
|
CallProc = Class->spcpdFirst;
|
||||||
while (CallProc != NULL)
|
while (CallProc != NULL)
|
||||||
{
|
{
|
||||||
NextCallProc = CallProc->Next;
|
NextCallProc = CallProc->spcpdNext;
|
||||||
|
|
||||||
CallProc->Next = NULL;
|
CallProc->spcpdNext = NULL;
|
||||||
DestroyCallProc(NULL,
|
DestroyCallProc(NULL,
|
||||||
CallProc);
|
CallProc);
|
||||||
|
|
||||||
|
@ -211,23 +211,23 @@ IntDeregisterClassAtom(IN RTL_ATOM Atom)
|
||||||
Atom);
|
Atom);
|
||||||
}
|
}
|
||||||
|
|
||||||
PCALLPROC
|
PCALLPROCDATA
|
||||||
UserFindCallProc(IN PCLS Class,
|
UserFindCallProc(IN PCLS Class,
|
||||||
IN WNDPROC WndProc,
|
IN WNDPROC WndProc,
|
||||||
IN BOOL bUnicode)
|
IN BOOL bUnicode)
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
|
|
||||||
CallProc = Class->spcpdFirst;
|
CallProc = Class->spcpdFirst;
|
||||||
while (CallProc != NULL)
|
while (CallProc != NULL)
|
||||||
{
|
{
|
||||||
if (CallProc->WndProc == WndProc &&
|
if (CallProc->pfnClientPrevious == WndProc &&
|
||||||
CallProc->Unicode == (UINT)bUnicode)
|
CallProc->Unicode == (UINT)bUnicode)
|
||||||
{
|
{
|
||||||
return CallProc;
|
return CallProc;
|
||||||
}
|
}
|
||||||
|
|
||||||
CallProc = CallProc->Next;
|
CallProc = CallProc->spcpdNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -235,15 +235,15 @@ UserFindCallProc(IN PCLS Class,
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
UserAddCallProcToClass(IN OUT PCLS Class,
|
UserAddCallProcToClass(IN OUT PCLS Class,
|
||||||
IN PCALLPROC CallProc)
|
IN PCALLPROCDATA CallProc)
|
||||||
{
|
{
|
||||||
PCLS BaseClass;
|
PCLS BaseClass;
|
||||||
|
|
||||||
ASSERT(CallProc->Next == NULL);
|
ASSERT(CallProc->spcpdNext == NULL);
|
||||||
|
|
||||||
BaseClass = Class->pclsBase;
|
BaseClass = Class->pclsBase;
|
||||||
ASSERT(CallProc->Next == NULL);
|
ASSERT(CallProc->spcpdNext == NULL);
|
||||||
CallProc->Next = BaseClass->spcpdFirst;
|
CallProc->spcpdNext = BaseClass->spcpdFirst;
|
||||||
BaseClass->spcpdFirst = CallProc;
|
BaseClass->spcpdFirst = CallProc;
|
||||||
|
|
||||||
/* Update all clones */
|
/* Update all clones */
|
||||||
|
@ -289,21 +289,22 @@ IntSetClassAtom(IN OUT PCLS Class,
|
||||||
static WNDPROC
|
static WNDPROC
|
||||||
IntGetClassWndProc(IN PCLS Class,
|
IntGetClassWndProc(IN PCLS Class,
|
||||||
IN PPROCESSINFO pi,
|
IN PPROCESSINFO pi,
|
||||||
IN BOOL Ansi)
|
IN BOOL Ansi) // This is what we are looking for?!?
|
||||||
{
|
{
|
||||||
ASSERT(UserIsEnteredExclusive() == TRUE);
|
ASSERT(UserIsEnteredExclusive() == TRUE);
|
||||||
|
/* System Classes */
|
||||||
if (Class->System)
|
if (Class->System)
|
||||||
{
|
{
|
||||||
|
// FIXME! System class have gpsi->apfnClientA/W to pick from.
|
||||||
return (Ansi ? Class->WndProcExtra : Class->lpfnWndProc);
|
return (Ansi ? Class->WndProcExtra : Class->lpfnWndProc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{ /* Unicode Proc */
|
||||||
if (!Ansi == Class->Unicode)
|
if (!Ansi == Class->Unicode)
|
||||||
{
|
{
|
||||||
return Class->lpfnWndProc;
|
return Class->lpfnWndProc;
|
||||||
}
|
}
|
||||||
else
|
else // Ansi?
|
||||||
{
|
{
|
||||||
PCLS BaseClass;
|
PCLS BaseClass;
|
||||||
|
|
||||||
|
@ -318,7 +319,7 @@ IntGetClassWndProc(IN PCLS Class,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PCALLPROC NewCallProc;
|
PCALLPROCDATA NewCallProc;
|
||||||
|
|
||||||
if (pi == NULL)
|
if (pi == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1118,8 +1118,8 @@ NtUserCreateDesktop(
|
||||||
RtlZeroMemory(&WindowName, sizeof(WindowName));
|
RtlZeroMemory(&WindowName, sizeof(WindowName));
|
||||||
|
|
||||||
wc.cbSize = sizeof(wc);
|
wc.cbSize = sizeof(wc);
|
||||||
wc.style = CS_DBLCLKS|CS_PARENTDC;
|
wc.style = 0;
|
||||||
wc.lpfnWndProc = gpsi->apfnClientW.pfnDesktopWndProc; // Use User32 Desktop Proc.
|
wc.lpfnWndProc = gpsi->apfnClientW.pfnDesktopWndProc; // Use pfnMessageWindowProc
|
||||||
wc.cbClsExtra = 0;
|
wc.cbClsExtra = 0;
|
||||||
wc.cbWndExtra = 0;
|
wc.cbWndExtra = 0;
|
||||||
wc.hInstance = hModClient;
|
wc.hInstance = hModClient;
|
||||||
|
|
|
@ -270,18 +270,6 @@ NtUserGetControlColor(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD
|
|
||||||
APIENTRY
|
|
||||||
NtUserGetCPD(
|
|
||||||
DWORD Unknown0,
|
|
||||||
DWORD Unknown1,
|
|
||||||
DWORD Unknown2)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
APIENTRY
|
APIENTRY
|
||||||
NtUserGetImeHotKey(
|
NtUserGetImeHotKey(
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
int usedHandles=0;
|
//int usedHandles=0;
|
||||||
PUSER_HANDLE_TABLE gHandleTable = NULL;
|
PUSER_HANDLE_TABLE gHandleTable = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,14 +55,14 @@ __inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
||||||
{
|
{
|
||||||
PUSER_HANDLE_ENTRY entry;
|
PUSER_HANDLE_ENTRY entry;
|
||||||
|
|
||||||
DPRINT("handles used %i\n",usedHandles);
|
DPRINT("handles used %i\n",gpsi->cHandleEntries);
|
||||||
|
|
||||||
if (ht->freelist)
|
if (ht->freelist)
|
||||||
{
|
{
|
||||||
entry = ht->freelist;
|
entry = ht->freelist;
|
||||||
ht->freelist = entry->ptr;
|
ht->freelist = entry->ptr;
|
||||||
|
|
||||||
usedHandles++;
|
gpsi->cHandleEntries++;
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ __inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
||||||
int i, iFree = 0, iWindow = 0, iMenu = 0, iCursorIcon = 0,
|
int i, iFree = 0, iWindow = 0, iMenu = 0, iCursorIcon = 0,
|
||||||
iHook = 0, iCallProc = 0, iAccel = 0, iMonitor = 0, iTimer = 0;
|
iHook = 0, iCallProc = 0, iAccel = 0, iMonitor = 0, iTimer = 0;
|
||||||
/**/
|
/**/
|
||||||
DPRINT1("Out of user handles! Used -> %i, NM_Handle -> %d\n", usedHandles, ht->nb_handles);
|
DPRINT1("Out of user handles! Used -> %i, NM_Handle -> %d\n", gpsi->cHandleEntries, ht->nb_handles);
|
||||||
//#if 0
|
//#if 0
|
||||||
for(i = 0; i < ht->nb_handles; i++)
|
for(i = 0; i < ht->nb_handles; i++)
|
||||||
{
|
{
|
||||||
|
@ -131,7 +131,7 @@ __inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
||||||
|
|
||||||
entry->generation = 1;
|
entry->generation = 1;
|
||||||
|
|
||||||
usedHandles++;
|
gpsi->cHandleEntries++;
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ __inline static void *free_user_entry(PUSER_HANDLE_TABLE ht, PUSER_HANDLE_ENTRY
|
||||||
entry->pi = NULL;
|
entry->pi = NULL;
|
||||||
ht->freelist = entry;
|
ht->freelist = entry;
|
||||||
|
|
||||||
usedHandles--;
|
gpsi->cHandleEntries--;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -387,7 +387,7 @@ BOOL FASTCALL UserDereferenceObject(PVOID obj)
|
||||||
|
|
||||||
if (hdr->RefCount == 0 && hdr->destroyed)
|
if (hdr->RefCount == 0 && hdr->destroyed)
|
||||||
{
|
{
|
||||||
// DPRINT1("info: something destroyed bcaise of deref, in use=%i\n",usedHandles);
|
// DPRINT1("info: something destroyed bcaise of deref, in use=%i\n",gpsi->cHandleEntries);
|
||||||
|
|
||||||
memset(hdr, 0x55, sizeof(USER_OBJECT_HEADER));
|
memset(hdr, 0x55, sizeof(USER_OBJECT_HEADER));
|
||||||
|
|
||||||
|
|
|
@ -418,7 +418,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
|
||||||
// Window nz, check to see if we still own this or it is just cheap wine tonight.
|
// Window nz, check to see if we still own this or it is just cheap wine tonight.
|
||||||
if (!(Flags & DCX_CACHE))
|
if (!(Flags & DCX_CACHE))
|
||||||
{
|
{
|
||||||
if ( Wnd->ti != GetW32ThreadInfo())
|
if ( Wnd->pti != GetW32ThreadInfo())
|
||||||
Flags |= DCX_CACHE; // Ah~ Not Powned! Forced to be cheap~
|
Flags |= DCX_CACHE; // Ah~ Not Powned! Forced to be cheap~
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -329,12 +329,12 @@ UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject)
|
||||||
{
|
{
|
||||||
Wnd->strName.Length = 0;
|
Wnd->strName.Length = 0;
|
||||||
Wnd->strName.MaximumLength = 0;
|
Wnd->strName.MaximumLength = 0;
|
||||||
DesktopHeapFree(Wnd->pdesktop,
|
DesktopHeapFree(Wnd->rpdesk,
|
||||||
Wnd->strName.Buffer);
|
Wnd->strName.Buffer);
|
||||||
Wnd->strName.Buffer = NULL;
|
Wnd->strName.Buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DesktopHeapFree(Wnd->pdesktop, Wnd);
|
DesktopHeapFree(Wnd->rpdesk, Wnd);
|
||||||
WindowObject->Wnd = NULL;
|
WindowObject->Wnd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,17 +562,17 @@ IntGetWindowProc(IN PWINDOW_OBJECT Window,
|
||||||
on a function that I thought is only suppose to return the current Windows Proc? */
|
on a function that I thought is only suppose to return the current Windows Proc? */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PCALLPROC NewCallProc, CallProc;
|
PCALLPROCDATA NewCallProc, CallProc;
|
||||||
|
|
||||||
NewCallProc = UserFindCallProc(Wnd->pcls,
|
NewCallProc = UserFindCallProc(Wnd->pcls,
|
||||||
Wnd->lpfnWndProc,
|
Wnd->lpfnWndProc,
|
||||||
Wnd->Unicode);
|
Wnd->Unicode);
|
||||||
if (NewCallProc == NULL)
|
if (NewCallProc == NULL)
|
||||||
{
|
{
|
||||||
NewCallProc = CreateCallProc(Wnd->ti->pDeskInfo,
|
NewCallProc = CreateCallProc(Wnd->pti->pDeskInfo,
|
||||||
Wnd->lpfnWndProc,
|
Wnd->lpfnWndProc,
|
||||||
Wnd->Unicode,
|
Wnd->Unicode,
|
||||||
Wnd->ti->ppi);
|
Wnd->pti->ppi);
|
||||||
if (NewCallProc == NULL)
|
if (NewCallProc == NULL)
|
||||||
{
|
{
|
||||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
@ -1672,9 +1672,9 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
||||||
Window->Wnd->hdr.Handle = hWnd; /* FIXME: Remove hack , are you sure?*/
|
Window->Wnd->hdr.Handle = hWnd; /* FIXME: Remove hack , are you sure?*/
|
||||||
Wnd = Window->Wnd;
|
Wnd = Window->Wnd;
|
||||||
|
|
||||||
Wnd->ti = ti;
|
Wnd->pti = ti;
|
||||||
Wnd->pi = ti->ppi;
|
Wnd->pi = ti->ppi;
|
||||||
Wnd->pdesktop = pti->Desktop;
|
Wnd->rpdesk = pti->Desktop;
|
||||||
Wnd->hWndLastActive = hWnd;
|
Wnd->hWndLastActive = hWnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1770,7 +1770,7 @@ AllocErr:
|
||||||
|
|
||||||
if ( NULL != WindowName->Buffer && WindowName->Length > 0 )
|
if ( NULL != WindowName->Buffer && WindowName->Length > 0 )
|
||||||
{
|
{
|
||||||
Wnd->strName.Buffer = DesktopHeapAlloc(Wnd->pdesktop,
|
Wnd->strName.Buffer = DesktopHeapAlloc(Wnd->rpdesk,
|
||||||
WindowName->Length + sizeof(UNICODE_NULL));
|
WindowName->Length + sizeof(UNICODE_NULL));
|
||||||
if (Wnd->strName.Buffer == NULL)
|
if (Wnd->strName.Buffer == NULL)
|
||||||
{
|
{
|
||||||
|
@ -2239,9 +2239,9 @@ AllocErr:
|
||||||
Dont understand why it does this. */
|
Dont understand why it does this. */
|
||||||
if (ClassAtom == gpsi->atomSysClass[ICLS_EDIT])
|
if (ClassAtom == gpsi->atomSysClass[ICLS_EDIT])
|
||||||
{
|
{
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
//CallProc = CreateCallProc(NULL, Wnd->lpfnWndProc, bUnicodeWindow, Wnd->ti->ppi);
|
//CallProc = CreateCallProc(NULL, Wnd->lpfnWndProc, bUnicodeWindow, Wnd->ti->ppi);
|
||||||
CallProc = CreateCallProc(NULL, Wnd->lpfnWndProc, Wnd->Unicode , Wnd->ti->ppi);
|
CallProc = CreateCallProc(NULL, Wnd->lpfnWndProc, Wnd->Unicode , Wnd->pti->ppi);
|
||||||
|
|
||||||
if (!CallProc)
|
if (!CallProc)
|
||||||
{
|
{
|
||||||
|
@ -3693,7 +3693,7 @@ IntSetWindowProc(PWINDOW_OBJECT Window,
|
||||||
BOOL Ansi)
|
BOOL Ansi)
|
||||||
{
|
{
|
||||||
WNDPROC Ret;
|
WNDPROC Ret;
|
||||||
PCALLPROC CallProc;
|
PCALLPROCDATA CallProc;
|
||||||
PWND Wnd = Window->Wnd;
|
PWND Wnd = Window->Wnd;
|
||||||
|
|
||||||
/* resolve any callproc handle if possible */
|
/* resolve any callproc handle if possible */
|
||||||
|
@ -3730,7 +3730,7 @@ IntSetWindowProc(PWINDOW_OBJECT Window,
|
||||||
CallProc = CreateCallProc(NULL,
|
CallProc = CreateCallProc(NULL,
|
||||||
Wnd->lpfnWndProc,
|
Wnd->lpfnWndProc,
|
||||||
Wnd->Unicode,
|
Wnd->Unicode,
|
||||||
Wnd->ti->ppi);
|
Wnd->pti->ppi);
|
||||||
if (CallProc == NULL)
|
if (CallProc == NULL)
|
||||||
{
|
{
|
||||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
@ -4820,10 +4820,10 @@ NtUserDefSetText(HWND hWnd, PLARGE_STRING WindowText)
|
||||||
Wnd->strName.Buffer = NULL;
|
Wnd->strName.Buffer = NULL;
|
||||||
if (buf != NULL)
|
if (buf != NULL)
|
||||||
{
|
{
|
||||||
DesktopHeapFree(Wnd->pdesktop, buf);
|
DesktopHeapFree(Wnd->rpdesk, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
Wnd->strName.Buffer = DesktopHeapAlloc(Wnd->pdesktop,
|
Wnd->strName.Buffer = DesktopHeapAlloc(Wnd->rpdesk,
|
||||||
UnicodeString.Length + sizeof(UNICODE_NULL));
|
UnicodeString.Length + sizeof(UNICODE_NULL));
|
||||||
if (Wnd->strName.Buffer != NULL)
|
if (Wnd->strName.Buffer != NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue