diff --git "a/win32ss/user/ntuser/message.c" "b/win32ss/user/ntuser/message.c" index ce9da97c1a5..1cc88a62b8a 100644 --- "a/win32ss/user/ntuser/message.c" +++ "b/win32ss/user/ntuser/message.c" @@ -459,8 +459,16 @@ CopyMsgToKernelMem(MSG *KernelModeMsg, MSG *UserModeMsg, PMSGMEMORY MsgMemoryEnt /* Copy data if required */ if (0 != (MsgMemoryEntry->Flags & MMS_FLAG_READ)) { + WCHAR En[] = L"Environment"; TRACE("Copy Message %u from usermode buffer\n", KernelModeMsg->message); - Status = MmCopyFromCaller(KernelMem, (PVOID) UserModeMsg->lParam, Size); + if (UserModeMsg->lParam && wcscmp((WCHAR*)UserModeMsg->lParam, En) == 0) + { + TRACE("lParam was %S\n", En); + wcscpy(KernelMem, En); + return STATUS_SUCCESS; + } + else + Status = MmCopyFromCaller(KernelMem, (PVOID) UserModeMsg->lParam, Size); if (! NT_SUCCESS(Status)) { ERR("Failed to copy message to kernel: invalid usermode lParam buffer\n"); @@ -2721,6 +2729,12 @@ NtUserMessageCall( HWND hWnd, } ExFreePoolWithTag(List, USERTAG_WINDOWLIST); } + if (lParam && wcscmp((WCHAR*)lParam, L"Environment") == 0) + { + /* Handle Broadcast of WM_SETTINGCHAGE for Environment */ + co_IntDoSendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, + 0, (LPARAM)L"Environment", 0); + } Ret = TRUE; } }