ようこそ
暑い日が続くが、体調に変わりはないかな。
特に体調は問題ないです!
こんにちは
さて
xxxFreeKeyboardLayoutsの解析は簡単だったね。
VOID xxxFreeKeyboardLayouts(PWINSTATION_OBJECT pWinSta,BOOL bFree)
{
PKL pKL = HKLtoPKL(gptiCurrent, (HKL)(INT_PTR)HKL_NEXT);
while (pKL)
{
xxxInternalUnloadKeyboardLayout(pWinSta, pKL, 0x80000000);
pKL = HKLtoPKL(gptiCurrent, (HKL)(INT_PTR)HKL_NEXT);
}
if (bFree)
UserAssignmentUnlock((PVOID*)&pWinSta->spklList);
}
xxxFreeKeyboardLayoutsはxxxLoadKeyboardLayoutExから呼び出されているようだ。
次はUSER32!GetKeyboardLayout。これも簡単。
HKL WINAPI GetKeyboardLayout(DWORD dwThreadId)
{
return (HKL)NtUserCallOneParam(dwThreadId, 0x28);
}
ReactOSではinline関数のNtUserxGetKeyboardLayoutをはさむ形になるが、 ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT == 0x28となってReactOSと実装が一致する。
その次はUSER32!GetKeyboardLayoutNameW。これはどうでしたか? なんとなくおかしいことに気づきましたか?
ghidraの方では謎の処理が挟まっていることに気付きました
謎とは?
CONCAT22という名前の処理が挟まっていました
答えを言うと、NtUserGetKeyboardLayoutNameの第一引数の型がPUNICODE_STRINGだったということです。
清書して
BOOL WINAPI GetKeyboardLayoutNameW(LPWSTR pwszKLID)
{
UNICODE_STRING Name;
Name.Buffer = pwszKLID;
Name.Length = 0;
Name.MaximumLength = KL_NAMELENGTH * sizeof(WCHAR);
return NtUserGetKeyboardLayoutName@4(&Name);
}
これはReactOS側のNtUserGetKeyboardLayoutNameの実装がおかしかったということです(だれも気づいていなかった)。
こういう風にたまにReactOSの実装の間違いに遭遇しますので、早めに発見して修正していきましょう。
お知らせ:IMEのインストールに成功しました:reactos/reactos#4596
【課題】mzimejaをReactOSにインストールしたときのログを取得せよ。
WARNING: calling stub ImmWINNLSEnableIME(0x00140076,0x0)
(win32ss/user/ntuser/defwnd.c:1137) err: In Paint and Client area is not empty!
(win32ss/user/ntuser/defwnd.c:1137) err: In Paint and Client area is not empty!
WARNING: calling stub ImmWINNLSEnableIME(0x00140076,0xffffffff)
(dll/ntdll/ldr/ldrinit.c:1887) WARN: Accepting different LOAD_CONFIG size!
(win32ss/user/ntuser/callback.c:1093) err: GetCharsetInfo Failed!!
(win32ss/gdi/gdi32/objects/gdiobj.c:326) Trying to delete system object 0x00850016
WARNING: calling stub ImmWINNLSEnableIME(0x00050172,0x0)
(win32ss/user/ntuser/defwnd.c:1137) err: In Paint and Client area is not empty!
(win32ss/gdi/ntgdi/palette.c:773) RealizePalette unimplemented for memory managed DCs
(win32ss/gdi/ntgdi/palette.c:773) RealizePalette unimplemented for memory managed DCs
WARNING: calling stub ImmWINNLSEnableIME(0x00050172,0xffffffff)
imm32!ImmWINNLSEnableIMEが未実装だ。
【課題】imm32!ImmWINNLSEnableIMEを解析せよ。
【課題】ImmWINNLSEnableIMEがどこから呼び出されているか調査せよ(日本語ReactOSと日本語WinXP)。
今日はここまで。
わかりました
疑問点は隠さずに伝えて下さい。
わかりました 気を付けます
次は火曜日。では