explorer starts but crash due to missing/lost winsta (ref/deref
problem?)
Modified: branches/hardons1stbranch/win32k/include/keyboard.h
Added: branches/hardons1stbranch/win32k/include/userfuncs.h
Modified: branches/hardons1stbranch/win32k/include/win32k.h
Modified: branches/hardons1stbranch/win32k/main/dllmain.c
Modified: branches/hardons1stbranch/win32k/ntuser/accelerator.c
Modified: branches/hardons1stbranch/win32k/ntuser/caret.c
Modified: branches/hardons1stbranch/win32k/ntuser/class.c
Modified: branches/hardons1stbranch/win32k/ntuser/cursoricon.c
Modified: branches/hardons1stbranch/win32k/ntuser/desktop.c
Modified: branches/hardons1stbranch/win32k/ntuser/handle.c
Modified: branches/hardons1stbranch/win32k/ntuser/hook.c
Modified: branches/hardons1stbranch/win32k/ntuser/hotkey.c
Modified: branches/hardons1stbranch/win32k/ntuser/keyboard.c
Modified: branches/hardons1stbranch/win32k/ntuser/message.c
Modified: branches/hardons1stbranch/win32k/ntuser/msgqueue.c
Modified: branches/hardons1stbranch/win32k/ntuser/useratom.c
Modified: branches/hardons1stbranch/win32k/ntuser/window.c
Modified: branches/hardons1stbranch/win32k/ntuser/winsta.c
_____
Modified: branches/hardons1stbranch/win32k/include/keyboard.h
--- branches/hardons1stbranch/win32k/include/keyboard.h 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/include/keyboard.h 2005-07-27
13:18:11 UTC (rev 16799)
@@ -1,231 +0,0 @@
-#ifndef _WIN32K_KEYBOARD_H
-#define _WIN32K_KEYBOARD_H
-
-DWORD FASTCALL
-UserGetKeyState(DWORD key);
-
-/* handle.h */
-
-VOID UserInitHandleTable(PUSER_HANDLE_TABLE ht, PVOID mem, ULONG
bytes);
-HANDLE UserAllocHandle(PUSER_HANDLE_TABLE ht, PVOID object,
USER_OBJECT_TYPE type );
-PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle,
USER_OBJECT_TYPE type );
-PVOID UserFreeHandle(PUSER_HANDLE_TABLE ht, HANDLE handle );
-PVOID UserGetNextHandle(PUSER_HANDLE_TABLE ht, HANDLE* handle,
USER_OBJECT_TYPE type );
-
-
-/************* DESKTOP.C *****************/
-
-inline PDESKTOP_OBJECT FASTCALL UserGetCurrentDesktop();
-
-
-
-
-/************************* ACCELERATOR.C ***********************/
-
-inline PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hCursor);
-
-PACCELERATOR_TABLE UserGetAcceleratorTable(HACCEL hAccel);
-PACCELERATOR_TABLE UserAllocAcceleratorTable(HACCEL* h);
-
-PACCELERATOR_TABLE UserCreateAcceleratorTableObject(HACCEL* h);
-
-
-/* metric.c */
-ULONG FASTCALL
-UserGetSystemMetrics(ULONG Index);
-
-/* input.h */
-NTSTATUS FASTCALL
-UserAcquireOrReleaseInputOwnership(BOOLEAN Release);
-
-/* focus.c */
-PWINDOW_OBJECT FASTCALL
-UserSetFocus(PWINDOW_OBJECT Wnd OPTIONAL);
-
-
-/* painting.c */
-DWORD FASTCALL
-UserInvalidateRect(PWINDOW_OBJECT Wnd, CONST RECT *Rect, BOOL Erase);
-
-DWORD FASTCALL
-UserScrollDC(HDC hDC, INT dx, INT dy, const RECT *lprcScroll,
- const RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate);
-
-INT FASTCALL
-UserGetUpdateRgn(PWINDOW_OBJECT Window, HRGN hRgn, BOOL bErase);
-
-/* message.c */
-BOOL FASTCALL
-UserPostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
-
-/************************ WINDOW.C *****************************/
-
-inline VOID FASTCALL UserFreeWindowObject(PWINDOW_OBJECT Wnd);
-
-PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd);
-
-PWINDOW_OBJECT FASTCALL UserCreateWindowObject(HWND* h, ULONG bytes);
-
-PWINDOW_OBJECT FASTCALL
-UserGetWindow(PWINDOW_OBJECT Wnd, UINT Relationship);
-
-LONG FASTCALL
-UserGetWindowLong(PWINDOW_OBJECT Wnd, DWORD Index, BOOL Ansi);
-
-LONG FASTCALL
-UserSetWindowLong(PWINDOW_OBJECT Wnd, DWORD Index, LONG NewValue, BOOL
Ansi);
-
-BOOLEAN FASTCALL
-UserDestroyWindow(PWINDOW_OBJECT Wnd);
-
-HWND FASTCALL
-GetHwnd(PWINDOW_OBJECT Wnd);
-
-/************************* WINSTA.C ****************************/
-
-inline PWINSTATION_OBJECT FASTCALL UserGetCurrentWinSta();
-
-/************************* MENU.C ****************************/
-
-inline PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu);
-
-HMENU FASTCALL
-UserCreateMenu(BOOL PopupMenu);
-
-PMENU_OBJECT FASTCALL
-UserCreateMenuObject(HANDLE* h);
-
-
-/* caret.c */
-BOOL FASTCALL
-UserShowCaret(PWINDOW_OBJECT Wnd);
-
-BOOL FASTCALL
-UserSetCaretPos(int X, int Y);
-
-BOOL FASTCALL
-UserHideCaret(PWINDOW_OBJECT Wnd);
-
-/* winpos.c */
-
-BOOL FASTCALL
-UserGetClientOrigin(PWINDOW_OBJECT hWnd, LPPOINT Point);
-
-/* scrollbar.c */
-DWORD FASTCALL
-UserShowScrollBar(PWINDOW_OBJECT Wnd, int wBar, DWORD bShow);
-
-/* timer.c */
-
-inline VOID FASTCALL
-UserFreeTimer(PTIMER_ENTRY Timer);
-
-VOID FASTCALL
-UserRemoveTimersWindow(PWINDOW_OBJECT Wnd);
-
-VOID FASTCALL
-UserInsertTimer(PTIMER_ENTRY NewTimer);
-
-VOID FASTCALL
-UserSetNextPendingTimer();
-
-VOID FASTCALL
-UserRemoveTimersQueue(PUSER_MESSAGE_QUEUE Queue);
-
-/* hook.c*/
-PHOOK FASTCALL
-HookCreate(HHOOK* hHook);
-
-PHOOK FASTCALL HookGet(HHOOK hHook);
-
-/* class.c */
-
-VOID FASTCALL
-ClassReferenceClass(PWNDCLASS_OBJECT Class);
-
-VOID FASTCALL
-ClassDereferenceClass(PWNDCLASS_OBJECT Class);
-
-PWNDCLASS_OBJECT FASTCALL
-ClassCreateClass(DWORD bytes);
-
-
-/********************* CURSORI(ICON).C *****************/
-
-inline PCURICON_OBJECT FASTCALL
-UserGetCursorObject(HCURSOR hCursor);
-
-VOID FASTCALL
-CurIconReferenceCurIcon(PCURICON_OBJECT CurIcon);
-
-PCURICON_OBJECT UserAllocCursorIcon(HCURSOR* h);
-PCURICON_OBJECT UserGetCursorIcon(HCURSOR hCursor);
-
-VOID FASTCALL
-UserDereferenceCurIcon(PCURICON_OBJECT CurIcon);
-
-VOID FASTCALL
-CursorDereference(PCURICON_OBJECT Cursor);
-
-PCURICON_OBJECT FASTCALL
-UserCreateCursorObject(HCURSOR* hCursor, ULONG extraBytes);
-
-PCURICON_OBJECT FASTCALL
-CursorGet(HCURSOR hCursor);
-
-inline PCURICON_OBJECT FASTCALL
-UserGetCursorIconObject(HCURSOR hCursor);
-
-/* monitor.c */
-
-PMONITOR_OBJECT FASTCALL UserCreateMonitorObject(HANDLE* h);
-
-PMONITOR_OBJECT UserGetMonitorObject(HANDLE hCursor);
-
-
-/* msgqueue.c */
-
-VOID FASTCALL
-MsqRemoveWindowMessagesFromQueue(PWINDOW_OBJECT pWindow);
-
-inline BOOL FASTCALL
-UserMessageFilter(UINT Message, UINT FilterMin, UINT FilterMax);
-
-VOID FASTCALL
-MsqRemoveTimersWindow(PUSER_MESSAGE_QUEUE MessageQueue, PWINDOW_OBJECT
Wnd);
-
-VOID FASTCALL
-MsqInsertExpiredTimer(PTIMER_ENTRY Timer);
-
-PTIMER_ENTRY FASTCALL
-UserFindExpiredTimer(
- PUSER_MESSAGE_QUEUE Queue,
- PWINDOW_OBJECT Wnd OPTIONAL,
- UINT MsgFilterMin,
- UINT MsgFilterMax,
- BOOL Remove
- );
-
-PTIMER_ENTRY FASTCALL
-MsqRemoveTimer(
- PWINDOW_OBJECT Wnd,
- UINT_PTR IDEvent,
- UINT Message
- );
-
-/* windc.c */
-
-HDC FASTCALL
-UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG
Flags);
-
-INT FASTCALL
-UserReleaseDC(PWINDOW_OBJECT Wnd, HDC hDc);
-
-DWORD FASTCALL
-UserGetWindowDC(PWINDOW_OBJECT Wnd);
-
-/* div */
-#define UserGetCurrentQueue() \
-((PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue)
-
-#endif /* _WIN32K_KEYBOARD_H */
_____
Added: branches/hardons1stbranch/win32k/include/userfuncs.h
--- branches/hardons1stbranch/win32k/include/userfuncs.h
2005-07-27 12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/include/userfuncs.h
2005-07-27 13:18:11 UTC (rev 16799)
@@ -0,0 +1,231 @@
+#ifndef _WIN32K_USERFUNCS_H
+#define _WIN32K_USERFUNCS_H
+
+/*************** KEYBOARD.C ******************/
+
+DWORD FASTCALL
+UserGetKeyState(DWORD key);
+
+/******************** HANDLE.C ***************/
+
+VOID UserInitHandleTable(PUSER_HANDLE_TABLE ht, PVOID mem, ULONG
bytes);
+HANDLE UserAllocHandle(PUSER_HANDLE_TABLE ht, PVOID object,
USER_OBJECT_TYPE type );
+PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle,
USER_OBJECT_TYPE type );
+PVOID UserFreeHandle(PUSER_HANDLE_TABLE ht, HANDLE handle );
+PVOID UserGetNextHandle(PUSER_HANDLE_TABLE ht, HANDLE* handle,
USER_OBJECT_TYPE type );
+
+
+/************* DESKTOP.C *****************/
+
+inline PDESKTOP_OBJECT FASTCALL UserGetCurrentDesktop();
+
+
+
+
+/************************* ACCELERATOR.C ***********************/
+
+inline PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hCursor);
+
+PACCELERATOR_TABLE FASTCALL UserCreateAccelObject(HACCEL* h);
+
+
+
+/* metric.c */
+ULONG FASTCALL
+UserGetSystemMetrics(ULONG Index);
+
+/* input.h */
+NTSTATUS FASTCALL
+UserAcquireOrReleaseInputOwnership(BOOLEAN Release);
+
+/* focus.c */
+PWINDOW_OBJECT FASTCALL
+UserSetFocus(PWINDOW_OBJECT Wnd OPTIONAL);
+
+
+/* painting.c */
+DWORD FASTCALL
+UserInvalidateRect(PWINDOW_OBJECT Wnd, CONST RECT *Rect, BOOL Erase);
+
+DWORD FASTCALL
+UserScrollDC(HDC hDC, INT dx, INT dy, const RECT *lprcScroll,
+ const RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate);
+
+INT FASTCALL
+UserGetUpdateRgn(PWINDOW_OBJECT Window, HRGN hRgn, BOOL bErase);
+
+/* message.c */
+BOOL FASTCALL
+UserPostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
+
+/************************ WINDOW.C *****************************/
+
+inline VOID FASTCALL UserFreeWindowObject(PWINDOW_OBJECT Wnd);
+
+PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd);
+
+PWINDOW_OBJECT FASTCALL UserCreateWindowObject(HWND* h, ULONG bytes);
+
+PWINDOW_OBJECT FASTCALL
+UserGetWindow(PWINDOW_OBJECT Wnd, UINT Relationship);
+
+LONG FASTCALL
+UserGetWindowLong(PWINDOW_OBJECT Wnd, DWORD Index, BOOL Ansi);
+
+LONG FASTCALL
+UserSetWindowLong(PWINDOW_OBJECT Wnd, DWORD Index, LONG NewValue, BOOL
Ansi);
+
+BOOLEAN FASTCALL
+UserDestroyWindow(PWINDOW_OBJECT Wnd);
+
+HWND FASTCALL
+GetHwnd(PWINDOW_OBJECT Wnd);
+
+/************************* WINSTA.C ****************************/
+
+inline PWINSTATION_OBJECT FASTCALL UserGetCurrentWinSta();
+
+/************************* MENU.C ****************************/
+
+inline PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu);
+
+HMENU FASTCALL
+UserCreateMenu(BOOL PopupMenu);
+
+PMENU_OBJECT FASTCALL
+UserCreateMenuObject(HANDLE* h);
+
+
+/* caret.c */
+BOOL FASTCALL
+UserShowCaret(PWINDOW_OBJECT Wnd);
+
+BOOL FASTCALL
+UserSetCaretPos(int X, int Y);
+
+BOOL FASTCALL
+UserHideCaret(PWINDOW_OBJECT Wnd);
+
+/* winpos.c */
+
+BOOL FASTCALL
+UserGetClientOrigin(PWINDOW_OBJECT hWnd, LPPOINT Point);
+
+/* scrollbar.c */
+DWORD FASTCALL
+UserShowScrollBar(PWINDOW_OBJECT Wnd, int wBar, DWORD bShow);
+
+/* timer.c */
+
+inline VOID FASTCALL
+UserFreeTimer(PTIMER_ENTRY Timer);
+
+VOID FASTCALL
+UserRemoveTimersWindow(PWINDOW_OBJECT Wnd);
+
+VOID FASTCALL
+UserInsertTimer(PTIMER_ENTRY NewTimer);
+
+VOID FASTCALL
+UserSetNextPendingTimer();
+
+VOID FASTCALL
+UserRemoveTimersQueue(PUSER_MESSAGE_QUEUE Queue);
+
+/* hook.c*/
+PHOOK FASTCALL
+HookCreate(HHOOK* hHook);
+
+PHOOK FASTCALL HookGet(HHOOK hHook);
+
+/* class.c */
+
+VOID FASTCALL
+ClassReferenceClass(PWNDCLASS_OBJECT Class);
+
+VOID FASTCALL
+ClassDereferenceClass(PWNDCLASS_OBJECT Class);
+
+PWNDCLASS_OBJECT FASTCALL
+ClassCreateClass(DWORD bytes);
+
+
+/********************* CURSORIICON.C *****************/
+
+inline PCURICON_OBJECT FASTCALL
+UserGetCursorObject(HCURSOR hCursor);
+
+VOID FASTCALL
+CurIconReferenceCurIcon(PCURICON_OBJECT CurIcon);
+
+PCURICON_OBJECT UserAllocCursorIcon(HCURSOR* h);
+PCURICON_OBJECT UserGetCursorIcon(HCURSOR hCursor);
+
+VOID FASTCALL
+UserDereferenceCurIcon(PCURICON_OBJECT CurIcon);
+
+VOID FASTCALL
+CursorDereference(PCURICON_OBJECT Cursor);
+
+PCURICON_OBJECT FASTCALL
+UserCreateCursorObject(HCURSOR* hCursor, ULONG extraBytes);
+
+PCURICON_OBJECT FASTCALL
+CursorGet(HCURSOR hCursor);
+
+
+/* monitor.c */
+
+PMONITOR_OBJECT FASTCALL UserCreateMonitorObject(HANDLE* h);
+
+PMONITOR_OBJECT UserGetMonitorObject(HANDLE hCursor);
+
+
+/* msgqueue.c */
+
+VOID FASTCALL
+MsqRemoveWindowMessagesFromQueue(PWINDOW_OBJECT pWindow);
+
+inline BOOL FASTCALL
+UserMessageFilter(UINT Message, UINT FilterMin, UINT FilterMax);
+
+VOID FASTCALL
+MsqRemoveTimersWindow(PUSER_MESSAGE_QUEUE MessageQueue, PWINDOW_OBJECT
Wnd);
+
+VOID FASTCALL
+MsqInsertExpiredTimer(PTIMER_ENTRY Timer);
+
+PTIMER_ENTRY FASTCALL
+UserFindExpiredTimer(
+ PUSER_MESSAGE_QUEUE Queue,
+ PWINDOW_OBJECT Wnd OPTIONAL,
+ UINT MsgFilterMin,
+ UINT MsgFilterMax,
+ BOOL Remove
+ );
+
+PTIMER_ENTRY FASTCALL
+MsqRemoveTimer(
+ PWINDOW_OBJECT Wnd,
+ UINT_PTR IDEvent,
+ UINT Message
+ );
+
+/* windc.c */
+
+HDC FASTCALL
+UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG
Flags);
+
+INT FASTCALL
+UserReleaseDC(PWINDOW_OBJECT Wnd, HDC hDc);
+
+DWORD FASTCALL
+UserGetWindowDC(PWINDOW_OBJECT Wnd);
+
+/* div */
+#define UserGetCurrentQueue() \
+((PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue)
+
+
+
+#endif /* _WIN32K_USERFUNCS_H */
_____
Modified: branches/hardons1stbranch/win32k/include/win32k.h
--- branches/hardons1stbranch/win32k/include/win32k.h 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/include/win32k.h 2005-07-27
13:18:11 UTC (rev 16799)
@@ -59,5 +59,6 @@
#include <eng/misc.h>
#include <dib/dib.h>
#include <include/ntuser.h>
+#include <include/userfuncs.h>
/* EOF */
_____
Modified: branches/hardons1stbranch/win32k/main/dllmain.c
--- branches/hardons1stbranch/win32k/main/dllmain.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/main/dllmain.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -144,6 +144,8 @@
/* Get the Win32 Thread */
Win32Thread = PsGetThreadWin32Thread(Thread);
+ //FIXME: imo, its an error if it already exist. Gunnar
+
/* Allocate one if needed */
if (!Win32Thread)
{
@@ -178,6 +180,9 @@
DesktopPath,
&hWinSta,
&hDesk);
+
+/*---- this code i dont get ------*/
+/* imo, a thread REQUIRE a desktop!!! */
if(NT_SUCCESS(Status))
{
if(hWinSta != NULL)
@@ -213,6 +218,8 @@
}
}
}
+/*---- this code i dont get ------*/
+
Win32Thread->IsExiting = FALSE;
UserDestroyCaret(Win32Thread);
Win32Thread->MessageQueue = MsqCreateMessageQueue(Thread);
_____
Modified: branches/hardons1stbranch/win32k/ntuser/accelerator.c
--- branches/hardons1stbranch/win32k/ntuser/accelerator.c
2005-07-27 12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/accelerator.c
2005-07-27 13:18:11 UTC (rev 16799)
@@ -115,17 +115,11 @@
}
-PACCELERATOR_TABLE UserCreateAcceleratorTableObject(HACCEL* h)
+PACCELERATOR_TABLE FASTCALL UserCreateAccelObject(HACCEL* h)
{
PVOID mem;
- PWINSTATION_OBJECT WinSta;
+ PWINSTATION_OBJECT WinSta = UserGetCurrentWinSta();
- /*
- Get process winsta? Or thread->desk->winsta?
- can a process threads be assigned to different winstas (via
desktops?)
- */
- WinSta = IntGetWinStaObj();
-
mem = ExAllocatePool(PagedPool, sizeof(ACCELERATOR_TABLE));
if (!mem) return NULL;
RtlZeroMemory(mem, sizeof(ACCELERATOR_TABLE));
@@ -161,7 +155,7 @@
RETURN(FALSE);
}
- AcceleratorTable = UserCreateAcceleratorTableObject(&Handle);
+ AcceleratorTable = UserCreateAccelObject(&Handle);
if (AcceleratorTable == NULL)
{
@@ -227,7 +221,6 @@
if (!AcceleratorTable)
{
SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE);
-// ObDereferenceObject(WindowStation);
DPRINT1("E2\n");
RETURN(FALSE);
}
@@ -437,8 +430,8 @@
inline PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hCursor)
{
- PWINSTATION_OBJECT WinSta;
- WinSta = PsGetWin32Thread()->Desktop->WindowStation;
+ PWINSTATION_OBJECT WinSta = UserGetCurrentWinSta();
+
return (PACCELERATOR_TABLE)UserGetObject(&WinSta->HandleTable,
hCursor, USER_CURSOR_ICON );
}
_____
Modified: branches/hardons1stbranch/win32k/ntuser/caret.c
--- branches/hardons1stbranch/win32k/ntuser/caret.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/caret.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -55,7 +55,7 @@
UserSetCaretBlinkTime(UINT uMSeconds)
{
/* Don't save the new value to the registry! */
- PWINSTATION_OBJECT WinStaObject =
PsGetWin32Thread()->Desktop->WindowStation;
+ PWINSTATION_OBJECT WinStaObject = UserGetCurrentWinSta();
/* windows doesn't do this check */
if((uMSeconds < MIN_CARETBLINKRATE) || (uMSeconds >
MAX_CARETBLINKRATE))
@@ -141,7 +141,7 @@
PWINSTATION_OBJECT WinStaObject;
UINT Ret;
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Ret = WinStaObject->CaretBlinkRate;
if(!Ret)
_____
Modified: branches/hardons1stbranch/win32k/ntuser/class.c
--- branches/hardons1stbranch/win32k/ntuser/class.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/class.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -116,7 +116,7 @@
if (!ClassName || !PsGetWin32Thread()->Desktop)
return FALSE;
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Status = RtlLookupAtomInAtomTable(
WinStaObject->AtomTable,
@@ -225,7 +225,7 @@
return 0;
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Length = 0;
Status = RtlQueryAtomInAtomTable(WinStaObject->AtomTable,
@@ -457,7 +457,7 @@
RETURN((RTL_ATOM)0);
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
if (ClassName->Length > 0)
{
@@ -729,7 +729,7 @@
RETURN(FALSE);
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
if (!ClassReferenceClassByNameOrAtom(&Class, ClassNameOrAtom,
hInstance))
{
_____
Modified: branches/hardons1stbranch/win32k/ntuser/cursoricon.c
--- branches/hardons1stbranch/win32k/ntuser/cursoricon.c
2005-07-27 12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/cursoricon.c
2005-07-27 13:18:11 UTC (rev 16799)
@@ -90,7 +90,7 @@
XLATEOBJ *XlateObj = NULL;
HDC Screen;
- CurInfo =
UserGetSysCursorInfo(PsGetWin32Thread()->Desktop->WindowStation);
+ CurInfo = UserGetSysCursorInfo(UserGetCurrentWinSta());
OldCursor = CurInfo->CurrentCursorObject;
if (OldCursor)
@@ -401,39 +401,8 @@
//FIXME
}
-PCURICON_OBJECT FASTCALL
-UserCreateCurIconHandle(PWINSTATION_OBJECT WinStaObject)
-{
- PCURICON_OBJECT Cursor;
- HCURSOR hCursor;
- Cursor = UserCreateCursorObject(&hCursor, 0);
- if(!Cursor)
- {
- SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
- Cursor->Self = hCursor;
-
- InitializeListHead(&Cursor->ProcessList);
-
- if (! UserReferenceCurIconByProcess(Cursor))
- {
- DPRINT1("Failed to add process\n");
-// ObmCloseHandle(WinStaObject->HandleTable, Handle);
- //ObmDereferenceObject(Object);
- UserReferenceCurIcon(Cursor);
- return NULL;
- }
-
- InsertHeadList(&CurIconList, &Cursor->ListEntry);
-
- CursorDereference(Cursor);
-
- return Cursor;
-}
-
BOOLEAN FASTCALL
UserDestroyCurIconObject(PCURICON_OBJECT Cursor, BOOL ProcessCleanup)
{
@@ -488,7 +457,7 @@
RemoveEntryList(&Cursor->ListEntry);
}
- CurInfo =
UserGetSysCursorInfo(PsGetWin32Thread()->Desktop->WindowStation);
+ CurInfo = UserGetSysCursorInfo(UserGetCurrentWinSta());
if (CurInfo->CurrentCursorObject == Cursor)
{
@@ -555,6 +524,8 @@
}
+
+
PCURICON_OBJECT FASTCALL UserCreateCursorObject(HCURSOR* hCursor, ULONG
extraBytes)
{
PVOID mem;
@@ -562,10 +533,10 @@
mem = ExAllocatePool(PagedPool, sizeof(CURICON_OBJECT)+extraBytes);
if (!mem) return NULL;
+
RtlZeroMemory(mem, sizeof(CURICON_OBJECT)+extraBytes);
- /* FIX: kan desk->winsta vµre forskjellig fra proc->winsta? */
- WinSta = PsGetWin32Thread()->Desktop->WindowStation;
+ WinSta = UserGetCurrentWinSta();
*hCursor = UserAllocHandle(&WinSta->HandleTable, mem,
USER_CURSOR_ICON);
if (!*hCursor){
@@ -596,7 +567,20 @@
RETURN(NULL);
Cursor->Self = hCursor;
+ InitializeListHead(&Cursor->ProcessList);
+ if (! UserReferenceCurIconByProcess(Cursor))
+ {
+ DPRINT1("Failed to add process\n");
+// ObmCloseHandle(WinStaObject->HandleTable, Handle);
+ UserReferenceCurIcon(Cursor);
+ RETURN( NULL);
+ }
+
+ InsertHeadList(&CurIconList, &Cursor->ListEntry);
+
+
+
if(IconInfo)
{
Status = MmCopyFromCaller(&Cursor->IconInfo, IconInfo,
sizeof(ICONINFO));
@@ -643,11 +627,11 @@
inline PCURICON_OBJECT FASTCALL UserGetCursorObject(HCURSOR hCursor)
{
- PWINSTATION_OBJECT WinSta;
- WinSta = PsGetWin32Thread()->Desktop->WindowStation;
+ PWINSTATION_OBJECT WinSta = UserGetCurrentWinSta();
return (PCURICON_OBJECT)UserGetObject(&WinSta->HandleTable, hCursor,
USER_CURSOR_ICON );
}
+
/*
* @implemented
*/
@@ -819,13 +803,13 @@
RETURN( FALSE);
}
- CurInfo =
UserGetSysCursorInfo(PsGetWin32Thread()->Desktop->WindowStation);
+ CurInfo = UserGetSysCursorInfo(UserGetCurrentWinSta());
CursorObject = (PCURICON_OBJECT)CurInfo->CurrentCursorObject;
SafeCi.flags = ((CurInfo->ShowingCursor && CursorObject) ?
CURSOR_SHOWING : 0);
SafeCi.hCursor = (CursorObject ? (HCURSOR)CursorObject->Self :
(HCURSOR)0);
- UserGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation,
&SafeCi.ptScreenPos);
+ UserGetCursorLocation(UserGetCurrentWinSta(), &SafeCi.ptScreenPos);
Status = MmCopyToCaller(pci, &SafeCi, sizeof(CURSORINFO));
if(!NT_SUCCESS(Status))
@@ -867,8 +851,8 @@
RETURN( FALSE);
}
- CurInfo =
UserGetSysCursorInfo(PsGetWin32Thread()->Desktop->WindowStation);
- UserGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation,
&MousePos);
+ CurInfo = UserGetSysCursorInfo(UserGetCurrentWinSta());
+ UserGetCursorLocation(UserGetCurrentWinSta(), &MousePos);
// if(WinStaObject->ActiveDesktop)
// DesktopWindow =
IntGetWindowObject(WinStaObject->ActiveDesktop->DesktopWindow);
@@ -911,11 +895,6 @@
}
-inline PCURICON_OBJECT FASTCALL UserGetCursorIconObject(HCURSOR
hCursor)
-{
- PWINSTATION_OBJECT WinSta =
PsGetWin32Thread()->Desktop->WindowStation;
- return (PCURICON_OBJECT)UserGetObject(&WinSta->HandleTable, hCursor,
USER_CURSOR_ICON);
-}
/*
@@ -937,7 +916,7 @@
DPRINT("Enter NtUserDestroyCursorIcon\n");
UserEnterExclusive();
- Cursor = UserGetCursorIconObject(hCursor);
+ Cursor = UserGetCursorObject(hCursor);
if(!Cursor)
{
RETURN(FALSE);
@@ -1027,7 +1006,7 @@
if(!lpRect)
RETURN( FALSE);
- CurInfo =
UserGetSysCursorInfo(PsGetWin32Thread()->Desktop->WindowStation);
+ CurInfo = UserGetSysCursorInfo(UserGetCurrentWinSta());
if(CurInfo->CursorClipInfo.IsClipped)
{
Rect.left = CurInfo->CursorClipInfo.Left;
_____
Modified: branches/hardons1stbranch/win32k/ntuser/desktop.c
--- branches/hardons1stbranch/win32k/ntuser/desktop.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/desktop.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -1188,7 +1188,7 @@
BOOL doPatBlt = TRUE;
int len;
- PWINSTATION_OBJECT WinSta =
PsGetWin32Thread()->Desktop->WindowStation;
+ PWINSTATION_OBJECT WinSta = UserGetCurrentWinSta();
IntGdiGetClipBox(hDC, &Rect);
_____
Modified: branches/hardons1stbranch/win32k/ntuser/handle.c
--- branches/hardons1stbranch/win32k/ntuser/handle.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/handle.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -118,6 +118,8 @@
{
PUSER_HANDLE_ENTRY entry;
+ ASSERT(ht);
+
if (!(entry = handle_to_entry(ht, handle )) || entry->type != type)
return NULL;
return entry->ptr;
}
_____
Modified: branches/hardons1stbranch/win32k/ntuser/hook.c
--- branches/hardons1stbranch/win32k/ntuser/hook.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/hook.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -406,7 +406,7 @@
mem = ExAllocatePool(PagedPool, sizeof(HOOK));
if (!mem) return NULL;
- WinSta = PsGetWin32Thread()->Desktop->WindowStation;
+ WinSta = UserGetCurrentWinSta();
*hHook = UserAllocHandle(&WinSta->HandleTable, mem, USER_HOOK_PROC);
if (!*hHook){
ExFreePool(mem);
@@ -419,7 +419,7 @@
PHOOK FASTCALL HookGet(HHOOK hHook)
{
PWINSTATION_OBJECT WinSta;
- WinSta = PsGetWin32Thread()->Desktop->WindowStation;
+ WinSta = UserGetCurrentWinSta();
return (PHOOK)UserGetObject(&WinSta->HandleTable, hHook,
USER_HOOK_PROC );
}
_____
Modified: branches/hardons1stbranch/win32k/ntuser/hotkey.c
--- branches/hardons1stbranch/win32k/ntuser/hotkey.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/hotkey.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -113,8 +113,11 @@
PHOT_KEY_ITEM HotKeyItem;
PWINSTATION_OBJECT WinStaObject = NULL;
- if(Window->OwnerThread && Window->OwnerThread->ThreadsProcess)
+ if(Window->OwnerThread && Window->OwnerThread->ThreadsProcess){
+
+ //FIXME: hmm...this winsta path look fishy
WinStaObject =
Window->OwnerThread->Tcb.Win32Thread->Desktop->WindowStation;
+ }
if(!WinStaObject)
return;
_____
Modified: branches/hardons1stbranch/win32k/ntuser/keyboard.c
--- branches/hardons1stbranch/win32k/ntuser/keyboard.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/keyboard.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -665,8 +665,7 @@
IntLockQueueState;
/* All messages have to contain the cursor point. */
- UserGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation,
- &NewMsg.pt);
+ UserGetCursorLocation(UserGetCurrentWinSta(), &NewMsg.pt);
UState = ToUnicodeInner(lpMsg->wParam, HIWORD(lpMsg->lParam) & 0xff,
QueueKeyStateTable, wp, 2, 0,
_____
Modified: branches/hardons1stbranch/win32k/ntuser/message.c
--- branches/hardons1stbranch/win32k/ntuser/message.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/message.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -1272,8 +1272,7 @@
SetLastWin32Error(ERROR_INVALID_PARAMETER);
return(FALSE);
}
- UserGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation,
- &KernelModeMsg.pt);
+ UserGetCursorLocation(UserGetCurrentWinSta(), &KernelModeMsg.pt);
KeQueryTickCount(&LargeTickCount);
KernelModeMsg.time = LargeTickCount.u.LowPart;
MsqPostMessage(Window->MessageQueue, &KernelModeMsg,
_____
Modified: branches/hardons1stbranch/win32k/ntuser/msgqueue.c
--- branches/hardons1stbranch/win32k/ntuser/msgqueue.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/msgqueue.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -234,9 +234,9 @@
{
return FALSE;
}
- //FIXME: UserGetCurrentWinSta()
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
+
CurInfo = UserGetSysCursorInfo(WinStaObject);
Res = (Msg->hwnd == (HWND)CurInfo->LastClkWnd) &&
((Msg->time - CurInfo->LastBtnDown) < CurInfo->DblClickSpeed);
_____
Modified: branches/hardons1stbranch/win32k/ntuser/useratom.c
--- branches/hardons1stbranch/win32k/ntuser/useratom.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/useratom.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -41,7 +41,7 @@
SetLastNtError(Status);
return (RTL_ATOM)0;
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Status = RtlAddAtomToAtomTable(WinStaObject->AtomTable,
AtomName, &Atom);
if (!NT_SUCCESS(Status))
@@ -64,7 +64,7 @@
SetLastNtError(Status);
return 0;
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Status = RtlQueryAtomInAtomTable(WinStaObject->AtomTable,
nAtom, NULL, NULL, lpBuffer, &Size);
if (Size < nSize)
_____
Modified: branches/hardons1stbranch/win32k/ntuser/window.c
--- branches/hardons1stbranch/win32k/ntuser/window.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/window.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -107,6 +107,7 @@
{
PWINSTATION_OBJECT WinSta;
WinSta = UserGetCurrentWinSta();
+ ASSERT(WinSta);
return (PWINDOW_OBJECT)UserGetObject(&WinSta->HandleTable, hWnd,
USER_WINDOW );
}
@@ -1497,7 +1498,7 @@
DPRINT("Thread is not attached to a desktop! Cannot create
window!\n");
return (HWND)0;
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
ObReferenceObjectByPointer(WinStaObject, KernelMode,
ExWindowStationObjectType, 0);
/* Create the window object. */
@@ -2461,7 +2462,7 @@
goto Cleanup;
}
- WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
+ WinStaObject = UserGetCurrentWinSta();
Status = RtlLookupAtomInAtomTable(
WinStaObject->AtomTable,
_____
Modified: branches/hardons1stbranch/win32k/ntuser/winsta.c
--- branches/hardons1stbranch/win32k/ntuser/winsta.c 2005-07-27
12:01:05 UTC (rev 16798)
+++ branches/hardons1stbranch/win32k/ntuser/winsta.c 2005-07-27
13:18:11 UTC (rev 16799)
@@ -976,21 +976,38 @@
inline PWINSTATION_OBJECT FASTCALL UserGetCurrentWinSta()
{
+ //ASSERT(PsGetWin32Thread());
+ //ASSERT(PsGetWin32Thread()->Desktop);
+ //ASSERT(PsGetWin32Thread()->Desktop->WindowStation);
+
+#if 0
+ if (!PsGetWin32Thread()->Desktop)
+ {
+ DPRINT1("FIXME: PsGetWin32Thread()->Desktop is NULL!!!\n");
+ return NULL;
+ }
+
return PsGetWin32Thread()->Desktop->WindowStation;
+#endif
+
+ return IntGetWinStaObj();
}
+
PWINSTATION_OBJECT FASTCALL
IntGetWinStaObj(VOID)
{
PWINSTATION_OBJECT WinStaObj;
/*
- * just a temporary hack, this will be gone soon
+ * just a temporary hack, this will be gone soon. I HOPE SO!
[truncated at 1000 lines; 25 more skipped]