HANDLE KeyHandle;
OBJECT_ATTRIBUTES ObAttr;
// http://support.microsoft.com/kb/324097
- ULONG Ret = 0x409; // English
+ ULONG Ret = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
PKEY_VALUE_PARTIAL_INFORMATION pKeyInfo;
ULONG Size = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH*sizeof(WCHAR);
UNICODE_STRING Language;
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Nls\\Language");
InitializeObjectAttributes( &ObAttr,
- &Language,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
+ &Language,
+ OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
+ NULL,
+ NULL);
if ( NT_SUCCESS(ZwOpenKey(&KeyHandle, KEY_READ, &ObAttr)))
{
&Size)) )
{
RtlInitUnicodeString(&Language, (PWSTR)pKeyInfo->Data);
- RtlUnicodeStringToInteger(&Language, 16, &Ret);
+ if (!NT_SUCCESS(RtlUnicodeStringToInteger(&Language, 16, &Ret)))
+ {
+ Ret = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
+ }
}
ExFreePoolWithTag(pKeyInfo, TAG_STRING);
}
break;
case THREADSTATE_INSENDMESSAGE:
{
- PUSER_SENT_MESSAGE Message =
+ PUSER_SENT_MESSAGE Message =
((PTHREADINFO)PsGetCurrentThreadWin32Thread())->pusmCurrent;
ERR("THREADSTATE_INSENDMESSAGE\n");
if (Message->QS_Flags & QS_SMRESULT) ret |= ISMEX_REPLIED;
}
- break;
+ break;
}
case THREADSTATE_GETMESSAGETIME:
ret = ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->timeLast;
ret = (DWORD_PTR) (GetW32ThreadInfo()->MessageQueue->CursorObject ?
UserHMGetHandle(GetW32ThreadInfo()->MessageQueue->CursorObject) : 0);
break;
+ case THREADSTATE_GETMESSAGEEXTRAINFO:
+ ret = (DWORD_PTR)MsqGetMessageExtraInfo();
+ break;
}
TRACE("Leave NtUserGetThreadState, ret=%lu\n", ret);
DWORD Ret = 0;
// Test the only flags user can change.
if (Set & ~(QF_FF10STATUS|QF_DIALOGACTIVE|QF_TABSWITCHING|QF_FMENUSTATUS|QF_FMENUSTATUSBREAK)) return 0;
- if (Flags & ~(QF_FF10STATUS|QF_DIALOGACTIVE|QF_TABSWITCHING|QF_FMENUSTATUS|QF_FMENUSTATUSBREAK)) return 0;
+ if (Flags & ~(QF_FF10STATUS|QF_DIALOGACTIVE|QF_TABSWITCHING|QF_FMENUSTATUS|QF_FMENUSTATUSBREAK)) return 0;
UserEnterExclusive();
pti = PsGetCurrentThreadWin32Thread();
if (pti->MessageQueue)
if ( Desktop ) MsgQueue = Desktop->ActiveMessageQueue;
}
- CaretInfo = MsgQueue->CaretInfo;
+ CaretInfo = &MsgQueue->CaretInfo;
SafeGui.flags = (CaretInfo->Visible ? GUI_CARETBLINKING : 0);
+/*
+ if (W32Thread->pMenuState->pGlobalPopupMenu)
+ {
+ SafeGui.flags |= GUI_INMENUMODE;
+
+ if (W32Thread->pMenuState->pGlobalPopupMenu->spwndNotify)
+ SafeGui.hwndMenuOwner = UserHMGetHandle(W32Thread->pMenuState->pGlobalPopupMenu->spwndNotify);
+
+ if (W32Thread->pMenuState->pGlobalPopupMenu->fHasMenuBar)
+ {
+ if (W32Thread->pMenuState->pGlobalPopupMenu->fIsSysMenu)
+ {
+ SafeGui.flags |= GUI_SYSTEMMENUMODE;
+ }
+ }
+ else
+ {
+ SafeGui.flags |= GUI_POPUPMENUMODE;
+ }
+ }
+ */
+ SafeGui.hwndMenuOwner = MsgQueue->MenuOwner;
if (MsgQueue->MenuOwner)
SafeGui.flags |= GUI_INMENUMODE | MsgQueue->MenuState;
SafeGui.hwndActive = MsgQueue->spwndActive ? UserHMGetHandle(MsgQueue->spwndActive) : 0;
SafeGui.hwndFocus = MsgQueue->spwndFocus ? UserHMGetHandle(MsgQueue->spwndFocus) : 0;
SafeGui.hwndCapture = MsgQueue->spwndCapture ? UserHMGetHandle(MsgQueue->spwndCapture) : 0;
- SafeGui.hwndMenuOwner = MsgQueue->MenuOwner;
SafeGui.hwndMoveSize = MsgQueue->MoveSize;
SafeGui.hwndCaret = CaretInfo->hWnd;
Status = ObReferenceObjectByHandle(hProcess,
PROCESS_QUERY_INFORMATION,
- PsProcessType,
+ *PsProcessType,
ExGetPreviousMode(),
(PVOID*)&Process,
NULL);
ASSERT(pci->ulClientDelta == DesktopHeapGetUserDelta());
if (pti->pcti && pci->pDeskInfo)
ASSERT(pci->pClientThreadInfo == (PVOID)((ULONG_PTR)pti->pcti - pci->ulClientDelta));
- if (pti->KeyboardLayout)
+ if (pti->pcti && IsListEmpty(&pti->SentMessagesListHead))
+ ASSERT((pti->pcti->fsChangeBits & QS_SENDMESSAGE) == 0);
+ if (pti->KeyboardLayout)
ASSERT(pci->hKL == pti->KeyboardLayout->hkl);
if(pti->rpdesk != NULL)
ASSERT(pti->pDeskInfo == pti->rpdesk->pDeskInfo);
{
/* Make sure that the first syscall is NtUserInitialize */
/* too bad this fails */
- //ASSERT(gbInitialized);
+ // ASSERT(gpepCSRSS);
UserDbgAssertThreadInfo(TRUE);