mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 18:01:07 +00:00
indent with astyle v1.15.3: --style=ansi -c -s3 -S --convert-tabs
svn path=/trunk/; revision=17730
This commit is contained in:
parent
5d8ed11b10
commit
7c6de62098
|
@ -322,10 +322,14 @@ co_IntTranslateAccelerator(
|
|||
DPRINT("NtUserGetKeyState(VK_MENU) = 0x%x\n",
|
||||
UserGetKeyState(VK_MENU));
|
||||
|
||||
if (UserGetKeyState(VK_SHIFT) & 0x8000) mask |= FSHIFT;
|
||||
if (UserGetKeyState(VK_CONTROL) & 0x8000) mask |= FCONTROL;
|
||||
if (UserGetKeyState(VK_MENU) & 0x8000) mask |= FALT;
|
||||
if (mask == (fVirt & (FSHIFT | FCONTROL | FALT))) goto found;
|
||||
if (UserGetKeyState(VK_SHIFT) & 0x8000)
|
||||
mask |= FSHIFT;
|
||||
if (UserGetKeyState(VK_CONTROL) & 0x8000)
|
||||
mask |= FCONTROL;
|
||||
if (UserGetKeyState(VK_MENU) & 0x8000)
|
||||
mask |= FALT;
|
||||
if (mask == (fVirt & (FSHIFT | FCONTROL | FALT)))
|
||||
goto found;
|
||||
DPRINT("but incorrect SHIFT/CTRL/ALT-state\n");
|
||||
}
|
||||
else
|
||||
|
@ -346,7 +350,7 @@ co_IntTranslateAccelerator(
|
|||
|
||||
return FALSE;
|
||||
|
||||
found:
|
||||
found:
|
||||
if (message == WM_KEYUP || message == WM_SYSKEYUP)
|
||||
mesg = 1;
|
||||
else if (IntGetCaptureWindow())
|
||||
|
@ -424,6 +428,7 @@ co_IntTranslateAccelerator(
|
|||
DPRINT1("menu search not implemented");
|
||||
mesg = WM_COMMAND;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (mesg == WM_COMMAND)
|
||||
|
@ -540,10 +545,13 @@ NtUserTranslateAccelerator(
|
|||
|
||||
CLEANUP:
|
||||
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Accel) UserDerefObjectCo(Accel);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
if (Accel)
|
||||
UserDerefObjectCo(Accel);
|
||||
|
||||
if (WindowStation) ObDereferenceObject(WindowStation);
|
||||
if (WindowStation)
|
||||
ObDereferenceObject(WindowStation);
|
||||
|
||||
DPRINT("NtUserTranslateAccelerator(hWnd %x, Table %x, Message %p) = %i end\n",
|
||||
hWnd, hAccel, Message, 0);
|
||||
|
|
|
@ -44,7 +44,8 @@ typedef struct _INT_CALLBACK_HEADER
|
|||
{
|
||||
/* list entry in the W32THREAD structure */
|
||||
LIST_ENTRY ListEntry;
|
||||
} INT_CALLBACK_HEADER, *PINT_CALLBACK_HEADER;
|
||||
}
|
||||
INT_CALLBACK_HEADER, *PINT_CALLBACK_HEADER;
|
||||
|
||||
PVOID FASTCALL
|
||||
IntCbAllocateMemory(ULONG Size)
|
||||
|
|
|
@ -318,7 +318,8 @@ IntCreateClass(
|
|||
ClassObject->Global = Global;
|
||||
ClassObject->hIconSm = lpwcx->hIconSm;
|
||||
ClassObject->Atom = Atom;
|
||||
if (wpExtra == NULL) {
|
||||
if (wpExtra == NULL)
|
||||
{
|
||||
if (Flags & REGISTERCLASS_ANSI)
|
||||
{
|
||||
ClassObject->lpfnWndProcA = lpwcx->lpfnWndProc;
|
||||
|
@ -329,7 +330,9 @@ IntCreateClass(
|
|||
ClassObject->lpfnWndProcW = lpwcx->lpfnWndProc;
|
||||
ClassObject->lpfnWndProcA = (WNDPROC)IntAddWndProcHandle(lpwcx->lpfnWndProc,TRUE);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Flags & REGISTERCLASS_ANSI)
|
||||
{
|
||||
ClassObject->lpfnWndProcA = lpwcx->lpfnWndProc;
|
||||
|
|
|
@ -114,12 +114,12 @@ NtUserEmptyClipboard(VOID)
|
|||
{
|
||||
CHECK_LOCK
|
||||
|
||||
// if (!hCBData)
|
||||
// return FALSE;
|
||||
// if (!hCBData)
|
||||
// return FALSE;
|
||||
|
||||
// FIXME!
|
||||
// GlobalUnlock(hCBData);
|
||||
// GlobalFree(hCBData);
|
||||
// FIXME!
|
||||
// GlobalUnlock(hCBData);
|
||||
// GlobalFree(hCBData);
|
||||
hCBData = NULL;
|
||||
uCBFormat = 0;
|
||||
ClipboardWindow = tempClipboardWindow;
|
||||
|
@ -251,7 +251,8 @@ NtUserIsClipboardFormatAvailable(UINT format)
|
|||
{
|
||||
//UNIMPLEMENTED
|
||||
|
||||
if (format != 1 && format != 13) {
|
||||
if (format != 1 && format != 13)
|
||||
{
|
||||
DbgPrint("Clipboard Format unavailable (%d)\n", format);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -269,11 +270,12 @@ NtUserIsClipboardFormatAvailable(UINT format)
|
|||
HANDLE STDCALL
|
||||
NtUserSetClipboardData(UINT uFormat, HANDLE hMem, DWORD Unknown2)
|
||||
{
|
||||
// LPVOID pMem;
|
||||
// LPVOID pMem;
|
||||
CHECK_LOCK
|
||||
|
||||
|
||||
if (uFormat != 1 && uFormat != 13) {
|
||||
if (uFormat != 1 && uFormat != 13)
|
||||
{
|
||||
DbgPrint("Clipboard unsupported format (%d)\n", uFormat);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -378,7 +378,7 @@ IntFindExistingCurIconObject(PWINSTATION_OBJECT WinStaObject, HMODULE hModule,
|
|||
Object = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT, ListEntry);
|
||||
CurrentEntry = CurrentEntry->Flink;
|
||||
|
||||
// if(NT_SUCCESS(ObmReferenceObjectByPointer(Object, otCursorIcon))) //<- huh????
|
||||
// if(NT_SUCCESS(ObmReferenceObjectByPointer(Object, otCursorIcon))) //<- huh????
|
||||
ObmReferenceObject( Object);
|
||||
{
|
||||
if((Object->hModule == hModule) && (Object->hRsrc == hRsrc))
|
||||
|
@ -541,7 +541,7 @@ IntCleanupCurIcons(struct _EPROCESS *Process, PW32PROCESS Win32Process)
|
|||
|
||||
|
||||
ObmReferenceObject(Object);
|
||||
// if(NT_SUCCESS(ObmReferenceObjectByPointer(Object, otCursorIcon)))
|
||||
// if(NT_SUCCESS(ObmReferenceObjectByPointer(Object, otCursorIcon)))
|
||||
{
|
||||
ProcessEntry = Object->ProcessList.Flink;
|
||||
while (ProcessEntry != &Object->ProcessList)
|
||||
|
@ -760,7 +760,7 @@ NtUserGetCursorIconSize(
|
|||
|
||||
BITMAPOBJ_UnlockBitmap(bmp);
|
||||
|
||||
done:
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
RETURN( Ret);
|
||||
|
@ -813,6 +813,7 @@ NtUserGetCursorInfo(
|
|||
UserEnterExclusive();
|
||||
|
||||
#if 1
|
||||
|
||||
HDC hDC;
|
||||
|
||||
/* FIXME - get the screen dc from the window station or desktop */
|
||||
|
@ -968,13 +969,13 @@ NtUserDestroyCursorIcon(
|
|||
ObDereferenceObject(WinStaObject);
|
||||
RETURN(FALSE);
|
||||
}
|
||||
// Status = ObmReferenceObjectByHandle(gHandleTable, Handle, otCursorIcon, (PVOID*)&Object);
|
||||
// if(!NT_SUCCESS(Status))
|
||||
// {
|
||||
// ObDereferenceObject(WinStaObject);
|
||||
// SetLastNtError(Status);
|
||||
// RETURN( FALSE);
|
||||
// }
|
||||
// Status = ObmReferenceObjectByHandle(gHandleTable, Handle, otCursorIcon, (PVOID*)&Object);
|
||||
// if(!NT_SUCCESS(Status))
|
||||
// {
|
||||
// ObDereferenceObject(WinStaObject);
|
||||
// SetLastNtError(Status);
|
||||
// RETURN( FALSE);
|
||||
// }
|
||||
|
||||
if(IntDestroyCurIconObject(WinStaObject, Object, FALSE))
|
||||
{
|
||||
|
@ -1203,7 +1204,7 @@ NtUserSetCursorIconContents(
|
|||
|
||||
Ret = TRUE;
|
||||
|
||||
done:
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
RETURN( Ret);
|
||||
|
@ -1291,7 +1292,7 @@ NtUserSetCursorIconData(
|
|||
Ret = TRUE;
|
||||
}
|
||||
|
||||
done:
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
RETURN( Ret);
|
||||
|
@ -1351,9 +1352,11 @@ NtUserDrawIconEx(
|
|||
HBITMAP hbmOff = (HBITMAP)0;
|
||||
HGDIOBJ hOldOffBrush = 0, hOldOffBmp = 0, hOldMem;
|
||||
BOOL Ret = FALSE;
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
|
||||
INT nStretchMode;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
DECLARE_RETURN(BOOL);
|
||||
|
||||
DPRINT("Enter NtUserDrawIconEx\n");
|
||||
|
@ -1431,32 +1434,39 @@ NtUserDrawIconEx(
|
|||
if(!DoFlickerFree)
|
||||
hdcOff = hdc;
|
||||
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
|
||||
nStretchMode = NtGdiSetStretchBltMode(hdcOff, STRETCH_DELETESCANS);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
oldFg = NtGdiSetTextColor(hdcOff, RGB(0, 0, 0));
|
||||
oldBg = NtGdiSetBkColor(hdcOff, RGB(255, 255, 255));
|
||||
|
||||
if(diFlags & DI_MASK)
|
||||
{
|
||||
hOldMem = NtGdiSelectObject(hdcMem, hbmMask);
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
|
||||
NtGdiStretchBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, 0, IconSize.cx, IconSize.cy,
|
||||
((diFlags & DI_IMAGE) ? SRCAND : SRCCOPY));
|
||||
#else
|
||||
#else
|
||||
|
||||
NtGdiBitBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, 0, ((diFlags & DI_IMAGE) ? SRCAND : SRCCOPY));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if(!hbmColor && (bmpMask.bmHeight == 2 * bmpMask.bmWidth) && (diFlags & DI_IMAGE))
|
||||
{
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
NtGdiStretchBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, IconSize.cy, IconSize.cx, IconSize.cy, SRCINVERT);
|
||||
#else
|
||||
#else
|
||||
|
||||
NtGdiBitBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, IconSize.cy, SRCINVERT);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
diFlags &= ~DI_IMAGE;
|
||||
}
|
||||
NtGdiSelectObject(hdcMem, hOldMem);
|
||||
|
@ -1465,15 +1475,18 @@ NtUserDrawIconEx(
|
|||
if(diFlags & DI_IMAGE)
|
||||
{
|
||||
hOldMem = NtGdiSelectObject(hdcMem, (hbmColor ? hbmColor : hbmMask));
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
|
||||
NtGdiStretchBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
IconSize.cx, IconSize.cy, ((diFlags & DI_MASK) ? SRCINVERT : SRCCOPY));
|
||||
#else
|
||||
#else
|
||||
|
||||
NtGdiBitBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
((diFlags & DI_MASK) ? SRCINVERT : SRCCOPY));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
NtGdiSelectObject(hdcMem, hOldMem);
|
||||
}
|
||||
|
||||
|
@ -1482,13 +1495,14 @@ NtUserDrawIconEx(
|
|||
|
||||
NtGdiSetTextColor(hdcOff, oldFg);
|
||||
NtGdiSetBkColor(hdcOff, oldBg);
|
||||
#if CANSTRETCHBLT
|
||||
#if CANSTRETCHBLT
|
||||
|
||||
SetStretchBltMode(hdcOff, nStretchMode);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Ret = TRUE;
|
||||
|
||||
cleanup:
|
||||
cleanup:
|
||||
if(DoFlickerFree)
|
||||
{
|
||||
|
||||
|
@ -1500,7 +1514,7 @@ NtUserDrawIconEx(
|
|||
if(hdcMem)
|
||||
NtGdiDeleteDC(hdcMem);
|
||||
|
||||
done:
|
||||
done:
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
RETURN( Ret);
|
||||
|
|
|
@ -46,7 +46,7 @@ BOOL g_PaintDesktopVersion = FALSE;
|
|||
/* INITALIZATION FUNCTIONS ****************************************************/
|
||||
|
||||
static GENERIC_MAPPING IntDesktopMapping =
|
||||
{
|
||||
{
|
||||
STANDARD_RIGHTS_READ | DESKTOP_ENUMERATE | DESKTOP_READOBJECTS,
|
||||
STANDARD_RIGHTS_WRITE | DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_HOOKCONTROL |
|
||||
DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD | DESKTOP_WRITEOBJECTS,
|
||||
|
@ -54,7 +54,7 @@ static GENERIC_MAPPING IntDesktopMapping =
|
|||
STANDARD_RIGHTS_REQUIRED | DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE |
|
||||
DESKTOP_HOOKCONTROL | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD |
|
||||
DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS
|
||||
};
|
||||
};
|
||||
|
||||
NTSTATUS FASTCALL
|
||||
InitDesktopImpl(VOID)
|
||||
|
@ -473,7 +473,8 @@ PWINDOW_OBJECT FASTCALL UserGetDesktopWindow(VOID)
|
|||
|
||||
//temp hack
|
||||
DeskWnd = IntGetWindowObject(pdo->DesktopWindow);
|
||||
if (DeskWnd) IntReleaseWindowObject(DeskWnd);
|
||||
if (DeskWnd)
|
||||
IntReleaseWindowObject(DeskWnd);
|
||||
return DeskWnd;
|
||||
}
|
||||
|
||||
|
@ -552,6 +553,7 @@ IntHideDesktop(PDESKTOP_OBJECT Desktop)
|
|||
|
||||
return NotifyCsrss(&Request, &Reply);
|
||||
#else
|
||||
|
||||
PWINDOW_OBJECT DesktopWindow;
|
||||
|
||||
DesktopWindow = IntGetWindowObject(Desktop->DesktopWindow);
|
||||
|
@ -579,7 +581,8 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
|||
|
||||
static UINT MsgType = 0;
|
||||
|
||||
if (!MsgType) {
|
||||
if (!MsgType)
|
||||
{
|
||||
|
||||
/* Too bad, this doesn't work.*/
|
||||
#if 0
|
||||
|
@ -587,6 +590,7 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
|||
RtlInitUnicodeString(&Str, L"SHELLHOOK");
|
||||
MsgType = UserRegisterWindowMessage(&Str);
|
||||
#endif
|
||||
|
||||
MsgType = IntAddAtom(L"SHELLHOOK");
|
||||
|
||||
DPRINT("MsgType = %x\n", MsgType);
|
||||
|
@ -594,7 +598,8 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
|||
DPRINT1("LastError: %x\n", GetLastNtError());
|
||||
}
|
||||
|
||||
if (!Desktop) {
|
||||
if (!Desktop)
|
||||
{
|
||||
DPRINT1("IntShellHookNotify: No desktop!\n");
|
||||
return;
|
||||
}
|
||||
|
@ -605,7 +610,8 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
|||
|
||||
KeAcquireSpinLock(&Desktop->Lock, &OldLevel);
|
||||
Entry = Desktop->ShellHookWindows.Flink;
|
||||
while (Entry != &Desktop->ShellHookWindows) {
|
||||
while (Entry != &Desktop->ShellHookWindows)
|
||||
{
|
||||
Current = CONTAINING_RECORD(Entry, SHELL_HOOK_WINDOW, ListEntry);
|
||||
KeReleaseSpinLock(&Desktop->Lock, OldLevel);
|
||||
|
||||
|
@ -624,7 +630,8 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
|||
KeAcquireSpinLock(&Desktop->Lock, &OldLevel);
|
||||
Entry2 = Desktop->ShellHookWindows.Flink;
|
||||
while (Entry2 != Entry &&
|
||||
Entry2 != &Desktop->ShellHookWindows) {
|
||||
Entry2 != &Desktop->ShellHookWindows)
|
||||
{
|
||||
Entry2 = Entry2->Flink;
|
||||
}
|
||||
|
||||
|
@ -690,9 +697,11 @@ BOOL IntDeRegisterShellHookWindow(HWND hWnd)
|
|||
KeAcquireSpinLock(&Desktop->Lock, &OldLevel);
|
||||
|
||||
Entry = Desktop->ShellHookWindows.Flink;
|
||||
while (Entry != &Desktop->ShellHookWindows) {
|
||||
while (Entry != &Desktop->ShellHookWindows)
|
||||
{
|
||||
Current = CONTAINING_RECORD(Entry, SHELL_HOOK_WINDOW, ListEntry);
|
||||
if (Current->hWnd == hWnd) {
|
||||
if (Current->hWnd == hWnd)
|
||||
{
|
||||
RemoveEntryList(Entry);
|
||||
KeReleaseSpinLock(&Desktop->Lock, OldLevel);
|
||||
ExFreePool(Entry);
|
||||
|
@ -1235,7 +1244,8 @@ NtUserPaintDesktop(HDC hDC)
|
|||
}
|
||||
}
|
||||
|
||||
if (doPatBlt) {
|
||||
if (doPatBlt)
|
||||
{
|
||||
PreviousBrush = NtGdiSelectObject(hDC, DesktopBrush);
|
||||
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
||||
NtGdiSelectObject(hDC, PreviousBrush);
|
||||
|
@ -1245,7 +1255,8 @@ NtUserPaintDesktop(HDC hDC)
|
|||
* Display system version on the desktop background
|
||||
*/
|
||||
|
||||
if (g_PaintDesktopVersion) {
|
||||
if (g_PaintDesktopVersion)
|
||||
{
|
||||
static WCHAR s_wszVersion[256] = {0};
|
||||
RECT rect;
|
||||
|
||||
|
@ -1254,8 +1265,10 @@ NtUserPaintDesktop(HDC hDC)
|
|||
else
|
||||
len = GetSystemVersionString(s_wszVersion);
|
||||
|
||||
if (len) {
|
||||
if (!UserSystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0)) {
|
||||
if (len)
|
||||
{
|
||||
if (!UserSystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0))
|
||||
{
|
||||
rect.right = UserGetSystemMetrics(SM_CXSCREEN);
|
||||
rect.bottom = UserGetSystemMetrics(SM_CYSCREEN);
|
||||
}
|
||||
|
|
|
@ -282,7 +282,8 @@ co_IntSetActiveWindow(PWINDOW_OBJECT Window OPTIONAL)
|
|||
HWND hWndPrev;
|
||||
HWND hWnd = 0;
|
||||
|
||||
if (Window) ASSERT_REFS_CO(Window);
|
||||
if (Window)
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
ASSERT(ThreadQueue != 0);
|
||||
|
@ -310,8 +311,8 @@ co_IntSetActiveWindow(PWINDOW_OBJECT Window OPTIONAL)
|
|||
co_IntSendDeactivateMessages(hWndPrev, hWnd);
|
||||
co_IntSendActivateMessages(hWndPrev, hWnd, FALSE);
|
||||
|
||||
/* FIXME */
|
||||
/* return IntIsWindow(hWndPrev) ? hWndPrev : 0;*/
|
||||
/* FIXME */
|
||||
/* return IntIsWindow(hWndPrev) ? hWndPrev : 0;*/
|
||||
return hWndPrev;
|
||||
}
|
||||
|
||||
|
|
|
@ -422,12 +422,12 @@ NtUserCallNextHookEx(
|
|||
// otHookProc, (PVOID *) &HookObj);
|
||||
ObDereferenceObject(WinStaObj);
|
||||
|
||||
// if (! NT_SUCCESS(Status))
|
||||
// {
|
||||
// DPRINT1("Invalid handle passed to NtUserCallNextHookEx\n");
|
||||
// SetLastNtError(Status);
|
||||
// RETURN( 0);
|
||||
// }
|
||||
// if (! NT_SUCCESS(Status))
|
||||
// {
|
||||
// DPRINT1("Invalid handle passed to NtUserCallNextHookEx\n");
|
||||
// SetLastNtError(Status);
|
||||
// RETURN( 0);
|
||||
// }
|
||||
|
||||
if (!(HookObj = IntGetHookObject(Hook)))
|
||||
{
|
||||
|
@ -569,6 +569,7 @@ NtUserSetWindowsHookEx(
|
|||
#else
|
||||
DPRINT1("Not implemented: HookId %d Global %s\n", HookId, Global ? "TRUE" : "FALSE");
|
||||
#endif
|
||||
|
||||
if (NULL != Thread)
|
||||
{
|
||||
ObDereferenceObject(Thread);
|
||||
|
@ -713,13 +714,13 @@ NtUserUnhookWindowsHookEx(
|
|||
RETURN( FALSE);
|
||||
}
|
||||
|
||||
// Status = ObmReferenceObjectByHandle(gHandleTable, Hook,
|
||||
// otHookProc, (PVOID *) &HookObj);
|
||||
// Status = ObmReferenceObjectByHandle(gHandleTable, Hook,
|
||||
// otHookProc, (PVOID *) &HookObj);
|
||||
if (!(HookObj = IntGetHookObject(Hook)))
|
||||
{
|
||||
DPRINT1("Invalid handle passed to NtUserUnhookWindowsHookEx\n");
|
||||
ObDereferenceObject(WinStaObj);
|
||||
// SetLastNtError(Status);
|
||||
// SetLastNtError(Status);
|
||||
RETURN( FALSE);
|
||||
}
|
||||
ASSERT(Hook == HookObj->Self);
|
||||
|
|
|
@ -544,7 +544,8 @@ KeyboardThreadMain(PVOID StartContext)
|
|||
if (Status == STATUS_ALERTED && !InputThreadsRunning)
|
||||
goto KeyboardEscape;
|
||||
|
||||
} while ((!(NextKeyInput.Flags & KEY_BREAK)) &&
|
||||
}
|
||||
while ((!(NextKeyInput.Flags & KEY_BREAK)) &&
|
||||
NextKeyInput.MakeCode == KeyInput.MakeCode);
|
||||
/* ^ Ignore repeats, they'll be KEY_MAKE and the same
|
||||
* code. I'm not caring about the counting, not sure
|
||||
|
@ -656,7 +657,8 @@ KeyboardThreadMain(PVOID StartContext)
|
|||
* (ctrl-alt-del secure attention sequence). Not sure if it
|
||||
* can happen though.
|
||||
*/
|
||||
if (!FocusQueue) continue;
|
||||
if (!FocusQueue)
|
||||
continue;
|
||||
|
||||
msg.lParam = lParam;
|
||||
msg.hwnd = FocusQueue->FocusWindow;
|
||||
|
@ -876,9 +878,17 @@ IntSwapMouseButton(PWINSTATION_OBJECT WinStaObject, BOOL Swap)
|
|||
BOOL FASTCALL
|
||||
IntMouseInput(MOUSEINPUT *mi)
|
||||
{
|
||||
const UINT SwapBtnMsg[2][2] = {{WM_LBUTTONDOWN, WM_RBUTTONDOWN},
|
||||
{WM_LBUTTONUP, WM_RBUTTONUP}};
|
||||
const WPARAM SwapBtn[2] = {MK_LBUTTON, MK_RBUTTON};
|
||||
const UINT SwapBtnMsg[2][2] =
|
||||
{
|
||||
{
|
||||
WM_LBUTTONDOWN, WM_RBUTTONDOWN
|
||||
},
|
||||
{WM_LBUTTONUP, WM_RBUTTONUP}
|
||||
};
|
||||
const WPARAM SwapBtn[2] =
|
||||
{
|
||||
MK_LBUTTON, MK_RBUTTON
|
||||
};
|
||||
POINT MousePos, OrgPos;
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
PWINSTATION_OBJECT WinSta;
|
||||
|
@ -891,6 +901,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
|||
PWINDOW_OBJECT DesktopWindow;
|
||||
|
||||
#if 1
|
||||
|
||||
HDC hDC;
|
||||
|
||||
/* FIXME - get the screen dc from the window station or desktop */
|
||||
|
@ -902,6 +913,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
|||
|
||||
ASSERT(mi);
|
||||
#if 0
|
||||
|
||||
WinSta = PsGetWin32Process()->WindowStation;
|
||||
#else
|
||||
/* FIXME - ugly hack but as long as we're using this dumb callback from the
|
||||
|
@ -909,6 +921,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
|||
process */
|
||||
WinSta = InputWindowStation;
|
||||
#endif
|
||||
|
||||
ASSERT(WinSta);
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinSta);
|
||||
|
@ -1182,10 +1195,12 @@ NtUserSendInput(
|
|||
case INPUT_HARDWARE:
|
||||
break;
|
||||
#ifndef NDEBUG
|
||||
|
||||
default:
|
||||
DPRINT1("SendInput(): Invalid input type: 0x%x\n", SafeInput.type);
|
||||
break;
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,8 @@ BYTE QueueKeyStateTable[256];
|
|||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/* Initialization -- Right now, just zero the key state and init the lock */
|
||||
NTSTATUS FASTCALL InitKeyboardImpl(VOID) {
|
||||
NTSTATUS FASTCALL InitKeyboardImpl(VOID)
|
||||
{
|
||||
ExInitializeFastMutex(&QueueStateLock);
|
||||
RtlZeroMemory(&QueueKeyStateTable,0x100);
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -73,19 +74,26 @@ NTSTATUS FASTCALL InitKeyboardImpl(VOID) {
|
|||
|
||||
/*** Shift state code was out of hand, sorry. --- arty */
|
||||
|
||||
static UINT DontDistinguishShifts( UINT ret ) {
|
||||
if( ret == VK_LSHIFT || ret == VK_RSHIFT ) ret = VK_LSHIFT;
|
||||
if( ret == VK_LCONTROL || ret == VK_RCONTROL ) ret = VK_LCONTROL;
|
||||
if( ret == VK_LMENU || ret == VK_RMENU ) ret = VK_LMENU;
|
||||
static UINT DontDistinguishShifts( UINT ret )
|
||||
{
|
||||
if( ret == VK_LSHIFT || ret == VK_RSHIFT )
|
||||
ret = VK_LSHIFT;
|
||||
if( ret == VK_LCONTROL || ret == VK_RCONTROL )
|
||||
ret = VK_LCONTROL;
|
||||
if( ret == VK_LMENU || ret == VK_RMENU )
|
||||
ret = VK_LMENU;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static VOID STDCALL SetKeyState(DWORD key, DWORD vk, DWORD ext, BOOL down) {
|
||||
static VOID STDCALL SetKeyState(DWORD key, DWORD vk, DWORD ext, BOOL down)
|
||||
{
|
||||
ASSERT(vk <= 0xff);
|
||||
|
||||
/* Special handling for toggles like numpad and caps lock */
|
||||
if (vk == VK_CAPITAL || vk == VK_NUMLOCK) {
|
||||
if (down) QueueKeyStateTable[vk] ^= KS_LOCK_BIT;
|
||||
if (vk == VK_CAPITAL || vk == VK_NUMLOCK)
|
||||
{
|
||||
if (down)
|
||||
QueueKeyStateTable[vk] ^= KS_LOCK_BIT;
|
||||
}
|
||||
|
||||
if (ext && vk == VK_LSHIFT)
|
||||
|
@ -100,47 +108,64 @@ static VOID STDCALL SetKeyState(DWORD key, DWORD vk, DWORD ext, BOOL down) {
|
|||
else
|
||||
QueueKeyStateTable[vk] &= ~KS_DOWN_MASK;
|
||||
|
||||
if (vk == VK_LSHIFT || vk == VK_RSHIFT) {
|
||||
if (vk == VK_LSHIFT || vk == VK_RSHIFT)
|
||||
{
|
||||
if ((QueueKeyStateTable[VK_LSHIFT] & KS_DOWN_BIT) ||
|
||||
(QueueKeyStateTable[VK_RSHIFT] & KS_DOWN_BIT)) {
|
||||
(QueueKeyStateTable[VK_RSHIFT] & KS_DOWN_BIT))
|
||||
{
|
||||
QueueKeyStateTable[VK_SHIFT] |= KS_DOWN_BIT;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
QueueKeyStateTable[VK_SHIFT] &= ~KS_DOWN_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
if (vk == VK_LCONTROL || vk == VK_RCONTROL) {
|
||||
if (vk == VK_LCONTROL || vk == VK_RCONTROL)
|
||||
{
|
||||
if ((QueueKeyStateTable[VK_LCONTROL] & KS_DOWN_BIT) ||
|
||||
(QueueKeyStateTable[VK_RCONTROL] & KS_DOWN_BIT)) {
|
||||
(QueueKeyStateTable[VK_RCONTROL] & KS_DOWN_BIT))
|
||||
{
|
||||
QueueKeyStateTable[VK_CONTROL] |= KS_DOWN_BIT;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
QueueKeyStateTable[VK_CONTROL] &= ~KS_DOWN_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
if (vk == VK_LMENU || vk == VK_RMENU) {
|
||||
if (vk == VK_LMENU || vk == VK_RMENU)
|
||||
{
|
||||
if ((QueueKeyStateTable[VK_LMENU] & KS_DOWN_BIT) ||
|
||||
(QueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT)) {
|
||||
(QueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT))
|
||||
{
|
||||
QueueKeyStateTable[VK_MENU] |= KS_DOWN_BIT;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
QueueKeyStateTable[VK_MENU] &= ~KS_DOWN_MASK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VOID DumpKeyState( PBYTE KeyState ) {
|
||||
VOID DumpKeyState( PBYTE KeyState )
|
||||
{
|
||||
int i;
|
||||
|
||||
DbgPrint( "KeyState { " );
|
||||
for( i = 0; i < 0x100; i++ ) {
|
||||
if( KeyState[i] ) DbgPrint( "%02x(%02x) ", i, KeyState[i] );
|
||||
for( i = 0; i < 0x100; i++ )
|
||||
{
|
||||
if( KeyState[i] )
|
||||
DbgPrint( "%02x(%02x) ", i, KeyState[i] );
|
||||
}
|
||||
DbgPrint( "};\n" );
|
||||
}
|
||||
|
||||
static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
|
||||
int FakeModLeft, int FakeModRight ) {
|
||||
if( !KeyState || !pkKT ) return 0;
|
||||
int FakeModLeft, int FakeModRight )
|
||||
{
|
||||
if( !KeyState || !pkKT )
|
||||
return 0;
|
||||
|
||||
/* Search special codes first */
|
||||
if( FakeModLeft && KeyState[FakeModLeft] )
|
||||
|
@ -155,7 +180,8 @@ static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
|
|||
* want to count on the shift bit not moving, because it can be specified
|
||||
* in the layout */
|
||||
|
||||
static DWORD FASTCALL GetShiftBit( PKBDTABLES pkKT, DWORD Vk ) {
|
||||
static DWORD FASTCALL GetShiftBit( PKBDTABLES pkKT, DWORD Vk )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; pkKT->pCharModifiers->pVkToBit[i].Vk; i++ )
|
||||
|
@ -165,10 +191,12 @@ static DWORD FASTCALL GetShiftBit( PKBDTABLES pkKT, DWORD Vk ) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState ) {
|
||||
static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState )
|
||||
{
|
||||
DWORD ModBits = 0;
|
||||
|
||||
if( !KeyState ) return 0;
|
||||
if( !KeyState )
|
||||
return 0;
|
||||
|
||||
/* DumpKeyState( KeyState ); */
|
||||
|
||||
|
@ -241,7 +269,8 @@ static BOOL TryToTranslateChar(WORD wVirtKey,
|
|||
[ModBits ^
|
||||
((CapsState & CAPITAL_BIT) ? vkPtr->Attributes : 0)];
|
||||
|
||||
if( CapsMod > keyLayout->pVkToWcharTable[nMod].nModifications ) {
|
||||
if( CapsMod > keyLayout->pVkToWcharTable[nMod].nModifications )
|
||||
{
|
||||
DWORD MaxBit = 1;
|
||||
while( MaxBit <
|
||||
keyLayout->pVkToWcharTable[nMod].nModifications )
|
||||
|
@ -292,7 +321,8 @@ ToUnicodeInner(UINT wVirtKey,
|
|||
BOOL bDead;
|
||||
BOOL bLigature;
|
||||
|
||||
if( !pkKT ) return 0;
|
||||
if( !pkKT )
|
||||
return 0;
|
||||
|
||||
if( TryToTranslateChar( wVirtKey,
|
||||
ModBits( pkKT, lpKeyState ),
|
||||
|
@ -307,7 +337,8 @@ ToUnicodeInner(UINT wVirtKey,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if( cchBuff > 0 ) pwszBuff[0] = wcTranslatedChar;
|
||||
if( cchBuff > 0 )
|
||||
pwszBuff[0] = wcTranslatedChar;
|
||||
|
||||
return bDead ? -1 : 1;
|
||||
}
|
||||
|
@ -321,7 +352,8 @@ DWORD FASTCALL UserGetKeyState(DWORD key)
|
|||
DWORD ret = 0;
|
||||
|
||||
IntLockQueueState;
|
||||
if( key < 0x100 ) {
|
||||
if( key < 0x100 )
|
||||
{
|
||||
ret = ((DWORD)(QueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) |
|
||||
(QueueKeyStateTable[key] & KS_LOCK_BIT);
|
||||
}
|
||||
|
@ -355,7 +387,8 @@ DWORD FASTCALL UserGetAsyncKeyState(DWORD key)
|
|||
DWORD ret = 0;
|
||||
|
||||
IntLockQueueState;
|
||||
if( key < 0x100 ) {
|
||||
if( key < 0x100 )
|
||||
{
|
||||
ret = ((DWORD)(QueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) |
|
||||
(QueueKeyStateTable[key] & KS_LOCK_BIT);
|
||||
}
|
||||
|
@ -391,7 +424,8 @@ int STDCALL ToUnicodeEx( UINT wVirtKey,
|
|||
LPWSTR pwszBuff,
|
||||
int cchBuff,
|
||||
UINT wFlags,
|
||||
HKL dwhkl ) {
|
||||
HKL dwhkl )
|
||||
{
|
||||
int ToUnicodeResult = 0;
|
||||
|
||||
if (0 == (lpKeyState[wVirtKey] & KS_DOWN_BIT))
|
||||
|
@ -420,7 +454,8 @@ int STDCALL ToUnicode( UINT wVirtKey,
|
|||
PBYTE lpKeyState,
|
||||
LPWSTR pwszBuff,
|
||||
int cchBuff,
|
||||
UINT wFlags ) {
|
||||
UINT wFlags )
|
||||
{
|
||||
return ToUnicodeEx( wVirtKey,
|
||||
wScanCode,
|
||||
QueueKeyStateTable,
|
||||
|
@ -443,13 +478,15 @@ int STDCALL ToUnicode( UINT wVirtKey,
|
|||
|
||||
NTSTATUS NTAPI AppendUnicodeString(PUNICODE_STRING ResultFirst,
|
||||
PUNICODE_STRING Second,
|
||||
BOOL Deallocate) {
|
||||
BOOL Deallocate)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PWSTR new_string =
|
||||
ExAllocatePoolWithTag(PagedPool,
|
||||
(ResultFirst->Length + Second->Length + sizeof(WCHAR)),
|
||||
TAG_STRING);
|
||||
if( !new_string ) {
|
||||
if( !new_string )
|
||||
{
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
memcpy( new_string, ResultFirst->Buffer,
|
||||
|
@ -457,7 +494,8 @@ NTSTATUS NTAPI AppendUnicodeString(PUNICODE_STRING ResultFirst,
|
|||
memcpy( new_string + ResultFirst->Length / sizeof(WCHAR),
|
||||
Second->Buffer,
|
||||
Second->Length );
|
||||
if( Deallocate ) RtlFreeUnicodeString(ResultFirst);
|
||||
if( Deallocate )
|
||||
RtlFreeUnicodeString(ResultFirst);
|
||||
ResultFirst->Length += Second->Length;
|
||||
ResultFirst->MaximumLength = ResultFirst->Length;
|
||||
new_string[ResultFirst->Length / sizeof(WCHAR)] = 0;
|
||||
|
@ -479,7 +517,8 @@ NTSTATUS NTAPI AppendUnicodeString(PUNICODE_STRING ResultFirst,
|
|||
|
||||
static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
||||
PUNICODE_STRING ValueName,
|
||||
PUNICODE_STRING ReturnedValue ) {
|
||||
PUNICODE_STRING ReturnedValue )
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE KeyHandle;
|
||||
OBJECT_ATTRIBUTES KeyAttributes;
|
||||
|
@ -491,7 +530,8 @@ static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
|||
InitializeObjectAttributes(&KeyAttributes, KeyName, OBJ_CASE_INSENSITIVE,
|
||||
NULL, NULL);
|
||||
Status = ZwOpenKey(&KeyHandle, KEY_ALL_ACCESS, &KeyAttributes);
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -500,7 +540,8 @@ static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
|||
0,
|
||||
&ResLength);
|
||||
|
||||
if( Status != STATUS_BUFFER_TOO_SMALL ) {
|
||||
if( Status != STATUS_BUFFER_TOO_SMALL )
|
||||
{
|
||||
NtClose(KeyHandle);
|
||||
return Status;
|
||||
}
|
||||
|
@ -510,7 +551,8 @@ static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
|||
ExAllocatePoolWithTag(PagedPool, ResLength, TAG_STRING);
|
||||
Length = ResLength;
|
||||
|
||||
if( !KeyValuePartialInfo ) {
|
||||
if( !KeyValuePartialInfo )
|
||||
{
|
||||
NtClose(KeyHandle);
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -520,7 +562,8 @@ static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
|||
Length,
|
||||
&ResLength);
|
||||
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
NtClose(KeyHandle);
|
||||
ExFreePool(KeyValuePartialInfo);
|
||||
return Status;
|
||||
|
@ -560,9 +603,10 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
|||
ANSI_STRING kbdProcedureName;
|
||||
KbdLayerDescriptor layerDescGetFn;
|
||||
|
||||
#define XX_STATUS(x) if (!NT_SUCCESS(Status = (x))) continue;
|
||||
#define XX_STATUS(x) if (!NT_SUCCESS(Status = (x))) continue;
|
||||
|
||||
do {
|
||||
do
|
||||
{
|
||||
Status = ZwQueryDefaultLocale(FALSE, &LocaleId);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
|
@ -586,10 +630,13 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
|||
Status = ReadRegistryValue(&LayoutKeyName,&LayoutValueName,&LayoutFile);
|
||||
RtlInitUnicodeString(&FullLayoutPath,SYSTEMROOT_DIR);
|
||||
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
DPRINT1("Got default locale but not layout file. (%08lx)\n",
|
||||
Status);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT("Read registry and got %wZ\n", &LayoutFile);
|
||||
|
||||
RtlFreeUnicodeString(&LayoutKeyName);
|
||||
|
@ -605,7 +652,8 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
|||
FullLayoutPath.Length + sizeof(WCHAR),
|
||||
TAG_STRING);
|
||||
|
||||
if( !KeyboardLayoutWSTR ) {
|
||||
if( !KeyboardLayoutWSTR )
|
||||
{
|
||||
DPRINT1("Couldn't allocate a string for the keyboard layout name.\n");
|
||||
RtlFreeUnicodeString(&FullLayoutPath);
|
||||
return;
|
||||
|
@ -643,19 +691,23 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
|||
0,
|
||||
(PVOID*)&layerDescGetFn);
|
||||
|
||||
if( layerDescGetFn ) {
|
||||
if( layerDescGetFn )
|
||||
{
|
||||
*pkKeyboardLayout = layerDescGetFn();
|
||||
}
|
||||
} while (FALSE);
|
||||
}
|
||||
while (FALSE);
|
||||
|
||||
if( !*pkKeyboardLayout ) {
|
||||
if( !*pkKeyboardLayout )
|
||||
{
|
||||
DPRINT1("Failed to load the keyboard layout.\n");
|
||||
}
|
||||
|
||||
#undef XX_STATUS
|
||||
}
|
||||
|
||||
PKBDTABLES W32kGetDefaultKeyLayout() {
|
||||
PKBDTABLES W32kGetDefaultKeyLayout()
|
||||
{
|
||||
PKBDTABLES pkKeyboardLayout = 0;
|
||||
InitKbdLayout( (PVOID) &pkKeyboardLayout );
|
||||
return pkKeyboardLayout;
|
||||
|
@ -757,7 +809,8 @@ NtUserGetKeyboardState(
|
|||
BOOL Result = TRUE;
|
||||
|
||||
IntLockQueueState;
|
||||
if (lpKeyState) {
|
||||
if (lpKeyState)
|
||||
{
|
||||
if(!NT_SUCCESS(MmCopyToCaller(lpKeyState, QueueKeyStateTable, 256)))
|
||||
Result = FALSE;
|
||||
}
|
||||
|
@ -773,7 +826,8 @@ NtUserSetKeyboardState(
|
|||
BOOL Result = TRUE;
|
||||
|
||||
IntLockQueueState;
|
||||
if (lpKeyState) {
|
||||
if (lpKeyState)
|
||||
{
|
||||
if(! NT_SUCCESS(MmCopyFromCaller(QueueKeyStateTable, lpKeyState, 256)))
|
||||
Result = FALSE;
|
||||
}
|
||||
|
@ -782,37 +836,52 @@ NtUserSetKeyboardState(
|
|||
return Result;
|
||||
}
|
||||
|
||||
static UINT VkToScan( UINT Code, BOOL ExtCode, PKBDTABLES pkKT ) {
|
||||
static UINT VkToScan( UINT Code, BOOL ExtCode, PKBDTABLES pkKT )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < pkKT->bMaxVSCtoVK; i++ ) {
|
||||
if( pkKT->pusVSCtoVK[i] == Code ) { return i; }
|
||||
for( i = 0; i < pkKT->bMaxVSCtoVK; i++ )
|
||||
{
|
||||
if( pkKT->pusVSCtoVK[i] == Code )
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT ) {
|
||||
if( !pkKT ) {
|
||||
UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT )
|
||||
{
|
||||
if( !pkKT )
|
||||
{
|
||||
DPRINT("ScanToVk: No layout\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( ExtKey ) {
|
||||
if( ExtKey )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; pkKT->pVSCtoVK_E0[i].Vsc; i++ ) {
|
||||
for( i = 0; pkKT->pVSCtoVK_E0[i].Vsc; i++ )
|
||||
{
|
||||
if( pkKT->pVSCtoVK_E0[i].Vsc == Code )
|
||||
return pkKT->pVSCtoVK_E0[i].Vk & 0xff;
|
||||
}
|
||||
for( i = 0; pkKT->pVSCtoVK_E1[i].Vsc; i++ ) {
|
||||
for( i = 0; pkKT->pVSCtoVK_E1[i].Vsc; i++ )
|
||||
{
|
||||
if( pkKT->pVSCtoVK_E1[i].Vsc == Code )
|
||||
return pkKT->pVSCtoVK_E1[i].Vk & 0xff;
|
||||
}
|
||||
|
||||
return 0;
|
||||
} else {
|
||||
if( Code >= pkKT->bMaxVSCtoVK ) { return 0; }
|
||||
}
|
||||
else
|
||||
{
|
||||
if( Code >= pkKT->bMaxVSCtoVK )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return pkKT->pusVSCtoVK[Code] & 0xff;
|
||||
}
|
||||
}
|
||||
|
@ -836,14 +905,19 @@ UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT ) {
|
|||
* @implemented
|
||||
*/
|
||||
|
||||
static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
||||
static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout )
|
||||
{
|
||||
UINT ret = 0;
|
||||
|
||||
switch( Type ) {
|
||||
switch( Type )
|
||||
{
|
||||
case 0:
|
||||
if( Code == VK_RSHIFT ) Code = VK_LSHIFT;
|
||||
if( Code == VK_RMENU ) Code = VK_LMENU;
|
||||
if( Code == VK_RCONTROL ) Code = VK_LCONTROL;
|
||||
if( Code == VK_RSHIFT )
|
||||
Code = VK_LSHIFT;
|
||||
if( Code == VK_RMENU )
|
||||
Code = VK_LMENU;
|
||||
if( Code == VK_RCONTROL )
|
||||
Code = VK_LCONTROL;
|
||||
ret = VkToScan( Code, FALSE, keyLayout );
|
||||
break;
|
||||
|
||||
|
@ -853,13 +927,15 @@ static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
|||
(IntMapVirtualKeyEx( Code, 3, keyLayout ) );
|
||||
break;
|
||||
|
||||
case 2: {
|
||||
case 2:
|
||||
{
|
||||
WCHAR wp[2];
|
||||
|
||||
ret = VkToScan( Code, FALSE, keyLayout );
|
||||
ToUnicodeInner( Code, ret, 0, wp, 2, 0, keyLayout );
|
||||
ret = wp[0];
|
||||
} break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
|
||||
|
@ -872,11 +948,13 @@ static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
|||
|
||||
UINT
|
||||
STDCALL
|
||||
NtUserMapVirtualKeyEx( UINT Code, UINT Type, DWORD keyboardId, HKL dwhkl ) {
|
||||
NtUserMapVirtualKeyEx( UINT Code, UINT Type, DWORD keyboardId, HKL dwhkl )
|
||||
{
|
||||
PKBDTABLES keyLayout = PsGetWin32Thread() ?
|
||||
PsGetWin32Thread()->KeyboardLayout : 0;
|
||||
|
||||
if( !keyLayout ) return 0;
|
||||
if( !keyLayout )
|
||||
return 0;
|
||||
|
||||
return IntMapVirtualKeyEx( Code, Type, keyLayout );
|
||||
}
|
||||
|
@ -891,7 +969,8 @@ NtUserToUnicodeEx(
|
|||
LPWSTR pwszBuff,
|
||||
int cchBuff,
|
||||
UINT wFlags,
|
||||
HKL dwhkl ) {
|
||||
HKL dwhkl )
|
||||
{
|
||||
BYTE KeyStateBuf[0x100];
|
||||
PWCHAR OutPwszBuff = 0;
|
||||
int ret = 0;
|
||||
|
@ -899,12 +978,14 @@ NtUserToUnicodeEx(
|
|||
|
||||
if( !NT_SUCCESS(MmCopyFromCaller(KeyStateBuf,
|
||||
lpKeyState,
|
||||
sizeof(KeyStateBuf))) ) {
|
||||
sizeof(KeyStateBuf))) )
|
||||
{
|
||||
DPRINT1( "Couldn't copy key state from caller.\n" );
|
||||
return 0;
|
||||
}
|
||||
OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool,sizeof(WCHAR) * cchBuff, TAG_STRING);
|
||||
if( !OutPwszBuff ) {
|
||||
if( !OutPwszBuff )
|
||||
{
|
||||
DPRINT1( "ExAllocatePool(%d) failed\n", sizeof(WCHAR) * cchBuff);
|
||||
return 0;
|
||||
}
|
||||
|
@ -924,14 +1005,17 @@ NtUserToUnicodeEx(
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int W32kSimpleToupper( int ch ) {
|
||||
if( ch >= 'a' && ch <= 'z' ) ch = ch - 'a' + 'A';
|
||||
static int W32kSimpleToupper( int ch )
|
||||
{
|
||||
if( ch >= 'a' && ch <= 'z' )
|
||||
ch = ch - 'a' + 'A';
|
||||
return ch;
|
||||
}
|
||||
|
||||
DWORD
|
||||
STDCALL
|
||||
NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
||||
NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize )
|
||||
{
|
||||
int i;
|
||||
DWORD ret = 0;
|
||||
UINT CareVk = 0;
|
||||
|
@ -942,9 +1026,11 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
|||
PsGetWin32Thread() ?
|
||||
PsGetWin32Thread()->KeyboardLayout : 0;
|
||||
|
||||
if( !keyLayout || nSize < 1 ) return 0;
|
||||
if( !keyLayout || nSize < 1 )
|
||||
return 0;
|
||||
|
||||
if( lParam & (1<<25) ) {
|
||||
if( lParam & (1<<25) )
|
||||
{
|
||||
CareVk = VkCode = ScanToVk( ScanCode, ExtKey, keyLayout );
|
||||
if( VkCode == VK_LSHIFT || VkCode == VK_RSHIFT )
|
||||
VkCode = VK_LSHIFT;
|
||||
|
@ -952,7 +1038,9 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
|||
VkCode = VK_LCONTROL;
|
||||
if( VkCode == VK_LMENU || VkCode == VK_RMENU )
|
||||
VkCode = VK_LMENU;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
VkCode = ScanToVk( ScanCode, ExtKey, keyLayout );
|
||||
}
|
||||
|
||||
|
@ -966,8 +1054,10 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
|||
else
|
||||
KeyNames = keyLayout->pKeyNames;
|
||||
|
||||
for( i = 0; KeyNames[i].pwsz; i++ ) {
|
||||
if( KeyNames[i].vsc == ScanCode ) {
|
||||
for( i = 0; KeyNames[i].pwsz; i++ )
|
||||
{
|
||||
if( KeyNames[i].vsc == ScanCode )
|
||||
{
|
||||
UINT StrLen = wcslen(KeyNames[i].pwsz);
|
||||
UINT StrMax = StrLen > (nSize - 1) ? (nSize - 1) : StrLen;
|
||||
WCHAR null_wc = 0;
|
||||
|
@ -976,14 +1066,16 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
|||
StrMax * sizeof(WCHAR) ) ) &&
|
||||
NT_SUCCESS( MmCopyToCaller( lpString + StrMax,
|
||||
&null_wc,
|
||||
sizeof( WCHAR ) ) ) ) {
|
||||
sizeof( WCHAR ) ) ) )
|
||||
{
|
||||
ret = StrMax;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( ret == 0 ) {
|
||||
if( ret == 0 )
|
||||
{
|
||||
WCHAR UCName[2];
|
||||
|
||||
UCName[0] = W32kSimpleToupper(IntMapVirtualKeyEx( VkCode, 2, keyLayout ));
|
||||
|
@ -1114,9 +1206,12 @@ W32kKeyProcessMessage(LPMSG Msg,
|
|||
}
|
||||
|
||||
/* We need to unset SYSKEYDOWN if the ALT key is an ALT+Gr */
|
||||
if( QueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT ) {
|
||||
if( Msg->message == WM_SYSKEYDOWN ) Msg->message = WM_KEYDOWN;
|
||||
else Msg->message = WM_KEYUP;
|
||||
if( QueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT )
|
||||
{
|
||||
if( Msg->message == WM_SYSKEYDOWN )
|
||||
Msg->message = WM_KEYDOWN;
|
||||
else
|
||||
Msg->message = WM_KEYUP;
|
||||
}
|
||||
|
||||
IntUnLockQueueState;
|
||||
|
@ -1167,7 +1262,8 @@ UserGetKeyboardLayout(
|
|||
W32Thread = Thread->Tcb.Win32Thread;
|
||||
}
|
||||
layout = W32Thread->KeyboardLayout;
|
||||
if(!layout) return 0;
|
||||
if(!layout)
|
||||
return 0;
|
||||
return (HKL)layout;
|
||||
}
|
||||
|
||||
|
@ -1236,7 +1332,8 @@ NtUserVkKeyScanEx(
|
|||
int nMod;
|
||||
DWORD CapsMod = 0, CapsState = 0;
|
||||
|
||||
if(!KeyboardLayout) return -1;
|
||||
if(!KeyboardLayout)
|
||||
return -1;
|
||||
KeyLayout = (PKBDTABLES) KeyboardLayout;
|
||||
|
||||
for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++)
|
||||
|
|
|
@ -139,23 +139,39 @@ DumpMenuItemList(PMENU_ITEM MenuItem)
|
|||
else
|
||||
DbgPrint(" %d. NO TEXT dwTypeData==%d\n", ++cnt, (DWORD)MenuItem->Text.Buffer);
|
||||
DbgPrint(" fType=");
|
||||
if(MFT_BITMAP & MenuItem->fType) DbgPrint("MFT_BITMAP ");
|
||||
if(MFT_MENUBARBREAK & MenuItem->fType) DbgPrint("MFT_MENUBARBREAK ");
|
||||
if(MFT_MENUBREAK & MenuItem->fType) DbgPrint("MFT_MENUBREAK ");
|
||||
if(MFT_OWNERDRAW & MenuItem->fType) DbgPrint("MFT_OWNERDRAW ");
|
||||
if(MFT_RADIOCHECK & MenuItem->fType) DbgPrint("MFT_RADIOCHECK ");
|
||||
if(MFT_RIGHTJUSTIFY & MenuItem->fType) DbgPrint("MFT_RIGHTJUSTIFY ");
|
||||
if(MFT_SEPARATOR & MenuItem->fType) DbgPrint("MFT_SEPARATOR ");
|
||||
if(MFT_STRING & MenuItem->fType) DbgPrint("MFT_STRING ");
|
||||
if(MFT_BITMAP & MenuItem->fType)
|
||||
DbgPrint("MFT_BITMAP ");
|
||||
if(MFT_MENUBARBREAK & MenuItem->fType)
|
||||
DbgPrint("MFT_MENUBARBREAK ");
|
||||
if(MFT_MENUBREAK & MenuItem->fType)
|
||||
DbgPrint("MFT_MENUBREAK ");
|
||||
if(MFT_OWNERDRAW & MenuItem->fType)
|
||||
DbgPrint("MFT_OWNERDRAW ");
|
||||
if(MFT_RADIOCHECK & MenuItem->fType)
|
||||
DbgPrint("MFT_RADIOCHECK ");
|
||||
if(MFT_RIGHTJUSTIFY & MenuItem->fType)
|
||||
DbgPrint("MFT_RIGHTJUSTIFY ");
|
||||
if(MFT_SEPARATOR & MenuItem->fType)
|
||||
DbgPrint("MFT_SEPARATOR ");
|
||||
if(MFT_STRING & MenuItem->fType)
|
||||
DbgPrint("MFT_STRING ");
|
||||
DbgPrint("\n fState=");
|
||||
if(MFS_DISABLED & MenuItem->fState) DbgPrint("MFS_DISABLED ");
|
||||
else DbgPrint("MFS_ENABLED ");
|
||||
if(MFS_CHECKED & MenuItem->fState) DbgPrint("MFS_CHECKED ");
|
||||
else DbgPrint("MFS_UNCHECKED ");
|
||||
if(MFS_HILITE & MenuItem->fState) DbgPrint("MFS_HILITE ");
|
||||
else DbgPrint("MFS_UNHILITE ");
|
||||
if(MFS_DEFAULT & MenuItem->fState) DbgPrint("MFS_DEFAULT ");
|
||||
if(MFS_GRAYED & MenuItem->fState) DbgPrint("MFS_GRAYED ");
|
||||
if(MFS_DISABLED & MenuItem->fState)
|
||||
DbgPrint("MFS_DISABLED ");
|
||||
else
|
||||
DbgPrint("MFS_ENABLED ");
|
||||
if(MFS_CHECKED & MenuItem->fState)
|
||||
DbgPrint("MFS_CHECKED ");
|
||||
else
|
||||
DbgPrint("MFS_UNCHECKED ");
|
||||
if(MFS_HILITE & MenuItem->fState)
|
||||
DbgPrint("MFS_HILITE ");
|
||||
else
|
||||
DbgPrint("MFS_UNHILITE ");
|
||||
if(MFS_DEFAULT & MenuItem->fState)
|
||||
DbgPrint("MFS_DEFAULT ");
|
||||
if(MFS_GRAYED & MenuItem->fState)
|
||||
DbgPrint("MFS_GRAYED ");
|
||||
DbgPrint("\n wId=%d\n", MenuItem->wID);
|
||||
MenuItem = MenuItem->Next;
|
||||
}
|
||||
|
@ -529,13 +545,17 @@ IntGetMenuItemByFlag(PMENU_OBJECT Menu, UINT uSearchBy, UINT fFlag,
|
|||
}
|
||||
if(CurItem)
|
||||
{
|
||||
if(MenuItem) *MenuItem = CurItem;
|
||||
if(PrevMenuItem) *PrevMenuItem = PrevItem;
|
||||
if(MenuItem)
|
||||
*MenuItem = CurItem;
|
||||
if(PrevMenuItem)
|
||||
*PrevMenuItem = PrevItem;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(MenuItem) *MenuItem = NULL;
|
||||
if(PrevMenuItem) *PrevMenuItem = NULL; /* ? */
|
||||
if(MenuItem)
|
||||
*MenuItem = NULL;
|
||||
if(PrevMenuItem)
|
||||
*PrevMenuItem = NULL; /* ? */
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -548,8 +568,10 @@ IntGetMenuItemByFlag(PMENU_OBJECT Menu, UINT uSearchBy, UINT fFlag,
|
|||
{
|
||||
if(CurItem->wID == uSearchBy)
|
||||
{
|
||||
if(MenuItem) *MenuItem = CurItem;
|
||||
if(PrevMenuItem) *PrevMenuItem = PrevItem;
|
||||
if(MenuItem)
|
||||
*MenuItem = CurItem;
|
||||
if(PrevMenuItem)
|
||||
*PrevMenuItem = PrevItem;
|
||||
return p;
|
||||
}
|
||||
else if (0 != (CurItem->fType & MF_POPUP))
|
||||
|
@ -1700,12 +1722,15 @@ NtUserGetMenuItemRect(
|
|||
|
||||
if(!hWnd)
|
||||
{
|
||||
if(!UserMenuInfo(Menu, &mi, FALSE)) RETURN( FALSE);
|
||||
if(mi.Wnd == 0) RETURN( FALSE);
|
||||
if(!UserMenuInfo(Menu, &mi, FALSE))
|
||||
RETURN( FALSE);
|
||||
if(mi.Wnd == 0)
|
||||
RETURN( FALSE);
|
||||
referenceHwnd = mi.Wnd;
|
||||
}
|
||||
|
||||
if (lprcItem == NULL) RETURN( FALSE);
|
||||
if (lprcItem == NULL)
|
||||
RETURN( FALSE);
|
||||
*lpRect = mii.Rect;
|
||||
lpPoints = (LPPOINT)lpRect;
|
||||
|
||||
|
@ -2184,7 +2209,7 @@ NtUserThunkedMenuItemInfo(
|
|||
/*
|
||||
* @implemented
|
||||
*/
|
||||
/* NOTE: unused function */
|
||||
/* NOTE: unused function */
|
||||
BOOL STDCALL
|
||||
NtUserTrackPopupMenuEx(
|
||||
HMENU hMenu,
|
||||
|
|
|
@ -39,7 +39,8 @@ typedef struct
|
|||
UINT uFlags;
|
||||
UINT uTimeout;
|
||||
ULONG_PTR Result;
|
||||
} DOSENDMESSAGE, *PDOSENDMESSAGE;
|
||||
}
|
||||
DOSENDMESSAGE, *PDOSENDMESSAGE;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -63,11 +64,12 @@ IntCleanupMessageImpl(VOID)
|
|||
#define MMS_FLAG_WRITE 0x02
|
||||
#define MMS_FLAG_READWRITE (MMS_FLAG_READ | MMS_FLAG_WRITE)
|
||||
typedef struct tagMSGMEMORY
|
||||
{
|
||||
{
|
||||
UINT Message;
|
||||
UINT Size;
|
||||
INT Flags;
|
||||
} MSGMEMORY, *PMSGMEMORY;
|
||||
}
|
||||
MSGMEMORY, *PMSGMEMORY;
|
||||
|
||||
static MSGMEMORY MsgMemory[] =
|
||||
{
|
||||
|
@ -88,7 +90,7 @@ static MSGMEMORY MsgMemory[] =
|
|||
|
||||
static PMSGMEMORY FASTCALL
|
||||
FindMsgMemory(UINT Msg)
|
||||
{
|
||||
{
|
||||
PMSGMEMORY MsgMemoryEntry;
|
||||
|
||||
/* See if this message type is present in the table */
|
||||
|
@ -301,7 +303,8 @@ NtUserCallMsgFilter(
|
|||
DPRINT("Enter NtUserCallMsgFilter\n");
|
||||
UserEnterExclusive();
|
||||
|
||||
if (co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)msg)) RETURN( TRUE);
|
||||
if (co_HOOK_CallHooks( WH_SYSMSGFILTER, code, 0, (LPARAM)msg))
|
||||
RETURN( TRUE);
|
||||
RETURN( co_HOOK_CallHooks( WH_MSGFILTER, code, 0, (LPARAM)msg));
|
||||
|
||||
CLEANUP:
|
||||
|
@ -667,7 +670,7 @@ co_IntPeekMessage(PUSER_MESSAGE Msg,
|
|||
/* FIXME: The only flag we process is PM_REMOVE - processing of others must still be implemented */
|
||||
RemoveMessages = RemoveMsg & PM_REMOVE;
|
||||
|
||||
CheckMessages:
|
||||
CheckMessages:
|
||||
|
||||
Present = FALSE;
|
||||
|
||||
|
@ -675,7 +678,8 @@ co_IntPeekMessage(PUSER_MESSAGE Msg,
|
|||
ThreadQueue->LastMsgRead = LargeTickCount.u.LowPart;
|
||||
|
||||
/* Dispatch sent messages here. */
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue));
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue))
|
||||
;
|
||||
|
||||
/* Now look for a quit message. */
|
||||
|
||||
|
@ -732,7 +736,8 @@ co_IntPeekMessage(PUSER_MESSAGE Msg,
|
|||
}
|
||||
|
||||
/* Check for sent messages again. */
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue));
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue))
|
||||
;
|
||||
|
||||
/* Check for paint messages. */
|
||||
if (IntGetPaintMessage(Wnd, MsgFilterMin, MsgFilterMax, PsGetWin32Thread(), &Msg->Msg, RemoveMessages))
|
||||
|
@ -752,7 +757,7 @@ co_IntPeekMessage(PUSER_MESSAGE Msg,
|
|||
|
||||
if(Present)
|
||||
{
|
||||
MessageFound:
|
||||
MessageFound:
|
||||
|
||||
if(RemoveMessages)
|
||||
{
|
||||
|
@ -1270,7 +1275,8 @@ NtUserPostThreadMessage(DWORD idThread,
|
|||
|
||||
Status = PsLookupThreadByThreadId((HANDLE)idThread,&peThread);
|
||||
|
||||
if( Status == STATUS_SUCCESS ) {
|
||||
if( Status == STATUS_SUCCESS )
|
||||
{
|
||||
pThread = peThread->Tcb.Win32Thread;
|
||||
if( !pThread || !pThread->MessageQueue )
|
||||
{
|
||||
|
@ -1295,7 +1301,9 @@ NtUserPostThreadMessage(DWORD idThread,
|
|||
QS_POSTMESSAGE);
|
||||
ObDereferenceObject( peThread );
|
||||
RETURN( TRUE);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLastNtError( Status );
|
||||
RETURN( FALSE);
|
||||
}
|
||||
|
|
|
@ -20,15 +20,19 @@ PW32PROCESS LogonProcess = NULL;
|
|||
VOID W32kRegisterPrimitiveMessageQueue(VOID)
|
||||
{
|
||||
extern PUSER_MESSAGE_QUEUE pmPrimitiveMessageQueue;
|
||||
if( !pmPrimitiveMessageQueue ) {
|
||||
if( !pmPrimitiveMessageQueue )
|
||||
{
|
||||
PW32THREAD pThread;
|
||||
pThread = PsGetWin32Thread();
|
||||
if( pThread && pThread->MessageQueue ) {
|
||||
if( pThread && pThread->MessageQueue )
|
||||
{
|
||||
pmPrimitiveMessageQueue = pThread->MessageQueue;
|
||||
IntReferenceMessageQueue(pmPrimitiveMessageQueue);
|
||||
DPRINT( "Installed primitive input queue.\n" );
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT1( "Alert! Someone is trying to steal the primitive queue.\n" );
|
||||
}
|
||||
}
|
||||
|
@ -497,7 +501,8 @@ NtUserCallTwoParam(
|
|||
}
|
||||
Window->Flags &= ~WIN_NEEDS_SHOW_OWNEDPOPUP;
|
||||
}
|
||||
else Window->Flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
|
||||
else
|
||||
Window->Flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
|
||||
DPRINT1("ROS_SHOWWINDOW ---> 0x%x\n",Window->Flags);
|
||||
IntReleaseWindowObject(Window);
|
||||
RETURN( TRUE);
|
||||
|
@ -511,7 +516,8 @@ NtUserCallTwoParam(
|
|||
PWINDOW_OBJECT Window = UserGetWindowObject((HWND) Param1);
|
||||
BOOL ret;
|
||||
|
||||
if (!Window) RETURN(FALSE);
|
||||
if (!Window)
|
||||
RETURN(FALSE);
|
||||
|
||||
UserRefObjectCo(Window);
|
||||
ret = co_UserValidateRgn(Window, (HRGN) Param2);
|
||||
|
@ -594,7 +600,8 @@ NtUserCallTwoParam(
|
|||
{
|
||||
INT *Elements;
|
||||
COLORREF *Colors;
|
||||
} ChangeSysColors;
|
||||
}
|
||||
ChangeSysColors;
|
||||
|
||||
/* FIXME - we should make use of SEH here... */
|
||||
|
||||
|
@ -729,9 +736,11 @@ NtUserCallHwndLock(
|
|||
PMENU_OBJECT MenuObject;
|
||||
DPRINT("HWNDLOCK_ROUTINE_DRAWMENUBAR\n");
|
||||
Ret = FALSE;
|
||||
if (!((Window->Style & (WS_CHILD | WS_POPUP)) != WS_CHILD)) break;
|
||||
if (!((Window->Style & (WS_CHILD | WS_POPUP)) != WS_CHILD))
|
||||
break;
|
||||
MenuObject = IntGetMenuObject((HMENU) Window->IDMenu);
|
||||
if(MenuObject == NULL) break;
|
||||
if(MenuObject == NULL)
|
||||
break;
|
||||
MenuObject->MenuInfo.WndOwner = hWnd;
|
||||
MenuObject->MenuInfo.Height = 0;
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
|
|
@ -213,7 +213,8 @@ IntAttachMonitor(IN GDIDEVICE *pGdiDevice,
|
|||
{
|
||||
PMONITOR_OBJECT p;
|
||||
DPRINT("Additional monitor is beeing attached\n");
|
||||
for (p = MonitorList; p->Next != NULL; p = p->Next);
|
||||
for (p = MonitorList; p->Next != NULL; p = p->Next)
|
||||
;
|
||||
{
|
||||
p->Next = Monitor;
|
||||
}
|
||||
|
@ -519,7 +520,8 @@ NtUserEnumDisplayMonitors(
|
|||
if (regionType == NULLREGION)
|
||||
return 0;
|
||||
if (regionType == COMPLEXREGION)
|
||||
{ /* TODO: warning */ }
|
||||
{ /* TODO: warning */
|
||||
}
|
||||
|
||||
/* if hDC and pRect are given the area of interest is pRect with
|
||||
coordinate origin at the DC position */
|
||||
|
|
|
@ -217,8 +217,10 @@ MsqIsDblClk(LPMSG Msg, BOOL Remove)
|
|||
|
||||
dX = CurInfo->LastBtnDownX - Msg->pt.x;
|
||||
dY = CurInfo->LastBtnDownY - Msg->pt.y;
|
||||
if(dX < 0) dX = -dX;
|
||||
if(dY < 0) dY = -dY;
|
||||
if(dX < 0)
|
||||
dX = -dX;
|
||||
if(dY < 0)
|
||||
dY = -dY;
|
||||
|
||||
Res = (dX <= CurInfo->DblClickWidth) &&
|
||||
(dY <= CurInfo->DblClickHeight);
|
||||
|
@ -681,12 +683,16 @@ co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
|
||||
FocusMessageQueue = IntGetFocusMessageQueue();
|
||||
if( !IntGetScreenDC() ) {
|
||||
if( !IntGetScreenDC() )
|
||||
{
|
||||
/* FIXME: What to do about Msg.pt here? */
|
||||
if( W32kGetPrimitiveMessageQueue() ) {
|
||||
if( W32kGetPrimitiveMessageQueue() )
|
||||
{
|
||||
MsqPostMessage(W32kGetPrimitiveMessageQueue(), &Msg, FALSE, QS_KEY);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FocusMessageQueue == NULL)
|
||||
{
|
||||
DPRINT("No focus message queue\n");
|
||||
|
@ -751,9 +757,9 @@ MsqPostHotKeyMessage(PVOID Thread, HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
ObmDereferenceObject(Window);
|
||||
ObDereferenceObject (Thread);
|
||||
|
||||
// InsertHeadList(&pThread->MessageQueue->PostedMessagesListHead,
|
||||
// &Message->ListEntry);
|
||||
// KeSetEvent(pThread->MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
|
||||
// InsertHeadList(&pThread->MessageQueue->PostedMessagesListHead,
|
||||
// &Message->ListEntry);
|
||||
// KeSetEvent(pThread->MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
|
||||
}
|
||||
|
||||
PUSER_MESSAGE FASTCALL
|
||||
|
@ -1096,7 +1102,8 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
|||
|
||||
DPRINT("MsqSendMessage (blocked) timed out\n");
|
||||
}
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue));
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue))
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1157,7 +1164,8 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
|||
DPRINT("MsqSendMessage timed out\n");
|
||||
break;
|
||||
}
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue));
|
||||
while (co_MsqDispatchOneSentMessage(ThreadQueue))
|
||||
;
|
||||
}
|
||||
while (NT_SUCCESS(WaitStatus) && STATUS_WAIT_0 != WaitStatus);
|
||||
}
|
||||
|
@ -1670,6 +1678,7 @@ MsqSetTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
|||
InsertTimer(MessageQueue, Timer);
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
DumpTimerList(MessageQueue);
|
||||
#endif /* ! defined(NDEBUG) */
|
||||
|
||||
|
@ -1771,8 +1780,10 @@ MsqGetTimerMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
|||
InsertTimer(MessageQueue, Timer);
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
DumpTimerList(MessageQueue);
|
||||
#endif /* ! defined(NDEBUG) */
|
||||
|
||||
}
|
||||
|
||||
DPRINT("Created message wnd %x msg %d wParam %u lParam %u\n", Msg->hwnd, Msg->message,
|
||||
|
|
|
@ -47,8 +47,8 @@ NTSTATUS FASTCALL InitUserImpl(VOID)
|
|||
{
|
||||
//PVOID mem;
|
||||
|
||||
// DPRINT("Enter InitUserImpl\n");
|
||||
// ExInitializeResourceLite(&UserLock);
|
||||
// DPRINT("Enter InitUserImpl\n");
|
||||
// ExInitializeResourceLite(&UserLock);
|
||||
|
||||
ExInitializeFastMutex(&UserLock);
|
||||
|
||||
|
@ -73,35 +73,35 @@ BOOL FASTCALL UserIsEntered()
|
|||
|
||||
VOID FASTCALL CleanupUser(VOID)
|
||||
{
|
||||
// ExDeleteResourceLite(&UserLock);
|
||||
// ExDeleteResourceLite(&UserLock);
|
||||
}
|
||||
|
||||
VOID FASTCALL UUserEnterShared(VOID)
|
||||
{
|
||||
// DPRINT("Enter IntLockUserShared\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// KeEnterCriticalRegion();
|
||||
// ExAcquireResourceSharedLite(&UserLock, TRUE);
|
||||
// DPRINT("Enter IntLockUserShared\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// KeEnterCriticalRegion();
|
||||
// ExAcquireResourceSharedLite(&UserLock, TRUE);
|
||||
ExAcquireFastMutex(&UserLock);
|
||||
}
|
||||
|
||||
VOID FASTCALL UUserEnterExclusive(VOID)
|
||||
{
|
||||
// DPRINT("Enter UserEnterExclusive\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// KeEnterCriticalRegion();
|
||||
// ExAcquireResourceExclusiveLite(&UserLock, TRUE);
|
||||
// DPRINT("Enter UserEnterExclusive\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// KeEnterCriticalRegion();
|
||||
// ExAcquireResourceExclusiveLite(&UserLock, TRUE);
|
||||
ExAcquireFastMutex(&UserLock);
|
||||
}
|
||||
|
||||
VOID FASTCALL UUserLeave(VOID)
|
||||
{
|
||||
// DPRINT("Enter UserLeave\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// ExReleaseResourceLite(&UserLock);
|
||||
// KeLeaveCriticalRegion();
|
||||
// DPRINT("Enter UserLeave\n");
|
||||
// KeDumpStackFrames((PULONG)__builtin_frame_address(0));
|
||||
//DPRINT("%x\n",__builtin_return_address(0));
|
||||
// ExReleaseResourceLite(&UserLock);
|
||||
// KeLeaveCriticalRegion();
|
||||
ExReleaseFastMutex(&UserLock);
|
||||
}
|
||||
|
|
|
@ -35,8 +35,10 @@ PUSER_HANDLE_ENTRY handle_to_entry(PUSER_HANDLE_TABLE ht, HANDLE handle )
|
|||
{
|
||||
unsigned short generation;
|
||||
int index = (((unsigned int)handle & 0xffff) - FIRST_USER_HANDLE) >> 1;
|
||||
if (index < 0 || index >= ht->nb_handles) return NULL;
|
||||
if (!ht->handles[index].type) return NULL;
|
||||
if (index < 0 || index >= ht->nb_handles)
|
||||
return NULL;
|
||||
if (!ht->handles[index].type)
|
||||
return NULL;
|
||||
generation = (unsigned int)handle >> 16;
|
||||
if (generation == ht->handles[index].generation || !generation || generation == 0xffff)
|
||||
return &ht->handles[index];
|
||||
|
@ -67,16 +69,19 @@ inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
|||
DPRINT1("Out of user handles!\n");
|
||||
return NULL;
|
||||
#if 0
|
||||
|
||||
struct user_handle *new_handles;
|
||||
/* grow array by 50% (but at minimum 32 entries) */
|
||||
int growth = max( 32, allocated_handles / 2 );
|
||||
int new_size = min( allocated_handles + growth, (LAST_USER_HANDLE-FIRST_USER_HANDLE+1) >> 1 );
|
||||
if (new_size <= allocated_handles) return NULL;
|
||||
if (new_size <= allocated_handles)
|
||||
return NULL;
|
||||
if (!(new_handles = realloc( handles, new_size * sizeof(*handles) )))
|
||||
return NULL;
|
||||
handles = new_handles;
|
||||
allocated_handles = new_size;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
entry = &ht->handles[ht->nb_handles++];
|
||||
|
@ -114,10 +119,12 @@ inline static void *free_user_entry(PUSER_HANDLE_TABLE ht, PUSER_HANDLE_ENTRY en
|
|||
HANDLE UserAllocHandle(PUSER_HANDLE_TABLE ht, PVOID object, USER_OBJECT_TYPE type )
|
||||
{
|
||||
PUSER_HANDLE_ENTRY entry = alloc_user_entry(ht);
|
||||
if (!entry) return 0;
|
||||
if (!entry)
|
||||
return 0;
|
||||
entry->ptr = object;
|
||||
entry->type = type;
|
||||
if (++entry->generation >= 0xffff) entry->generation = 1;
|
||||
if (++entry->generation >= 0xffff)
|
||||
entry->generation = 1;
|
||||
return entry_to_handle(ht, entry );
|
||||
}
|
||||
|
||||
|
@ -142,8 +149,10 @@ HANDLE get_user_full_handle(PUSER_HANDLE_TABLE ht, HANDLE handle )
|
|||
{
|
||||
PUSER_HANDLE_ENTRY entry;
|
||||
|
||||
if ((unsigned int)handle >> 16) return handle;
|
||||
if (!(entry = handle_to_entry(ht, handle ))) return handle;
|
||||
if ((unsigned int)handle >> 16)
|
||||
return handle;
|
||||
if (!(entry = handle_to_entry(ht, handle )))
|
||||
return handle;
|
||||
return entry_to_handle( ht, entry );
|
||||
}
|
||||
|
||||
|
@ -153,7 +162,8 @@ void *get_user_object_handle(PUSER_HANDLE_TABLE ht, HANDLE* handle, USER_OBJECT
|
|||
{
|
||||
PUSER_HANDLE_ENTRY entry;
|
||||
|
||||
if (!(entry = handle_to_entry(ht, *handle )) || entry->type != type) return NULL;
|
||||
if (!(entry = handle_to_entry(ht, *handle )) || entry->type != type)
|
||||
return NULL;
|
||||
*handle = entry_to_handle( ht, entry );
|
||||
return entry->ptr;
|
||||
}
|
||||
|
@ -177,11 +187,13 @@ PVOID UserGetNextHandle(PUSER_HANDLE_TABLE ht, HANDLE* handle, USER_OBJECT_TYPE
|
|||
{
|
||||
PUSER_HANDLE_ENTRY entry;
|
||||
|
||||
if (!*handle) entry = ht->handles;
|
||||
if (!*handle)
|
||||
entry = ht->handles;
|
||||
else
|
||||
{
|
||||
int index = (((unsigned int)*handle & 0xffff) - FIRST_USER_HANDLE) >> 1;
|
||||
if (index < 0 || index >= ht->nb_handles) return NULL;
|
||||
if (index < 0 || index >= ht->nb_handles)
|
||||
return NULL;
|
||||
entry = ht->handles + index + 1; /* start from the next one */
|
||||
}
|
||||
while (entry < ht->handles + ht->nb_handles)
|
||||
|
@ -204,11 +216,13 @@ ObmCreateObject(PUSER_HANDLE_TABLE ht, HANDLE* h,USER_OBJECT_TYPE type , ULONG s
|
|||
|
||||
HANDLE hi;
|
||||
PUSER_OBJECT_HEADER hdr = ExAllocatePool(PagedPool, size + sizeof(USER_OBJECT_HEADER));
|
||||
if (!hdr) return NULL;
|
||||
if (!hdr)
|
||||
return NULL;
|
||||
|
||||
|
||||
hi = UserAllocHandle(ht, USER_HEADER_TO_BODY(hdr), type );
|
||||
if (!hi){
|
||||
if (!hi)
|
||||
{
|
||||
ExFreePool(hdr);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -217,7 +231,8 @@ ObmCreateObject(PUSER_HANDLE_TABLE ht, HANDLE* h,USER_OBJECT_TYPE type , ULONG s
|
|||
hdr->hSelf = hi;
|
||||
hdr->RefCount++; //temp hack!
|
||||
|
||||
if (h) *h = hi;
|
||||
if (h)
|
||||
*h = hi;
|
||||
return USER_HEADER_TO_BODY(hdr);
|
||||
}
|
||||
|
||||
|
@ -226,7 +241,8 @@ ObmDeleteObject(HANDLE h, USER_OBJECT_TYPE type )
|
|||
{
|
||||
PUSER_OBJECT_HEADER hdr;
|
||||
PVOID body = UserGetObject(&gHandleTable, h, type);
|
||||
if (!body) return FALSE;
|
||||
if (!body)
|
||||
return FALSE;
|
||||
|
||||
hdr = USER_BODY_TO_HEADER(body);
|
||||
ASSERT(hdr->RefCount >= 0);
|
||||
|
@ -242,7 +258,7 @@ ObmDeleteObject(HANDLE h, USER_OBJECT_TYPE type )
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// DPRINT1("info: something not destroyed bcause refs still left, inuse %i\n",usedHandles);
|
||||
// DPRINT1("info: something not destroyed bcause refs still left, inuse %i\n",usedHandles);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -267,7 +283,7 @@ BOOL FASTCALL ObmDereferenceObject(PVOID obj)
|
|||
|
||||
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",usedHandles);
|
||||
|
||||
UserFreeHandle(&gHandleTable, hdr->hSelf);
|
||||
|
||||
|
|
|
@ -417,7 +417,8 @@ IntIsWindowDrawable(PWINDOW_OBJECT Window)
|
|||
|
||||
Wnd = Wnd->Parent;
|
||||
|
||||
} while(Wnd);
|
||||
}
|
||||
while(Wnd);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -462,14 +463,16 @@ co_UserRedrawWindow(PWINDOW_OBJECT Window, const RECT* UpdateRect, HRGN UpdateRg
|
|||
NtGdiOffsetRgn(hRgn,
|
||||
Window->ClientRect.left - Window->WindowRect.left,
|
||||
Window->ClientRect.top - Window->WindowRect.top);
|
||||
} else
|
||||
}
|
||||
else
|
||||
if (UpdateRect != NULL)
|
||||
{
|
||||
hRgn = UnsafeIntCreateRectRgnIndirect((RECT *)UpdateRect);
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
Window->ClientRect.left - Window->WindowRect.left,
|
||||
Window->ClientRect.top - Window->WindowRect.top);
|
||||
} else
|
||||
}
|
||||
else
|
||||
if ((Flags & (RDW_INVALIDATE | RDW_FRAME)) == (RDW_INVALIDATE | RDW_FRAME) ||
|
||||
(Flags & (RDW_VALIDATE | RDW_NOFRAME)) == (RDW_VALIDATE | RDW_NOFRAME))
|
||||
{
|
||||
|
@ -1309,7 +1312,8 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
|||
IntGetClientOrigin(Window, &ClientOrigin);
|
||||
for (i = 0; List[i]; i++)
|
||||
{
|
||||
if (!(Wnd = UserGetWindowObject(List[i]))) continue;
|
||||
if (!(Wnd = UserGetWindowObject(List[i])))
|
||||
continue;
|
||||
|
||||
r = Wnd->WindowRect;
|
||||
r.left -= ClientOrigin.x;
|
||||
|
@ -1352,7 +1356,8 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
|||
RETURN( Result);
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
|
||||
DPRINT("Leave NtUserScrollWindowEx, ret=%i\n",_ret_);
|
||||
UserLeave();
|
||||
|
|
|
@ -37,7 +37,8 @@ typedef struct _PROPLISTITEM
|
|||
{
|
||||
ATOM Atom;
|
||||
HANDLE Data;
|
||||
} PROPLISTITEM, *PPROPLISTITEM;
|
||||
}
|
||||
PROPLISTITEM, *PPROPLISTITEM;
|
||||
|
||||
|
||||
/* STATIC FUNCTIONS **********************************************************/
|
||||
|
|
|
@ -257,7 +257,7 @@ co_IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bR
|
|||
|
||||
LPSCROLLINFO Info;
|
||||
PSCROLLBARINFO psbi;
|
||||
/* UINT new_flags;*/
|
||||
/* UINT new_flags;*/
|
||||
BOOL bChangeParams = FALSE; /* don't show/hide scrollbar if params don't change */
|
||||
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
@ -364,7 +364,7 @@ co_IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bR
|
|||
/* Hide or disable scroll-bar */
|
||||
if (0 != (lpsi->fMask & SIF_DISABLENOSCROLL))
|
||||
{
|
||||
/* new_flags = ESB_DISABLE_BOTH;*/
|
||||
/* new_flags = ESB_DISABLE_BOTH;*/
|
||||
}
|
||||
else if ((nBar != SB_CTL) && bChangeParams)
|
||||
{
|
||||
|
@ -374,7 +374,7 @@ co_IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bR
|
|||
}
|
||||
else /* Show and enable scroll-bar */
|
||||
{
|
||||
/* new_flags = 0;*/
|
||||
/* new_flags = 0;*/
|
||||
if ((nBar != SB_CTL) && bChangeParams)
|
||||
{
|
||||
co_UserShowScrollBar(Window, nBar, TRUE);
|
||||
|
@ -388,6 +388,7 @@ co_IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bR
|
|||
*Action |= SA_SSI_REPAINT_ARROWS;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (bRedraw)
|
||||
|
@ -709,7 +710,8 @@ NtUserEnableScrollBar(
|
|||
RETURN( TRUE);
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
|
||||
DPRINT("Leave NtUserEnableScrollBar, ret=%i\n",_ret_);
|
||||
UserLeave();
|
||||
|
@ -770,7 +772,8 @@ NtUserSetScrollBarInfo(
|
|||
RETURN(TRUE);
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
|
||||
DPRINT("Leave NtUserSetScrollBarInfo, ret=%i\n",_ret_);
|
||||
UserLeave();
|
||||
|
@ -809,7 +812,8 @@ NtUserSetScrollInfo(
|
|||
RETURN(co_IntSetScrollInfo(Window, fnBar, &ScrollInfo, bRedraw));
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
|
||||
DPRINT("Leave NtUserSetScrollInfo, ret=%i\n",_ret_);
|
||||
UserLeave();
|
||||
|
|
|
@ -59,7 +59,8 @@ NtUserCallHwnd(
|
|||
DWORD Unknown0,
|
||||
DWORD Unknown1)
|
||||
{
|
||||
switch (Unknown0) {
|
||||
switch (Unknown0)
|
||||
{
|
||||
case HWND_ROUTINE_REGISTERSHELLHOOKWINDOW:
|
||||
if (IntIsWindow((HWND) Unknown1))
|
||||
return IntRegisterShellHookWindow((HWND) Unknown1);
|
||||
|
@ -170,7 +171,7 @@ NtUserDragObject(
|
|||
UINT u1,
|
||||
DWORD dw1,
|
||||
HCURSOR hc1
|
||||
)
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
|||
Ret = IDEvent;
|
||||
}
|
||||
|
||||
#if 1
|
||||
#if 1
|
||||
|
||||
/* Win NT/2k/XP */
|
||||
if (Elapse > 0x7fffffff)
|
||||
|
@ -113,7 +113,7 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
|||
Elapse = 1;
|
||||
}
|
||||
|
||||
#else
|
||||
#else
|
||||
|
||||
/* Win Server 2003 */
|
||||
if (Elapse > 0x7fffffff)
|
||||
|
@ -122,7 +122,7 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
|||
Elapse = 0x7fffffff;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Win 2k/XP */
|
||||
if (Elapse < 10)
|
||||
|
|
|
@ -474,6 +474,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
|
|||
#if 0 /* FIXME */
|
||||
UpdateVisRgn = FALSE;
|
||||
#endif
|
||||
|
||||
UpdateClipOrigin = TRUE;
|
||||
break;
|
||||
}
|
||||
|
@ -502,6 +503,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
|
|||
#if 1 /* FIXME */
|
||||
UpdateVisRgn = TRUE;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (NULL == Dce)
|
||||
|
@ -587,7 +589,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
|
|||
|
||||
DceSetDrawable(Window, Dce->hDC, Flags, UpdateClipOrigin);
|
||||
|
||||
// if (UpdateVisRgn)
|
||||
// if (UpdateVisRgn)
|
||||
{
|
||||
DceUpdateVisRgn(Dce, Window, Flags);
|
||||
}
|
||||
|
@ -618,7 +620,8 @@ NtUserGetDCEx(HWND hWnd, HANDLE ClipRegion, ULONG Flags)
|
|||
|
||||
ret = UserGetDCEx(Wnd, ClipRegion, Flags);
|
||||
|
||||
if (Wnd) IntReleaseWindowObject(Wnd);
|
||||
if (Wnd)
|
||||
IntReleaseWindowObject(Wnd);
|
||||
|
||||
RETURN(ret);
|
||||
|
||||
|
@ -741,6 +744,7 @@ DceFreeDCE(PDCE dce, BOOLEAN Force)
|
|||
ret = dce->next;
|
||||
|
||||
#if 0 /* FIXME */
|
||||
|
||||
SetDCHook(dce->hDC, NULL, 0L);
|
||||
#endif
|
||||
|
||||
|
@ -906,7 +910,7 @@ DceResetActiveDCEs(PWINDOW_OBJECT Window)
|
|||
|
||||
if (Window->hSelf != pDCE->hwndCurrent)
|
||||
{
|
||||
// IntEngWindowChanged(CurrentWindow, WOC_RGN_CLIENT);
|
||||
// IntEngWindowChanged(CurrentWindow, WOC_RGN_CLIENT);
|
||||
IntReleaseWindowObject(CurrentWindow);
|
||||
}
|
||||
}
|
||||
|
@ -1030,10 +1034,13 @@ NtUserChangeDisplaySettings(
|
|||
|
||||
/* Check arguments */
|
||||
#ifdef CDS_VIDEOPARAMETERS
|
||||
|
||||
if (dwflags != CDS_VIDEOPARAMETERS && lParam != NULL)
|
||||
#else
|
||||
|
||||
if (lParam != NULL)
|
||||
#endif
|
||||
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return DISP_CHANGE_BADPARAM;
|
||||
|
|
|
@ -85,7 +85,6 @@ VOID FASTCALL IntReleaseWindowObject(PWINDOW_OBJECT Window)
|
|||
|
||||
if (USER_BODY_TO_HEADER(Window)->RefCount == 0 && USER_BODY_TO_HEADER(Window)->destroyed)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,7 +162,8 @@ IntGetParent(PWINDOW_OBJECT Wnd)
|
|||
PWINDOW_OBJECT par;
|
||||
|
||||
par = Wnd->Parent;
|
||||
if (par) IntReferenceWindowObject(par);
|
||||
if (par)
|
||||
IntReferenceWindowObject(par);
|
||||
return par;
|
||||
//return IntGetWindowObject(hWnd);
|
||||
}
|
||||
|
@ -187,7 +187,8 @@ IntGetParentObject(PWINDOW_OBJECT Wnd)
|
|||
PWINDOW_OBJECT par;
|
||||
|
||||
par = Wnd->Parent;
|
||||
if (par) IntReferenceWindowObject(par);
|
||||
if (par)
|
||||
IntReferenceWindowObject(par);
|
||||
return par;
|
||||
}
|
||||
|
||||
|
@ -235,6 +236,7 @@ static void IntSendDestroyMsg(HWND Wnd)
|
|||
|
||||
PWINDOW_OBJECT Window, Owner, Parent;
|
||||
#if 0 /* FIXME */
|
||||
|
||||
GUITHREADINFO info;
|
||||
|
||||
if (GetGUIThreadInfo(GetCurrentThreadId(), &info))
|
||||
|
@ -247,15 +249,19 @@ static void IntSendDestroyMsg(HWND Wnd)
|
|||
#endif
|
||||
|
||||
Window = IntGetWindowObject(Wnd);
|
||||
if (Window) {
|
||||
if (Window)
|
||||
{
|
||||
Owner = IntGetOwner(Window);
|
||||
if (!Owner) {
|
||||
if (!Owner)
|
||||
{
|
||||
Parent = IntGetParent(Window);
|
||||
if (!Parent)
|
||||
co_IntShellHookNotify(HSHELL_WINDOWDESTROYED, (LPARAM) Wnd);
|
||||
else
|
||||
IntReleaseWindowObject(Parent);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
IntReleaseWindowObject(Owner);
|
||||
}
|
||||
|
||||
|
@ -275,19 +281,23 @@ static void IntSendDestroyMsg(HWND Wnd)
|
|||
* make sure that the window still exists when we come back.
|
||||
*/
|
||||
#if 0 /* FIXME */
|
||||
|
||||
if (IsWindow(Wnd))
|
||||
{
|
||||
HWND* pWndArray;
|
||||
int i;
|
||||
|
||||
if (!(pWndArray = WIN_ListChildren( hwnd ))) return;
|
||||
if (!(pWndArray = WIN_ListChildren( hwnd )))
|
||||
return;
|
||||
|
||||
/* start from the end (FIXME: is this needed?) */
|
||||
for (i = 0; pWndArray[i]; i++) ;
|
||||
for (i = 0; pWndArray[i]; i++)
|
||||
;
|
||||
|
||||
while (--i >= 0)
|
||||
{
|
||||
if (IsWindow( pWndArray[i] )) WIN_SendDestroyMsg( pWndArray[i] );
|
||||
if (IsWindow( pWndArray[i] ))
|
||||
WIN_SendDestroyMsg( pWndArray[i] );
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, pWndArray);
|
||||
}
|
||||
|
@ -396,6 +406,7 @@ static LRESULT co_IntDestroyWindow(PWINDOW_OBJECT Window,
|
|||
/* FIXME: do we need to fake QS_MOUSEMOVE wakebit? */
|
||||
|
||||
#if 0 /* FIXME */
|
||||
|
||||
WinPosCheckInternalPos(Window->hSelf);
|
||||
if (Window->hSelf == GetCapture())
|
||||
{
|
||||
|
@ -424,6 +435,7 @@ static LRESULT co_IntDestroyWindow(PWINDOW_OBJECT Window,
|
|||
|
||||
DceFreeWindowDCE(Window); /* Always do this to catch orphaned DCs */
|
||||
#if 0 /* FIXME */
|
||||
|
||||
WINPROC_FreeProc(Window->winproc, WIN_PROC_WINDOW);
|
||||
CLASS_RemoveWindow(Window->Class);
|
||||
#endif
|
||||
|
@ -850,7 +862,7 @@ IntLinkWindow(
|
|||
PWINDOW_OBJECT Wnd,
|
||||
PWINDOW_OBJECT WndParent,
|
||||
PWINDOW_OBJECT WndPrevSibling /* set to NULL if top sibling */
|
||||
)
|
||||
)
|
||||
{
|
||||
PWINDOW_OBJECT Parent;
|
||||
|
||||
|
@ -1054,11 +1066,15 @@ IntUnlinkWindow(PWINDOW_OBJECT Wnd)
|
|||
{
|
||||
PWINDOW_OBJECT WndParent = Wnd->Parent;
|
||||
|
||||
if (Wnd->NextSibling) Wnd->NextSibling->PrevSibling = Wnd->PrevSibling;
|
||||
else if (WndParent && WndParent->LastChild == Wnd) WndParent->LastChild = Wnd->PrevSibling;
|
||||
if (Wnd->NextSibling)
|
||||
Wnd->NextSibling->PrevSibling = Wnd->PrevSibling;
|
||||
else if (WndParent && WndParent->LastChild == Wnd)
|
||||
WndParent->LastChild = Wnd->PrevSibling;
|
||||
|
||||
if (Wnd->PrevSibling) Wnd->PrevSibling->NextSibling = Wnd->NextSibling;
|
||||
else if (WndParent && WndParent->FirstChild == Wnd) WndParent->FirstChild = Wnd->NextSibling;
|
||||
if (Wnd->PrevSibling)
|
||||
Wnd->PrevSibling->NextSibling = Wnd->NextSibling;
|
||||
else if (WndParent && WndParent->FirstChild == Wnd)
|
||||
WndParent->FirstChild = Wnd->NextSibling;
|
||||
|
||||
Wnd->PrevSibling = Wnd->NextSibling = Wnd->Parent = NULL;
|
||||
}
|
||||
|
@ -1411,10 +1427,13 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
POINT Pos;
|
||||
SIZE Size;
|
||||
#if 0
|
||||
|
||||
POINT MaxSize, MaxPos, MinTrack, MaxTrack;
|
||||
#else
|
||||
|
||||
POINT MaxPos;
|
||||
#endif
|
||||
|
||||
CREATESTRUCTW Cs;
|
||||
CBT_CREATEWNDW CbtCreate;
|
||||
LRESULT Result;
|
||||
|
@ -1450,7 +1469,8 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
{
|
||||
ParentWindow = UserGetWindowObject(ParentWindowHandle);
|
||||
|
||||
if (ParentWindow) UserRefObjectCo(ParentWindow);
|
||||
if (ParentWindow)
|
||||
UserRefObjectCo(ParentWindow);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1545,7 +1565,9 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
Window->hOwner = OwnerWindowHandle;
|
||||
IntReleaseWindowObject(OwnerWindow);
|
||||
HasOwner = TRUE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
Window->hOwner = NULL;
|
||||
HasOwner = FALSE;
|
||||
}
|
||||
|
@ -1783,12 +1805,18 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
/* WinPosGetMinMaxInfo sends the WM_GETMINMAXINFO message */
|
||||
co_WinPosGetMinMaxInfo(Window, &MaxSize, &MaxPos, &MinTrack,
|
||||
&MaxTrack);
|
||||
if (MaxSize.x < nWidth) nWidth = MaxSize.x;
|
||||
if (MaxSize.y < nHeight) nHeight = MaxSize.y;
|
||||
if (nWidth < MinTrack.x ) nWidth = MinTrack.x;
|
||||
if (nHeight < MinTrack.y ) nHeight = MinTrack.y;
|
||||
if (nWidth < 0) nWidth = 0;
|
||||
if (nHeight < 0) nHeight = 0;
|
||||
if (MaxSize.x < nWidth)
|
||||
nWidth = MaxSize.x;
|
||||
if (MaxSize.y < nHeight)
|
||||
nHeight = MaxSize.y;
|
||||
if (nWidth < MinTrack.x )
|
||||
nWidth = MinTrack.x;
|
||||
if (nHeight < MinTrack.y )
|
||||
nHeight = MinTrack.y;
|
||||
if (nWidth < 0)
|
||||
nWidth = 0;
|
||||
if (nHeight < 0)
|
||||
nHeight = 0;
|
||||
}
|
||||
|
||||
Window->WindowRect.left = Pos.x;
|
||||
|
@ -1955,10 +1983,13 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
(LPARAM)Window->hSelf);
|
||||
}
|
||||
|
||||
if ((!hWndParent) && (!HasOwner)) {
|
||||
if ((!hWndParent) && (!HasOwner))
|
||||
{
|
||||
DPRINT("Sending CREATED notify\n");
|
||||
co_IntShellHookNotify(HSHELL_WINDOWCREATED, (LPARAM)Handle);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT("Not sending CREATED notify, %x %d\n", ParentWindow, HasOwner);
|
||||
}
|
||||
|
||||
|
@ -1983,8 +2014,10 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
RETURN((HWND)Handle);
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (ParentWindow) UserDerefObjectCo(ParentWindow);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
if (ParentWindow)
|
||||
UserDerefObjectCo(ParentWindow);
|
||||
|
||||
END_CLEANUP;
|
||||
}
|
||||
|
@ -2125,6 +2158,7 @@ BOOLEAN FASTCALL co_UserDestroyWindow(PWINDOW_OBJECT Window)
|
|||
IntDereferenceMessageQueue(Window->MessageQueue);
|
||||
/* Call hooks */
|
||||
#if 0 /* FIXME */
|
||||
|
||||
if (co_HOOK_CallHooks(WH_CBT, HCBT_DESTROYWND, (WPARAM) hwnd, 0, TRUE))
|
||||
{
|
||||
return FALSE;
|
||||
|
@ -2135,6 +2169,7 @@ BOOLEAN FASTCALL co_UserDestroyWindow(PWINDOW_OBJECT Window)
|
|||
isChild = (0 != (Window->Style & WS_CHILD));
|
||||
|
||||
#if 0 /* FIXME */
|
||||
|
||||
if (isChild)
|
||||
{
|
||||
if (! USER_IsExitingThread(GetCurrentThreadId()))
|
||||
|
@ -2312,7 +2347,8 @@ IntFindWindow(PWINDOW_OBJECT Parent,
|
|||
if(ChildAfter)
|
||||
{
|
||||
/* skip handles before and including ChildAfter */
|
||||
while(*phWnd && (*(phWnd++) != ChildAfter->hSelf));
|
||||
while(*phWnd && (*(phWnd++) != ChildAfter->hSelf))
|
||||
;
|
||||
}
|
||||
|
||||
/* search children */
|
||||
|
@ -2492,7 +2528,8 @@ NtUserFindWindowEx(HWND hwndParent,
|
|||
if(ChildAfter)
|
||||
{
|
||||
/* skip handles before and including ChildAfter */
|
||||
while(*phWnd && (*(phWnd++) != ChildAfter->hSelf));
|
||||
while(*phWnd && (*(phWnd++) != ChildAfter->hSelf))
|
||||
;
|
||||
}
|
||||
|
||||
CheckWindowName = WindowName.Length > 0;
|
||||
|
@ -2539,6 +2576,7 @@ NtUserFindWindowEx(HWND hwndParent,
|
|||
Ret = IntFindWindow(Parent, ChildAfter, ClassAtom, &WindowName);
|
||||
|
||||
#if 0
|
||||
|
||||
if(Ret == NULL && hwndParent == NULL && hwndChildAfter == NULL)
|
||||
{
|
||||
/* FIXME - if both hwndParent and hwndChildAfter are NULL, we also should
|
||||
|
@ -2554,14 +2592,14 @@ NtUserFindWindowEx(HWND hwndParent,
|
|||
}
|
||||
#endif
|
||||
|
||||
Cleanup:
|
||||
Cleanup:
|
||||
if(ClassName.Length > 0 && ClassName.Buffer)
|
||||
ExFreePool(ClassName.Buffer);
|
||||
|
||||
Cleanup2:
|
||||
Cleanup2:
|
||||
RtlFreeUnicodeString(&WindowName);
|
||||
|
||||
Cleanup3:
|
||||
Cleanup3:
|
||||
if(ChildAfter)
|
||||
IntReleaseWindowObject(ChildAfter);
|
||||
IntReleaseWindowObject(Parent);
|
||||
|
@ -2777,7 +2815,7 @@ NtUserGetInternalWindowPos(DWORD Unknown0,
|
|||
HWND STDCALL
|
||||
NtUserGetLastActivePopup(HWND hWnd)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
* This code can't work, because hWndLastPopup member of WINDOW_OBJECT is
|
||||
* not changed anywhere.
|
||||
* -- Filip, 01/nov/2003
|
||||
|
@ -2801,6 +2839,7 @@ NtUserGetLastActivePopup(HWND hWnd)
|
|||
|
||||
return hWndLastPopup;
|
||||
#else
|
||||
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
@ -3047,7 +3086,7 @@ NtUserSetShellWindowEx(HWND hwndShell, HWND hwndListView)
|
|||
*/
|
||||
if (hwndListView && hwndListView != hwndShell)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
* Disabled for now to get Explorer working.
|
||||
* -- Filip, 01/nov/2003
|
||||
*/
|
||||
|
@ -3201,7 +3240,8 @@ UserGetWindow(HWND hWnd, UINT Relationship)
|
|||
PWINDOW_OBJECT Parent, Window;
|
||||
HWND hWndResult = NULL;
|
||||
|
||||
if (!(Window = UserGetWindowObject(hWnd))) return NULL;
|
||||
if (!(Window = UserGetWindowObject(hWnd)))
|
||||
return NULL;
|
||||
|
||||
switch (Relationship)
|
||||
{
|
||||
|
@ -3754,7 +3794,8 @@ NtUserGetWindowThreadProcessId(HWND hWnd, LPDWORD UnsafePid)
|
|||
tid = (DWORD)IntGetWndThreadId(Wnd);
|
||||
pid = (DWORD)IntGetWndProcessId(Wnd);
|
||||
|
||||
if (UnsafePid) MmCopyToCaller(UnsafePid, &pid, sizeof(DWORD));
|
||||
if (UnsafePid)
|
||||
MmCopyToCaller(UnsafePid, &pid, sizeof(DWORD));
|
||||
|
||||
RETURN( tid);
|
||||
|
||||
|
@ -4535,7 +4576,9 @@ NtUserDereferenceWndProcHandle(WNDPROC wpHandle, WndProcHandle *Data)
|
|||
Data->IsUnicode = Entry.IsUnicode;
|
||||
Data->ProcessID = Entry.ProcessID;
|
||||
RETURN( TRUE);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
RETURN( FALSE);
|
||||
}
|
||||
RETURN( FALSE);
|
||||
|
@ -4629,14 +4672,18 @@ IntShowOwnedPopups( HWND owner, BOOL fShow )
|
|||
win_array = IntWinListChildren( Window);
|
||||
IntReleaseWindowObject(Window);
|
||||
|
||||
if (!win_array) return TRUE;
|
||||
if (!win_array)
|
||||
return TRUE;
|
||||
|
||||
while (win_array[count]) count++;
|
||||
while (win_array[count])
|
||||
count++;
|
||||
while (--count >= 0)
|
||||
{
|
||||
if (UserGetWindow( win_array[count], GW_OWNER ) != owner) continue;
|
||||
if (!(pWnd = IntGetWindowObject( win_array[count] ))) continue;
|
||||
// if (pWnd == WND_OTHER_PROCESS) continue;
|
||||
if (UserGetWindow( win_array[count], GW_OWNER ) != owner)
|
||||
continue;
|
||||
if (!(pWnd = IntGetWindowObject( win_array[count] )))
|
||||
continue;
|
||||
// if (pWnd == WND_OTHER_PROCESS) continue;
|
||||
|
||||
if (fShow)
|
||||
{
|
||||
|
|
|
@ -109,7 +109,8 @@ NtUserGetClientOrigin(HWND hWnd, LPPOINT Point)
|
|||
DPRINT("Enter NtUserGetClientOrigin\n");
|
||||
UserEnterShared();
|
||||
|
||||
if (!(Window = UserGetWindowObject(hWnd))) RETURN(FALSE);
|
||||
if (!(Window = UserGetWindowObject(hWnd)))
|
||||
RETURN(FALSE);
|
||||
|
||||
RETURN(UserGetClientOrigin(Window, Point));
|
||||
|
||||
|
@ -130,7 +131,8 @@ co_WinPosActivateOtherWindow(PWINDOW_OBJECT Window OPTIONAL)
|
|||
PWINDOW_OBJECT Wnd, Old;
|
||||
HWND Fg;
|
||||
|
||||
if (Window) ASSERT_REFS_CO(Window);
|
||||
if (Window)
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
||||
if (!Window || IntIsDesktopWindow(Window))
|
||||
{
|
||||
|
@ -177,7 +179,8 @@ co_WinPosActivateOtherWindow(PWINDOW_OBJECT Window OPTIONAL)
|
|||
|
||||
done:
|
||||
|
||||
if (Wnd) UserRefObjectCo(Wnd);
|
||||
if (Wnd)
|
||||
UserRefObjectCo(Wnd);
|
||||
|
||||
Fg = UserGetForegroundWindow();
|
||||
if (Wnd && (!Fg || Window->hSelf == Fg))
|
||||
|
@ -192,7 +195,8 @@ done:
|
|||
if (!co_IntSetActiveWindow(Wnd))
|
||||
co_IntSetActiveWindow(0);
|
||||
|
||||
if (Wnd) UserDerefObjectCo(Wnd);
|
||||
if (Wnd)
|
||||
UserDerefObjectCo(Wnd);
|
||||
}
|
||||
|
||||
|
||||
|
@ -222,7 +226,8 @@ co_WinPosArrangeIconicWindows(PWINDOW_OBJECT parent)
|
|||
|
||||
hwndChild = List[i];
|
||||
|
||||
if (!(WndChild = UserGetWindowObject(List[i]))) continue;
|
||||
if (!(WndChild = UserGetWindowObject(List[i])))
|
||||
continue;
|
||||
|
||||
if((UserGetWindowLong( hwndChild, GWL_STYLE, FALSE) & WS_MINIMIZE) != 0 )
|
||||
{
|
||||
|
@ -234,7 +239,8 @@ co_WinPosArrangeIconicWindows(PWINDOW_OBJECT parent)
|
|||
|
||||
UserDerefObjectCo(WndChild);
|
||||
|
||||
if (x <= rectParent.right - xspacing) x += xspacing;
|
||||
if (x <= rectParent.right - xspacing)
|
||||
x += xspacing;
|
||||
else
|
||||
{
|
||||
x = rectParent.left;
|
||||
|
@ -457,10 +463,14 @@ co_WinPosGetMinMaxInfo(PWINDOW_OBJECT Window, POINT* MaxSize, POINT* MaxPos,
|
|||
MinMax.ptMaxTrackSize.y = max(MinMax.ptMaxTrackSize.y,
|
||||
MinMax.ptMinTrackSize.y);
|
||||
|
||||
if (MaxSize) *MaxSize = MinMax.ptMaxSize;
|
||||
if (MaxPos) *MaxPos = MinMax.ptMaxPosition;
|
||||
if (MinTrack) *MinTrack = MinMax.ptMinTrackSize;
|
||||
if (MaxTrack) *MaxTrack = MinMax.ptMaxTrackSize;
|
||||
if (MaxSize)
|
||||
*MaxSize = MinMax.ptMaxSize;
|
||||
if (MaxPos)
|
||||
*MaxPos = MinMax.ptMaxPosition;
|
||||
if (MinTrack)
|
||||
*MinTrack = MinMax.ptMinTrackSize;
|
||||
if (MaxTrack)
|
||||
*MaxTrack = MinMax.ptMaxTrackSize;
|
||||
|
||||
return 0; //FIXME: what does it return?
|
||||
}
|
||||
|
@ -650,7 +660,8 @@ WinPosDoOwnedPopups(HWND hWnd, HWND hWndInsertAfter)
|
|||
{
|
||||
for (i = 0; List[i]; i++)
|
||||
{
|
||||
if (List[i] == Owner) break;
|
||||
if (List[i] == Owner)
|
||||
break;
|
||||
if (HWND_TOP == hWndInsertAfter)
|
||||
{
|
||||
ChildObject = IntGetWindowObject(List[i]);
|
||||
|
@ -664,8 +675,10 @@ WinPosDoOwnedPopups(HWND hWnd, HWND hWndInsertAfter)
|
|||
IntReleaseWindowObject(ChildObject);
|
||||
}
|
||||
}
|
||||
if (List[i] != hWnd) hWndLocalPrev = List[i];
|
||||
if (hWndLocalPrev == hWndInsertAfter) break;
|
||||
if (List[i] != hWnd)
|
||||
hWndLocalPrev = List[i];
|
||||
if (hWndLocalPrev == hWndInsertAfter)
|
||||
break;
|
||||
}
|
||||
hWndInsertAfter = hWndLocalPrev;
|
||||
}
|
||||
|
@ -691,7 +704,8 @@ WinPosDoOwnedPopups(HWND hWnd, HWND hWndInsertAfter)
|
|||
if (List[i] == hWnd)
|
||||
break;
|
||||
|
||||
if (!(Wnd = UserGetWindowObject(List[i]))) continue;
|
||||
if (!(Wnd = UserGetWindowObject(List[i])))
|
||||
continue;
|
||||
|
||||
if ((UserGetWindowLong(List[i], GWL_STYLE, FALSE) & WS_POPUP) &&
|
||||
UserGetWindow(List[i], GW_OWNER) == hWnd)
|
||||
|
@ -858,7 +872,7 @@ co_WinPosSetWindowPos(
|
|||
INT cx,
|
||||
INT cy,
|
||||
UINT flags
|
||||
)
|
||||
)
|
||||
{
|
||||
WINDOWPOS WinPos;
|
||||
RECT NewWindowRect;
|
||||
|
@ -1260,7 +1274,7 @@ co_WinPosShowWindow(PWINDOW_OBJECT Window, INT Cmd)
|
|||
UINT Swp = 0;
|
||||
RECT NewPos;
|
||||
BOOLEAN ShowFlag;
|
||||
// HRGN VisibleRgn;
|
||||
// HRGN VisibleRgn;
|
||||
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
||||
|
@ -1419,12 +1433,12 @@ co_WinPosShowWindow(PWINDOW_OBJECT Window, INT Cmd)
|
|||
}
|
||||
|
||||
/* Activate the window if activation is not requested and the window is not minimized */
|
||||
/*
|
||||
/*
|
||||
if (!(Swp & (SWP_NOACTIVATE | SWP_HIDEWINDOW)) && !(Window->Style & WS_MINIMIZE))
|
||||
{
|
||||
WinPosChangeActiveWindow(Wnd, FALSE);
|
||||
}
|
||||
*/
|
||||
*/
|
||||
return(WasVisible);
|
||||
}
|
||||
|
||||
|
@ -1597,7 +1611,8 @@ NtUserGetMinMaxInfo(
|
|||
RETURN( FALSE);
|
||||
|
||||
CLEANUP:
|
||||
if (Window) UserDerefObjectCo(Window);
|
||||
if (Window)
|
||||
UserDerefObjectCo(Window);
|
||||
|
||||
DPRINT("Leave NtUserGetMinMaxInfo, ret=%i\n",_ret_);
|
||||
UserLeave();
|
||||
|
|
|
@ -48,14 +48,14 @@ PWINSTATION_OBJECT InputWindowStation = NULL;
|
|||
/* INITALIZATION FUNCTIONS ****************************************************/
|
||||
|
||||
static GENERIC_MAPPING IntWindowStationMapping =
|
||||
{
|
||||
{
|
||||
STANDARD_RIGHTS_READ | WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_READATTRIBUTES | WINSTA_READSCREEN,
|
||||
STANDARD_RIGHTS_WRITE | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES,
|
||||
STANDARD_RIGHTS_EXECUTE | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS,
|
||||
STANDARD_RIGHTS_REQUIRED | WINSTA_ACCESSCLIPBOARD | WINSTA_ACCESSGLOBALATOMS | WINSTA_CREATEDESKTOP |
|
||||
WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_EXITWINDOWS |
|
||||
WINSTA_READATTRIBUTES | WINSTA_READSCREEN | WINSTA_WRITEATTRIBUTES
|
||||
};
|
||||
};
|
||||
|
||||
NTSTATUS FASTCALL
|
||||
InitWindowStationImpl(VOID)
|
||||
|
@ -305,7 +305,7 @@ IntValidateWindowStationHandle(
|
|||
|
||||
if (WindowStation == NULL)
|
||||
{
|
||||
// DPRINT1("Invalid window station handle\n");
|
||||
// DPRINT1("Invalid window station handle\n");
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return STATUS_INVALID_HANDLE;
|
||||
}
|
||||
|
@ -683,11 +683,11 @@ NtUserCloseWindowStation(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#if 0
|
||||
/* FIXME - free the cursor information when actually deleting the object!! */
|
||||
ASSERT(Object->SystemCursor);
|
||||
ExFreePool(Object->SystemCursor);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ObDereferenceObject(Object);
|
||||
|
||||
|
|
Loading…
Reference in a new issue