[Bug 37867] Rapid Typing 5 crashes on startup (support for keyboard layout files missing)

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Jan 9 13:21:25 CST 2015


https://bugs.winehq.org/show_bug.cgi?id=37867

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
            Version|unspecified                 |1.7.33
                URL|                            |http://www.rapidtyping.com/
                   |                            |downloads/typing-tutor/beta
                   |                            |/RapidTyping_Setup_5.0.98.e
                   |                            |xe
           Keywords|                            |download
          Component|-unknown                    |user32
                 CC|                            |focht at gmx.net
     Ever confirmed|0                           |1
            Summary|rapid typing   doesn't      |Rapid Typing 5 crashes on
                   |start                       |startup (support for
                   |                            |keyboard layout files
                   |                            |missing)

--- Comment #1 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming.

The trace log doesn't reveal it, the crash on startup is just a manifestation
of a problem which happens much earlier.

--- snip ---
...
0023:Call user32.CopyRect(0033f0e4,0033f11c) ret=00432126
0023:Ret  user32.CopyRect() retval=00000001 ret=00432126
0023:Call ntdll.RtlAllocateHeap(02100000,00000000,00000030) ret=0050d12c
0023:Ret  ntdll.RtlAllocateHeap() retval=021aeb48 ret=0050d12c
0023:trace:seh:raise_exception code=c0000005 flags=0 addr=0x43215f ip=0043215f
tid=0023
0023:trace:seh:raise_exception  info[0]=00000000
0023:trace:seh:raise_exception  info[1]=00000040
0023:trace:seh:raise_exception  eax=00000000 ebx=00000000 ecx=02103670
edx=00000000 esi=021ae080 edi=021ae758
0023:trace:seh:raise_exception  ebp=0033f160 esp=0033f0fc cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210246
0023:trace:seh:call_stack_handlers calling handler at 0x531888 code=c0000005
flags=0 
--- snip ---

--- snip ---
...
0043211E  51             PUSH ECX
0043211F  50             PUSH EAX
00432120  FF15 90635300  CALL DWORD PTR DS:[<&USER32.CopyRect>]
00432126  68 CCC25300    PUSH RapidTyp.0053C2CC         ; "PanelButSound.bmp"
0043212B  E8 00160A00    CALL RapidTyp.004D3730
00432130  3BFB           CMP EDI,EBX
00432132  74 06          JE SHORT RapidTyp.0043213A
00432134  89BE 10060000  MOV DWORD PTR DS:[ESI+610],EDI
0043213A  8B0D 44BF5700  MOV ECX,DWORD PTR DS:[57BF44]
00432140  8B81 740C0000  MOV EAX,DWORD PTR DS:[ECX+C74] ; EAX == NULL ptr
00432146  3BC3           CMP EAX,EBX
00432148  75 04          JNZ SHORT RapidTyp.0043214E
...
00432153  3999 C8090000  CMP DWORD PTR DS:[ECX+9C8],EBX
00432159  8986 88010000  MOV DWORD PTR DS:[ESI+188],EAX
0043215F  8B40 40        MOV EAX,DWORD PTR DS:[EAX+40]  ;  *boom*
00432162  0F95C2         SETNE DL
...
--- snip ---

The class instance data resides in dynamically allocated heap chunk,
initialized during main window creation.

The actual point of class member initialization '[ECX+C74]' ought to happen a
bit later.

