- Rename gKeyStateTable to gafAsyncKeyState: it's a proper name
- Fix accelerators regression

svn path=/trunk/; revision=54058
This commit is contained in:
Rafal Harabien 2011-10-08 23:33:26 +00:00
parent 79d4c34950
commit 8b395029ee
5 changed files with 45 additions and 47 deletions

View file

@ -56,4 +56,4 @@ VOID FASTCALL DoTheScreenSaver(VOID);
extern HANDLE ghKeyboardDevice; extern HANDLE ghKeyboardDevice;
extern PTHREADINFO ptiRawInput; extern PTHREADINFO ptiRawInput;
extern BYTE gKeyStateTable[0x100]; extern BYTE gafAsyncKeyState[0x100];

View file

@ -110,7 +110,7 @@ co_IntTranslateAccelerator(
&MenuItem, &MenuItem,
NULL); NULL);
if (nPos != (UINT)-1) if (nPos != (UINT)-1)
hSubMenu = MenuItem->hSubMenu; hSubMenu = SubMenu->head.h;
else else
hMenu = NULL; hMenu = NULL;
} }
@ -129,7 +129,7 @@ co_IntTranslateAccelerator(
&MenuItem, &MenuItem,
NULL); NULL);
if (nPos != (UINT)-1) if (nPos != (UINT)-1)
hSubMenu = MenuItem->hSubMenu; hSubMenu = SubMenu->head.h;
else else
hMenu = NULL; hMenu = NULL;
} }
@ -138,7 +138,7 @@ co_IntTranslateAccelerator(
/* If this is a menu item, there is no capturing enabled and /* If this is a menu item, there is no capturing enabled and
window is not disabled, send WM_INITMENU */ window is not disabled, send WM_INITMENU */
if (hMenu && !IntGetCaptureWindow()) if (hMenu && !IntGetCaptureWindow())
{ {
co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L); co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L);
if (hSubMenu) if (hSubMenu)
{ {
@ -154,7 +154,7 @@ co_IntTranslateAccelerator(
- this is window menu and window is minimized */ - this is window menu and window is minimized */
if (!(Window->style & WS_DISABLED) && if (!(Window->style & WS_DISABLED) &&
!(hMenu && IntGetMenuState(hMenu, pAccel->cmd, MF_BYCOMMAND) & (MF_DISABLED|MF_GRAYED)) && !(hMenu && IntGetMenuState(hMenu, pAccel->cmd, MF_BYCOMMAND) & (MF_DISABLED|MF_GRAYED)) &&
!(hMenu && hMenu == (HMENU)Window->IDMenu && !(Window->style & WS_MINIMIZED))) !(hMenu && hMenu == (HMENU)Window->IDMenu && (Window->style & WS_MINIMIZED)))
{ {
/* If this is system menu item, send WM_SYSCOMMAND, otherwise send WM_COMMAND */ /* If this is system menu item, send WM_SYSCOMMAND, otherwise send WM_COMMAND */
if (hMenu && hMenu == Window->SystemMenu) if (hMenu && hMenu == Window->SystemMenu)
@ -426,8 +426,7 @@ NtUserTranslateAccelerator(
{ {
if (co_IntTranslateAccelerator(Window, &Message, &Accel->Table[i])) if (co_IntTranslateAccelerator(Window, &Message, &Accel->Table[i]))
{ {
TRACE("NtUserTranslateAccelerator returns 1\n"); RETURN( 1);
RETURN( 1);
} }
/* Undocumented feature... */ /* Undocumented feature... */
@ -441,7 +440,7 @@ CLEANUP:
if (Window) UserDerefObjectCo(Window); if (Window) UserDerefObjectCo(Window);
if (Accel) UserDerefObjectCo(Accel); if (Accel) UserDerefObjectCo(Accel);
TRACE("NtUserTranslateAccelerator returns 0\n"); TRACE("NtUserTranslateAccelerator returns %d\n", _ret_);
UserLeave(); UserLeave();
END_CLEANUP; END_CLEANUP;
} }

View file

@ -10,7 +10,6 @@
#include <win32k.h> #include <win32k.h>
DBG_DEFAULT_CHANNEL(UserInput); DBG_DEFAULT_CHANNEL(UserInput);
extern BYTE gKeyStateTable[];
extern NTSTATUS Win32kInitWin32Thread(PETHREAD Thread); extern NTSTATUS Win32kInitWin32Thread(PETHREAD Thread);
extern PPROCESSINFO ppiScrnSaver; extern PPROCESSINFO ppiScrnSaver;
@ -684,12 +683,12 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
Msg.lParam = MAKELPARAM(MousePos.x, MousePos.y); Msg.lParam = MAKELPARAM(MousePos.x, MousePos.y);
Msg.pt = MousePos; Msg.pt = MousePos;
if (gKeyStateTable[VK_SHIFT] & KS_DOWN_BIT) if (gafAsyncKeyState[VK_SHIFT] & KS_DOWN_BIT)
{ {
Msg.wParam |= MK_SHIFT; Msg.wParam |= MK_SHIFT;
} }
if (gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT) if (gafAsyncKeyState[VK_CONTROL] & KS_DOWN_BIT)
{ {
Msg.wParam |= MK_CONTROL; Msg.wParam |= MK_CONTROL;
} }
@ -700,7 +699,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
if(mi->dwFlags & MOUSEEVENTF_LEFTDOWN) if(mi->dwFlags & MOUSEEVENTF_LEFTDOWN)
{ {
gKeyStateTable[VK_LBUTTON] |= KS_DOWN_BIT; gafAsyncKeyState[VK_LBUTTON] |= KS_DOWN_BIT;
Msg.message = SwapBtnMsg[0][SwapButtons]; Msg.message = SwapBtnMsg[0][SwapButtons];
CurInfo->ButtonsDown |= SwapBtn[SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[SwapButtons];
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -708,7 +707,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
else if(mi->dwFlags & MOUSEEVENTF_LEFTUP) else if(mi->dwFlags & MOUSEEVENTF_LEFTUP)
{ {
gKeyStateTable[VK_LBUTTON] &= ~KS_DOWN_BIT; gafAsyncKeyState[VK_LBUTTON] &= ~KS_DOWN_BIT;
Msg.message = SwapBtnMsg[1][SwapButtons]; Msg.message = SwapBtnMsg[1][SwapButtons];
CurInfo->ButtonsDown &= ~SwapBtn[SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[SwapButtons];
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -716,7 +715,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
if(mi->dwFlags & MOUSEEVENTF_MIDDLEDOWN) if(mi->dwFlags & MOUSEEVENTF_MIDDLEDOWN)
{ {
gKeyStateTable[VK_MBUTTON] |= KS_DOWN_BIT; gafAsyncKeyState[VK_MBUTTON] |= KS_DOWN_BIT;
Msg.message = WM_MBUTTONDOWN; Msg.message = WM_MBUTTONDOWN;
CurInfo->ButtonsDown |= MK_MBUTTON; CurInfo->ButtonsDown |= MK_MBUTTON;
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -724,7 +723,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
else if(mi->dwFlags & MOUSEEVENTF_MIDDLEUP) else if(mi->dwFlags & MOUSEEVENTF_MIDDLEUP)
{ {
gKeyStateTable[VK_MBUTTON] &= ~KS_DOWN_BIT; gafAsyncKeyState[VK_MBUTTON] &= ~KS_DOWN_BIT;
Msg.message = WM_MBUTTONUP; Msg.message = WM_MBUTTONUP;
CurInfo->ButtonsDown &= ~MK_MBUTTON; CurInfo->ButtonsDown &= ~MK_MBUTTON;
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -732,7 +731,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
if(mi->dwFlags & MOUSEEVENTF_RIGHTDOWN) if(mi->dwFlags & MOUSEEVENTF_RIGHTDOWN)
{ {
gKeyStateTable[VK_RBUTTON] |= KS_DOWN_BIT; gafAsyncKeyState[VK_RBUTTON] |= KS_DOWN_BIT;
Msg.message = SwapBtnMsg[0][!SwapButtons]; Msg.message = SwapBtnMsg[0][!SwapButtons];
CurInfo->ButtonsDown |= SwapBtn[!SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[!SwapButtons];
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -740,7 +739,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
} }
else if(mi->dwFlags & MOUSEEVENTF_RIGHTUP) else if(mi->dwFlags & MOUSEEVENTF_RIGHTUP)
{ {
gKeyStateTable[VK_RBUTTON] &= ~KS_DOWN_BIT; gafAsyncKeyState[VK_RBUTTON] &= ~KS_DOWN_BIT;
Msg.message = SwapBtnMsg[1][!SwapButtons]; Msg.message = SwapBtnMsg[1][!SwapButtons];
CurInfo->ButtonsDown &= ~SwapBtn[!SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[!SwapButtons];
Msg.wParam |= CurInfo->ButtonsDown; Msg.wParam |= CurInfo->ButtonsDown;
@ -759,14 +758,14 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
Msg.message = WM_XBUTTONDOWN; Msg.message = WM_XBUTTONDOWN;
if(mi->mouseData & XBUTTON1) if(mi->mouseData & XBUTTON1)
{ {
gKeyStateTable[VK_XBUTTON1] |= KS_DOWN_BIT; gafAsyncKeyState[VK_XBUTTON1] |= KS_DOWN_BIT;
CurInfo->ButtonsDown |= MK_XBUTTON1; CurInfo->ButtonsDown |= MK_XBUTTON1;
Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1);
co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE); co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE);
} }
if(mi->mouseData & XBUTTON2) if(mi->mouseData & XBUTTON2)
{ {
gKeyStateTable[VK_XBUTTON2] |= KS_DOWN_BIT; gafAsyncKeyState[VK_XBUTTON2] |= KS_DOWN_BIT;
CurInfo->ButtonsDown |= MK_XBUTTON2; CurInfo->ButtonsDown |= MK_XBUTTON2;
Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2);
co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE); co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE);
@ -777,14 +776,14 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
Msg.message = WM_XBUTTONUP; Msg.message = WM_XBUTTONUP;
if(mi->mouseData & XBUTTON1) if(mi->mouseData & XBUTTON1)
{ {
gKeyStateTable[VK_XBUTTON1] &= ~KS_DOWN_BIT; gafAsyncKeyState[VK_XBUTTON1] &= ~KS_DOWN_BIT;
CurInfo->ButtonsDown &= ~MK_XBUTTON1; CurInfo->ButtonsDown &= ~MK_XBUTTON1;
Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1);
co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE); co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE);
} }
if(mi->mouseData & XBUTTON2) if(mi->mouseData & XBUTTON2)
{ {
gKeyStateTable[VK_XBUTTON2] &= ~KS_DOWN_BIT; gafAsyncKeyState[VK_XBUTTON2] &= ~KS_DOWN_BIT;
CurInfo->ButtonsDown &= ~MK_XBUTTON2; CurInfo->ButtonsDown &= ~MK_XBUTTON2;
Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2);
co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE); co_MsqInsertMouseMessage(&Msg, Injected, mi->dwExtraInfo, TRUE);

View file

@ -10,7 +10,7 @@
#include <win32k.h> #include <win32k.h>
DBG_DEFAULT_CHANNEL(UserKbd); DBG_DEFAULT_CHANNEL(UserKbd);
BYTE gKeyStateTable[0x100]; BYTE gafAsyncKeyState[0x100];
static PKEYBOARD_INDICATOR_TRANSLATION gpKeyboardIndicatorTrans = NULL; static PKEYBOARD_INDICATOR_TRANSLATION gpKeyboardIndicatorTrans = NULL;
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
@ -25,7 +25,7 @@ NTSTATUS
NTAPI NTAPI
InitKeyboardImpl(VOID) InitKeyboardImpl(VOID)
{ {
RtlZeroMemory(&gKeyStateTable, sizeof(gKeyStateTable)); RtlZeroMemory(&gafAsyncKeyState, sizeof(gafAsyncKeyState));
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -636,9 +636,9 @@ IntGetAsyncKeyState(DWORD dwKey)
if (dwKey < 0x100) if (dwKey < 0x100)
{ {
if (gKeyStateTable[dwKey] & KS_DOWN_BIT) if (gafAsyncKeyState[dwKey] & KS_DOWN_BIT)
dwRet |= 0xFFFF8000; // If down, windows returns 0xFFFF8000. dwRet |= 0xFFFF8000; // If down, windows returns 0xFFFF8000.
if (gKeyStateTable[dwKey] & KS_LOCK_BIT) if (gafAsyncKeyState[dwKey] & KS_LOCK_BIT)
dwRet |= 0x1; dwRet |= 0x1;
} }
else else
@ -783,20 +783,20 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
/* Get virtual key without shifts (VK_(L|R)* -> VK_*) */ /* Get virtual key without shifts (VK_(L|R)* -> VK_*) */
wSimpleVk = IntSimplifyVk(wVk); wSimpleVk = IntSimplifyVk(wVk);
wVkOtherSide = IntGetVkOtherSide(wVk); wVkOtherSide = IntGetVkOtherSide(wVk);
PrevKeyState = gKeyStateTable[wSimpleVk]; PrevKeyState = gafAsyncKeyState[wSimpleVk];
/* Update global keyboard state. Begin from lock bit */ /* Update global keyboard state. Begin from lock bit */
if (!bKeyUp && !(PrevKeyState & KS_DOWN_BIT)) if (!bKeyUp && !(PrevKeyState & KS_DOWN_BIT))
gKeyStateTable[wVk] ^= KS_LOCK_BIT; gafAsyncKeyState[wVk] ^= KS_LOCK_BIT;
/* Update down bit */ /* Update down bit */
if (bKeyUp) if (bKeyUp)
gKeyStateTable[wVk] &= ~KS_DOWN_BIT; gafAsyncKeyState[wVk] &= ~KS_DOWN_BIT;
else else
gKeyStateTable[wVk] |= KS_DOWN_BIT; gafAsyncKeyState[wVk] |= KS_DOWN_BIT;
/* Update key without shifts */ /* Update key without shifts */
gKeyStateTable[wSimpleVk] = gKeyStateTable[wVk] | gKeyStateTable[wVkOtherSide]; gafAsyncKeyState[wSimpleVk] = gafAsyncKeyState[wVk] | gafAsyncKeyState[wVkOtherSide];
if (!bKeyUp) if (!bKeyUp)
{ {
@ -806,7 +806,7 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
if (gpKeyboardIndicatorTrans) if (gpKeyboardIndicatorTrans)
IntKeyboardUpdateLeds(ghKeyboardDevice, IntKeyboardUpdateLeds(ghKeyboardDevice,
wScanCode, wScanCode,
gKeyStateTable[wSimpleVk] & KS_LOCK_BIT, gafAsyncKeyState[wSimpleVk] & KS_LOCK_BIT,
gpKeyboardIndicatorTrans); gpKeyboardIndicatorTrans);
} }
@ -818,12 +818,12 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
{ {
if (wVk == VK_LWIN || wVk == VK_RWIN) if (wVk == VK_LWIN || wVk == VK_RWIN)
IntKeyboardSendWinKeyMsg(); IntKeyboardSendWinKeyMsg();
else if(wSimpleVk == VK_MENU && !(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT)) else if(wSimpleVk == VK_MENU && !(gafAsyncKeyState[VK_CONTROL] & KS_DOWN_BIT))
co_IntKeyboardSendAltKeyMsg(); co_IntKeyboardSendAltKeyMsg();
} }
/* Check if it is a hotkey */ /* Check if it is a hotkey */
fModifiers = IntGetModifiers(gKeyStateTable); fModifiers = IntGetModifiers(gafAsyncKeyState);
if (GetHotKey(fModifiers, wSimpleVk, &Thread, &hWnd, &HotkeyId)) if (GetHotKey(fModifiers, wSimpleVk, &Thread, &hWnd, &HotkeyId))
{ {
if (!bKeyUp) if (!bKeyUp)
@ -848,8 +848,8 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
wSysKey = (pKbdTbl->fLocaleFlags & KLLF_ALTGR) ? VK_LMENU : VK_MENU; wSysKey = (pKbdTbl->fLocaleFlags & KLLF_ALTGR) ? VK_LMENU : VK_MENU;
if (wVk == VK_F10 || if (wVk == VK_F10 ||
//uVkNoShift == VK_MENU || // FIXME: If only LALT is pressed WM_SYSKEYUP is generated instead of WM_KEYUP //uVkNoShift == VK_MENU || // FIXME: If only LALT is pressed WM_SYSKEYUP is generated instead of WM_KEYUP
((gKeyStateTable[wSysKey] & KS_DOWN_BIT) && // FIXME ((gafAsyncKeyState[wSysKey] & KS_DOWN_BIT) && // FIXME
!(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT))) !(gafAsyncKeyState[VK_CONTROL] & KS_DOWN_BIT)))
{ {
if (bKeyUp) if (bKeyUp)
Msg.message = WM_SYSKEYUP; Msg.message = WM_SYSKEYUP;
@ -870,7 +870,7 @@ UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
{ {
if (bExt) if (bExt)
Msg.lParam |= LP_EXT_BIT; Msg.lParam |= LP_EXT_BIT;
if (gKeyStateTable[VK_MENU] & KS_DOWN_BIT) if (gafAsyncKeyState[VK_MENU] & KS_DOWN_BIT)
Msg.lParam |= LP_CONTEXT_BIT; Msg.lParam |= LP_CONTEXT_BIT;
if (PrevKeyState & KS_DOWN_BIT) if (PrevKeyState & KS_DOWN_BIT)
Msg.lParam |= LP_PREV_STATE_BIT; Msg.lParam |= LP_PREV_STATE_BIT;
@ -947,7 +947,7 @@ UserProcessKeyboardInput(
KEYBDINPUT KbdInput; KEYBDINPUT KbdInput;
/* Support numlock */ /* Support numlock */
if ((wVk & KBDNUMPAD) && (gKeyStateTable[VK_NUMLOCK] & KS_LOCK_BIT)) if ((wVk & KBDNUMPAD) && (gafAsyncKeyState[VK_NUMLOCK] & KS_LOCK_BIT))
{ {
wVk = IntTranslateNumpadKey(wVk & 0xFF); wVk = IntTranslateNumpadKey(wVk & 0xFF);
} }
@ -1451,19 +1451,19 @@ UserGetMouseButtonsState(VOID)
if (gpsi->aiSysMet[SM_SWAPBUTTON]) if (gpsi->aiSysMet[SM_SWAPBUTTON])
{ {
if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON; if (gafAsyncKeyState[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON; if (gafAsyncKeyState[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
} }
else else
{ {
if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON; if (gafAsyncKeyState[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON; if (gafAsyncKeyState[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
} }
if (gKeyStateTable[VK_MBUTTON] & KS_DOWN_BIT) ret |= MK_MBUTTON; if (gafAsyncKeyState[VK_MBUTTON] & KS_DOWN_BIT) ret |= MK_MBUTTON;
if (gKeyStateTable[VK_SHIFT] & KS_DOWN_BIT) ret |= MK_SHIFT; if (gafAsyncKeyState[VK_SHIFT] & KS_DOWN_BIT) ret |= MK_SHIFT;
if (gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT) ret |= MK_CONTROL; if (gafAsyncKeyState[VK_CONTROL] & KS_DOWN_BIT) ret |= MK_CONTROL;
if (gKeyStateTable[VK_XBUTTON1] & KS_DOWN_BIT) ret |= MK_XBUTTON1; if (gafAsyncKeyState[VK_XBUTTON1] & KS_DOWN_BIT) ret |= MK_XBUTTON1;
if (gKeyStateTable[VK_XBUTTON2] & KS_DOWN_BIT) ret |= MK_XBUTTON2; if (gafAsyncKeyState[VK_XBUTTON2] & KS_DOWN_BIT) ret |= MK_XBUTTON2;
return ret; return ret;
} }

View file

@ -1930,7 +1930,7 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu
MessageQueue->NewMessagesHandle = NULL; MessageQueue->NewMessagesHandle = NULL;
MessageQueue->ShowingCursor = 0; MessageQueue->ShowingCursor = 0;
MessageQueue->CursorObject = NULL; MessageQueue->CursorObject = NULL;
RtlCopyMemory(MessageQueue->KeyState, gKeyStateTable, sizeof(gKeyStateTable)); RtlCopyMemory(MessageQueue->KeyState, gafAsyncKeyState, sizeof(gafAsyncKeyState));
Status = ZwCreateEvent(&MessageQueue->NewMessagesHandle, EVENT_ALL_ACCESS, Status = ZwCreateEvent(&MessageQueue->NewMessagesHandle, EVENT_ALL_ACCESS,
NULL, SynchronizationEvent, FALSE); NULL, SynchronizationEvent, FALSE);