https://bugs.winehq.org/show_bug.cgi?id=39863
Bug ID: 39863 Summary: Microsoft .NET Runtime Optimization Service 2.x terminates prematurely due to failure to hook up registry notifier ('RegNotifyChangeKeyValue' must treat NTSTATUS 'STATUS_PENDING' as success) Product: Wine Version: 1.9.0 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: advapi32 Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
as the summary says.
Encountered when installing/running .NET Framework 2.0 Service packs.
Prefix bootstrapping yields:
--- snip --- $ wineboot fixme:service:scmdatabase_autostart_services Auto-start service L"clr_optimization_v2.0.50727_32" failed to start: 1053 --- snip ---
Relevant part of trace log:
--- snip --- $ WINEDEBUG=+pid,+tid,+seh,+relay,+service,+reg,+ntdll,+server wineboot
log.txt 2>&1
... 0012:001a:trace:service:service_control_dispatcher got request 1 for service L"clr_optimization_v2.0.50727_32" ... 0012:001a:trace:service:service_handle_start L"clr_optimization_v2.0.50727_32" argsize 32 ... 0012:001b:Call ntdll.NtCreateKey(0094e18c,0002001f,0094e1f8,00000000,0094e1e8,00000000,00000000) ret=7ec6f1f1 0012:001b:trace:reg:NtCreateKey (0x14,L"SOFTWARE\Microsoft\.NetFramework\v2.0.50727\NGENService\ListenedState",(null),0,2001f,0x94e18c) 0012:001b:trace:reg:NtCreateKey <- 0x7c 0012:001b:Ret ntdll.NtCreateKey() retval=00000000 ret=7ec6f1f1 ... 0012:001b:Call KERNEL32.CreateEventW(00000000,00000001,00000000,00000000) ret=6405c356 ... 0012:001b:Ret KERNEL32.CreateEventW() retval=00000070 ret=6405c356 ... 0012:001b:Call KERNEL32.ResetEvent(00000070) ret=6405a7bf ... 0012:001b:Ret KERNEL32.ResetEvent() retval=00000001 ret=6405a7bf 0012:001b:Call advapi32.RegOpenKeyExW(0000007c,6405137c L"",00000000,00020019,0094e4fc) ret=64075e45 ... 0012:001b:Ret advapi32.RegOpenKeyExW() retval=00000000 ret=64075e45 0012:001b:Call advapi32.RegQueryValueExW(00000084,64051a1c L"RootstoreDirty",00000000,0094e4f8,0094e4e4,0094e4e0) ret=64076316 0012:001b:trace:reg:RegQueryValueExW (0x84,L"RootstoreDirty",(nil),0x94e4f8,0x94e4e4,0x94e4e0=4) ... 0012:001b:Ret advapi32.RegQueryValueExW() retval=00000000 ret=64076316 ... 0012:001b:Call advapi32.RegNotifyChangeKeyValue(0000007c,00000000,00000004,00000070,00000001) ret=6405a808 0012:001b:trace:reg:RegNotifyChangeKeyValue (0x7c,0,4,0x70,1) 0012:001b:Call ntdll.NtNotifyChangeKey(0000007c,00000070,00000000,00000000,0094e48c,00000004,00000000,00000000,00000000,00000001) ret=7ec73ed8 0012:001b:trace:reg:NtNotifyChangeMultipleKeys (0x7c,0,(nil),0x70,(nil),(nil),0x94e48c,0x00000004, 0x00000001,(nil),0x00000000,0x00000000) ... 001b: set_registry_notification( hkey=007c, event=0070, subtree=0, filter=00000004 ) 001b: set_registry_notification() = PENDING ... 0012:001b:Ret ntdll.NtNotifyChangeKey() retval=00000103 ret=7ec73ed8 0012:001b:Call ntdll.RtlNtStatusToDosError(00000103) ret=7ec73ef8 0012:001b:Ret ntdll.RtlNtStatusToDosError() retval=000003e5 ret=7ec73ef8 0012:001b:Ret advapi32.RegNotifyChangeKeyValue() retval=000003e5 ret=6405a808 ... 0012:001b:Call msvcr80._vsnwprintf_s(0094e2f0,00000079,ffffffff,64051d50 L"ResetDirtyRootStore(): Failed to hook up registry notifier\n",0094e50c) ret=640721b7 ... 0012:001b:Call msvcr80._vsnwprintf_s(0094e2f8,00000075,ffffffff,64052a10 L"InitController(): Failed to register root store notifier\n",0094e514) ret=640721b7 ... 0012:001b:Call msvcr80._vsnwprintf_s(0094e2f0,00000043,ffffffff,640522a8 L"ShutdownController(): Completed\n",0094e50c) ret=640721b7 ... 0012:001b:Call msvcr80._vsnwprintf_s(0094e2f8,00000037,ffffffff,6405296c L"InitController(): Failed\nr",0094e514) ret=640721b7 ... 0012:001b:Call KERNEL32.TerminateProcess(ffffffff,00000001) ret=64067d49 0012:001b:Call ntdll.NtTerminateProcess(ffffffff,00000001) ret=7b86c228 0012: *process killed* --- snip ---
Source: http://source.winehq.org/git/wine.git/blob/723146ca6d3953ed0465e189ab8ead1d9...
--- snip --- 2700 LSTATUS WINAPI RegNotifyChangeKeyValue( HKEY hkey, BOOL fWatchSubTree, 2701 DWORD fdwNotifyFilter, HANDLE hEvent, 2702 BOOL fAsync ) 2703 { 2704 NTSTATUS status; 2705 IO_STATUS_BLOCK iosb; 2706 2707 hkey = get_special_root_hkey( hkey, 0 ); 2708 if (!hkey) return ERROR_INVALID_HANDLE; 2709 2710 TRACE("(%p,%i,%d,%p,%i)\n", hkey, fWatchSubTree, fdwNotifyFilter, 2711 hEvent, fAsync); 2712 2713 status = NtNotifyChangeKey( hkey, hEvent, NULL, NULL, &iosb, 2714 fdwNotifyFilter, fWatchSubTree, NULL, 0, 2715 fAsync); 2716 2717 if (status && status != STATUS_TIMEOUT) 2718 return RtlNtStatusToDosError( status ); 2719 2720 return ERROR_SUCCESS; 2721 } --- snip ---
Regards