--- snip ---
...
0023:Call user32.CreateWindowExW(00000000,005437ac L"RAPIDTYPING",0053abc4
L"RapidTyping",00cf0000,00000000,00000000,00000316,0000024e,00000000,00000000,00400000,00000000)
ret=004c9398 
...
0023:Call advapi32.RegOpenKeyExW(80000002,0210bea0
L"SYSTEM\\CurrentControlSet\\Control\\Keyboard
Layouts\\00000409",00000000,00000001,0033f054) ret=004f4b52
0023:Ret  advapi32.RegOpenKeyExW() retval=00000002 ret=004f4b52
...
--- snip ---

It seems the app wants to load a keyboard layout (descriptor) using registry
looked up keyboard mapping file.

After putting in registry data and providing US keyboard layout file
(http://www.dlldump.com/download-dll-files_new.php/dllfiles/K/kbdus.dll/5.1.2600.0/download.html),
the app is happy and shows the main user interface.

There is a large onscreen keyboard shown for an interactive typing tutorial.

--- snip ---
REGEDIT4

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts\00000409]
"Layout File"="kbdus.dll"
"Layout Text"="US"
--- snip ---

Also mentioned here: https://bugs.winehq.org/show_bug.cgi?id=28170#c1 

Bug 28170 talks about unimplemented 'USER32.dll.LoadKeyboardLayoutEx' - the API
implementation most likely relies on the keyboard layout files.

Trace log, showing successful access:

--- snip ---
...
0023:Call advapi32.RegOpenKeyExW(80000002,021699d0
L"SYSTEM\\CurrentControlSet\\Control\\Keyboard
Layouts\\00000409",00000000,00000001,0033ece4) ret=004f4b52
0023:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=004f4b52
0023:Call advapi32.RegQueryValueExW(000000a4,02169bb0 L"Layout
File",00000000,00000000,00000000,0033ece8) ret=004f4b88
0023:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=004f4b88
...
0023:Call advapi32.RegQueryValueExW(000000a4,02169bb0 L"Layout
File",00000000,0033ecec,02168458,0033ece8) ret=004f4bd4
0023:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=004f4bd4
...
0023:Call advapi32.RegCloseKey(000000a4) ret=004f4c09
0023:Ret  advapi32.RegCloseKey() retval=00000000 ret=004f4c09
...
0023:Call KERNEL32.GetSystemDirectoryW(0033edd8,00000104) ret=004c82c5
0023:Ret  KERNEL32.GetSystemDirectoryW() retval=00000013 ret=004c82c5
...
0023:Call KERNEL32.LoadLibraryW(02154ad8 L"C:\\windows\\system32\\kbdus.dll")
ret=004c8336
0023:Ret  KERNEL32.LoadLibraryW() retval=5fff0000 ret=004c8336
0023:Call KERNEL32.GetProcAddress(5fff0000,0054ab5c "KbdLayerDescriptor")
ret=004c8344
0023:Ret  KERNEL32.GetProcAddress() retval=5fff1a5a ret=004c8344
0023:Call KERNEL32.GetModuleHandleW(00550d48 L"kernel32") ret=004f49fa
0023:Ret  KERNEL32.GetModuleHandleW() retval=7b810000 ret=004f49fa
0023:Call KERNEL32.GetProcAddress(7b810000,00550d38 "IsWow64Process")
ret=004f4a01
0023:Ret  KERNEL32.GetProcAddress() retval=7b824364 ret=004f4a01
0023:Call KERNEL32.IsWow64Process(ffffffff,0033ed64) ret=004f4a15
0023:Ret  KERNEL32.IsWow64Process() retval=00000001 ret=004f4a15
0023:Call KERNEL32.FreeLibrary(5fff0000) ret=004c83bc
0023:Ret  KERNEL32.FreeLibrary() retval=00000001 ret=004c83bc
--- snip ---

Useful information:

https://stackoverflow.com/questions/11747532/kbdlayerdescriptor-pvktowchartable-returns-null-on-win64

http://www.codeproject.com/Questions/211107/RegQueryValueEx-programcrash-on-64-Bit

https://code.msdn.microsoft.com/windowshardware/Keyboard-Layout-Sample-b142d9e3

http://msdn.microsoft.com/en-us/goglobal/bb964665 (The Microsoft Keyboard
Layout Creator)

$ sha1sum RapidTyping_Setup_5.0.98.exe 
a3c0df7b10c9bf6c27f74eed001cc715f156f825  RapidTyping_Setup_5.0.98.exe

$ du -sh RapidTyping_Setup_5.0.98.exe 
16M    RapidTyping_Setup_5.0.98.exe

$ wine --version
wine-1.7.33-191-ge899bd8

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list