Еще одна ошибка Windows 10 вызывает высокую загрузку процессора и нарушает работу IME
Windows 10 KB4515384, выпущенная для всех 10 сентября с исправлениями безопасности и улучшениями качества, страдает от еще одной ошибки. KB4515384 содержит исправления безопасности и исправление ошибки Cortana, приводящей к высокой загрузке ЦП в некоторых системах, но пользователи сообщают, что обновление вызывает проблемы с меню «Пуск», поиском Windows и аудио.
Накопительное обновление для Windows 10 версии 1903 содержит постоянно растущий список ошибок. Недавно пользователи сообщили, что обновление делает нерабочими сетевые адаптеры, и, похоже, тот же патч также вызывает проблемы с редактором метода ввода (IME).
IME является частью операционной системы и в основном предоставляет специализированный интерфейс для ввода текста, который может использоваться во многих ситуациях. Например, IME позволяет пользователям вводить китайский, японский или корейский текст с помощью латинской клавиатуры. Он также позволяет пользователям вводить латинский текст с помощью цифровой клавиатуры, и эта функция даже помогает добавлять текст в систему с распознаванием рукописного ввода.
В сообщении в Feedback Hub несколько пользователей сказали, что IME не запускается, но при этом использует ресурсы ЦП после применения KB4515384:
Microsoft также обновила документ поддержки, чтобы детализировать обходной путь:
• Откройте меню «Пуск» и выполните поиск «Службы».
• В приложении «Службы» найдите «Служба сенсорной клавиатуры и панели рукописного ввода».
• Дважды щелкните процесс и перейдите на вкладку «Свойства».
• В поле «Тип запуска» переключитесь на «Вручную» и нажмите «ОК», чтобы применить изменения.
Может потребоваться перезагрузка, чтобы решить проблемы с IME и до некоторой степени решить проблему высокой загрузки ЦП. Microsoft говорит, что проблемы IME будут решены в следующем накопительном обновлении.
Клавиатурный ввод с использованием IME
Введение
В азиатских языковых культурах существует большое количество символов, которые не всегда помещаются на стандартную раскладку клавиатуры. Для ввода этих символов была разработана специальная технология, которая получила название Input Manager Editor (рус. «Редакторы метода ввода»). Input Method Editor (IME) — это программа или компонент операционной системы, позволяющий пользователям вводить символы, которые физически отсутствуют на клавиатуре.
Несмотря на то, что термин «редактор метода ввода» (IME) изначально использовался только в Microsoft Windows, в настоящее время он применяется и в других операционных системах, когда важно отличить сам метод ввода от функциональности программы, обеспечивающей его, и общую поддержку методов ввода операционной системы.
Термин «метод ввода» обычно означает определенный способ ввода с клавиатуры на каком-либо языке, например Цанцзе, ввод с использованием Пиньиня или использование «мёртвых» клавиш».
Термин «редактор метода ввода» же обычно означает конкретную программу, позволяющую использовать метод ввода (например, SCIM или Microsoft IME).
Система IME по умолчанию
Если языковая культура содержит не более 100 символов, то при вводе с клавиатуры не нужно конвертировать несколько нажатых клавиш к одному символу, как это было в пишущих машинках. Для современных клавиатур данное правило актуально, например QWERTY-клавиатуры содержит 102 клавиши и несколько модификаторов. Однако, если в языке присутствует более 100 символов, то необходимо предусмотреть преобразование комбинации введенных символов перед их использовании в приложении. Такой процесс называется «коммуникационным процессом» (FEP) и IME – стандартный способ для FEP в Windows.
Стандартно, IME использует слоговую фонетическую карту ввода для выбранного языка. В обычном сценарии пользователь вводит латинские символы, которые входят в произношение определенного слога. Если IME распознает введенный слог, то он отображает пользователю список слов или фраз кандидатов, из которых пользователь может выбрать окончательный вариант. Выбранное слово затем отправляется в приложение через серию сообщений Microsoft Windows — WM_CHAR. Поскольку IME работает на уровне ниже обычного приложения (путем перехвата ввода с клавиатуры), то наличие IME прозрачно для приложения. Почти все окна приложения могут легко воспользоваться IME, не зная об его существовании и не требуя специального кодирования.
Ввод отдельного слова может происходит в два или три этапа, в зависимости от выбранной языковой системы.
Например, сценарий для японского языка:
- Пользователь вводит обозначение слогов на латинице. Например, слово «цунами» набирается как «tsunami».
- Введенные слоги на латинице автоматически заменяются на символы из хираганы или катаканы. Хирагана и катакана – слоговые азбуки, в которых каждому звуку японского языка соответствует свой иероглиф. Например, если пользователем выбрана хирагана: «Tsu» автоматически заменяется на «つ», «na» -> «な», «mi» -> «み».
- Пользователь может оставить слово записанным хираганой, а может сконвертировать в иероглиф. Конвертация в иероглифы похожа на систему ввода T9: в худшем случае пользователю предлагается список вариантов, из которых он должен выбрать один вариант. В примере с «цунами» хирагана «つなみ» превращается в иероглифы «津波». На третьем этапе можно управлять конвертацией, обычно используются клавиши «Space», «Enter», стрелки, «numpad». Например, Space конвертирует из хираганы в иероглифы, еще один Space показывает список с вариантами замены, «Enter» означает закончить конвертацию и оставить введенные символы «как есть».
На первом скриншоте показано, как пользователь вводит последовательность символов, называемая «строка композиции» (en. “Composition string”). Необходимо отметить, что последовательность из двух предлагаемых символов преобразовалось к одному символу «Ф» в блокноте.
На втором скриншоте показано, что пользователь завершил ввод слогов, и система IME предлагает выбрать подходящее слово (Пользователь нажал «space»). Пользователь может подтвердить ввод слова с помощью нажатия «Enter».
После нажатия «Enter» для подтверждения введенного слова, приложение (в примере – блокнот) получает результирующую строку в виде сообщения WM_IME_CHAR. Впоследствии, если приложение не обрабатывает это сообщение, то оно получит стандартное сообщение WM_CHAR от системы IME.
Переопределение поведения IME по умолчанию
Обычно IME использует стандартные процедуры Windows для создания окон (используется WinAPI).
Примечание: Когда приложение работает в полноэкранном режиме, как это принято, например, для игр, стандартные окна не работают и не могут отображаться поверх приложения. Чтобы решить эту проблему, приложение должно обработать IME-сообщения самостоятельно, а не полагаться на окна IME, чтобы выполнить эту задачу.
Стандартно, приложение может воспользоваться библиотекой IME напрямую, путем обработки IME-связанных сообщений и вызова менеджера метода ввода (IMM).
Когда пользователь использует IME-раскладку для ввода сложных символов, IMM отправляет в приложение сообщения, чтобы уведомить его о важных событиях, таких как запуск композиционного окна или «показывать список кандидатов слов». Приложение обычно игнорирует эти сообщения и передает их, по умолчанию, в обработчик сообщений Windows, что приводит к вызову IME-библиотеки.
На диаграмме процесса (рис. 2) показано, каким образом происходит процесс ввода текста:
- Когда IMM получает нажатые клавиши от клавиатурного драйвера, он отправляет виртуальные символы в систему IME, вызывая функцию «ImeProcessKey». Если в результате выполнения этой функции — «0», то нажатие клавиш должно быть обработано операционной системой и приложением самостоятельно. В приложение будут передаваться сообщения WM_KEYDOWN и WM_KEYUP, а затем и WM_CHAR или WM_COMMAND.
- Если же система IME возвратило результат, отличный от «0», то IMM будет передавать нажатые символы, вызывая функцию «ImeToAsciiEx» IME-библиотеки.
- Система IME возвращает «lpdwTransBuf» параметр, который содержит сообщения Windows которые необходимо передать в приложение. Система IME также принимает hIMC, в качестве параметра, где указывается «composition string». В процессе работы, система IME будет менять содержимое области памяти hIMC.
- Каждый раз, когда IMM получает «lpdwTransBuf» параметр, то проверяет, содержит ли этот буфер сообщения для приложения. Обычно в буфере содержится WM_IME_COMPOSITION сообщение, которое должно передаваться в приложение каждый раз, когда меняется строка композиции.
- Если приложение не поддерживает IME, то оно не будет обрабатывать сообщение WM_IME_COMPOSITION. Таким образом, пользователь не будет видеть введенный. В этом случае, сообщение передается соответствующему окну IME UI (которое создается системой IME при инициализации в функции «ImeInquire»), которая всегда создается, если IME активирована. Окно IME будет показывать строку композиции так, как оно введено пользователем.
- Если приложение поддерживает IME, то оно будет обрабатывать WM_IME_COMPOSITION сообщение. Если нужно получить содержимое строки композиции, приложение вызывает функцию «ImmGetCompositionString» из библиотеки «Imm32.dll». WM_IME_COMPOSITION сообщение может также уведомить приложение, что строка была сформирована.
- Если приложение получает строку композиции от IMM, то оно должно вызывать функцию DefWindowProc для сообщения WM_IME_CHAR, т.к. дальнейшая обработка может опять сгенерировать это сообщение.
- Если приложение не поддерживает IME, то оно получит WM_IME_CHAR сообщение. Если приложение поддерживает Unicode, то в параметрах будет передан Unicode-символ, если же нет, то приложение получит сообщение WM_CHAR, но оно будет знать, что необходимо преобразовать символ.
- В итоге, приложение всегда получает сообщение WM_CHAR и знает, надо ли преобразовывать символ.
Библиотека IME – это обычный DLL файл, обычно имеющий расширение «.ime». Каждая IME система должна быть зарегистрирована в Microsoft Windows в реестре: «HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00X\Keyboard Layouts». Для любого приложения всегда можно получить его клавиатурный контекст.
Потенциальная угроза при использовании IME-системы
Каждая клавиатурный слой (Keyboard Layout), включая IME-системы, всегда загружаются в каждый процесс операционной системы. Обычное приложение, запущенное в пользовательской среде, не может запретить загрузку клавиатурных модулей в свое адресное пространство. Библиотека IME, как библиотека Windows, обязана экспортировать несколько функций, которые можно переопределить. Также, при загрузке библиотеки всегда вызывается функция DLLMain.
Для реализации атаки, типа Keylogger, злоумышленнику достаточно создать свою IME-систему для любой клавиатурной раскладки (Например, IME для US, UK, RU, CH, JP, KR), которая не отображает окон и осуществляет конвертацию символов. Т.е. будет незаметна для пользователя.
Как было сказано выше, IMM-менеджер всегда передает коды нажатых клавиш выбранной IME-системе, вызывая функции ImeProcessKey и ImeToAsciiEx, экспортируемые из IME-библиотеки.
Самый простой способ перехватить нажатые клавиши – это использовать функцию «ImeProcessKey», которая должна возвращать всегда «0», чтобы исключить дальнейшую обработку сообщений для заданного символа. Т.к. IME-библиотека загружается во все процессы, то пользователь не сможет заметить подозрительную активность стандартными средствами (Например, не будет отдельного процесса для IME-библиотеки).
Также если ImeProcessKey возвращает значение, отличное от нуля, то перехват клавиш можно осуществить в функции ImeToAsciiEx, но при этом необходимо осуществить преобразование скан-кода нажатой клавиши к символу в нужной кодировке, что является тривиальной операцией.
Default ime windows 10
Input Method Editor or IME allows you to switch between different keyboard languages in Windows 10. It is available on the Taskbar and denoted by the selected language. So if you are using English, you should ENG. Some users have reported that IME is disabled on their Windows 10 computer. They cannot switch between the language – or there is a cross sign instead of the language name. If that’s the case with you, then in this post, we will show how you can fix the disabled Input Method Editor (IME) and allow you to switch between languages.
Input Method Editor (IME) is disabled in Windows 10
Input Method Editor is essential for those who work in different languages. Follow these methods to resolve the issue:
- Remove and add the Language again
- Copy language files from an old installation
- Check Input Indicator status
- Bypass WSUS for Domain Joined PC
- Un-Join Domain and Install the language.
Always make sure to type something when you switch the language. Sometimes the keyboards are close in terms of language, and it becomes difficult to figure out the difference. However, if you are limited to English input, with the IME stuck on the “A” icon or “ENG” icon, then follow these solutions.
1] Remove and add the Language again
If you are having a problem with a particular set of languages, then it’s best to remove them and add them back. Especially if this started happening after a feature update.
- Click on Settings > System > Time & Language > Language
- Select the language, and then click on Remove.
- Once it’s deleted from the system, add the language back.
- On the same screen, click on Add Preferred language.
- Search for the same language, and install it.
- Restart the computer once, and then press WIN + Spacebar to check if you can switch.
Make sure to repeatedly hit the spacebar so you can see the interface. It is built such that it lets any switch to the next language quickly. —>
We have seen a similar issue that was reported to use, and the solution was to set the Touch Keyboard and Handwriting Panel Service to manual.
2] Copy language files from an old installation
This has reportedly helped some, so you may try it. If you still have Windows.OLD folder or access to a previous version of Windows, then:
- Go to C:\Windows.OLD\IME\
- Copy language-specific DIC files from C:\Windows.OLD\IME\IMEJP.
- There should be three “.DIC” files – IMJPTK, IMJPZP, and SDDS0411.
- Paste it into the new installation folder at C:\Windows\IME\.
Once done, you will have to assign IMEJP to Administrator, and give Administrator full control over that folder and all of its child folders and files. —>
You can also choose to delete the language-specific folder. In the case of Japanese, it is IMEJP.
3] Check Input Indicator status
Check if the Input Indicator is turned on in Notification Area settings or not.
- Right-click on Taskbar > select Taskbar settings
- Scroll to find, and then click Turn System icons on or off.
- Select On from the drop-down menu for the input indicator.
- Click OK.
It is usually helpful when you are missing the indicator, and it creates confusion. —>
4] Bypass WSUS for Domain Joined PC
If you are using a computer which is Domain joined, it is recommended to bypass WSUS once.
Create a system restore point first and then open the Run prompt.
Type the following and hit Enter:
Restart Windows Update Service using the Services Manager.
Now, go to the Time and Language settings, and add the language again.
Next, open Registry Editor, and navigate to:
Delete the UseWUServer key or set the value to 1
5] Un-Join Domain and Install the language
On similar lines, you can also choose to un-join the Domain, temporarily. It will remove any policy restriction on the computer, and let you fix the issue. You will have to remove and add the language again.
If this doesn’t work, then you may need to follow a brutal method.
- Change language for all things including display to English US and reboot
- Remove all languages other than the one you need most.
- Install the second or the other language
- Reboot your computer.
The problem with the secondary languages isn’t new. We have seen hundreds of threads in Microsoft answers where people suffer when it comes to any other languages that need to coexist with English US. I hope Microsoft can fix this type of problem to make sure users can be productive, especially those using it for business. —>
We hope these tips helped resolve the problem where you see Input Method Editor disabled on Windows 10.