3.3.4, Windows User Profiles, Registry Locking &
Corruption, andSomething Else
James ''Wez'' Weatherall
Wed Nov 13 15:34:00 2002
> The issue I am addressing involves VNC 3.3.4 and Windows (XP) user
> with a side result of the registry being locked (and ultimately
I have found one potential cause of this problem. See below.
> So about that registry? Running under the default VNC 3.3.4 service
> configuration, VNC locks the "current user" registry, and the registry
> ultimately becomes corrupted. On logoff, shutdown, or reboot, the
> application event warning is logged: "Windows saved user <Computer
> Name>\<User ID> registry while an application or service was still
> registry during logoff. The memory used by the user's registry has
> freed. The registry will be unloaded when it is no longer in use.
The error message above does NOT indicate registry corruption. All it
is in fact saying is that the OS cannot unload the user's registry hive,
and will instead unload it when it is no longer in use by any processes.
> As a result of the registry being corrupted, I cannot run SysPrep to
> for deployment; I have not noticed any other averse circumstances so
In general, the above error should have few adverse side-effects. the
main problem it would cause would be that since the user's registry
cannot be unloaded normally, their profile cannot be replicated. Also,
any task which requires that the user's registry be unloaded could fail.
The possible cause:
The current release of WinVNC uses a VNCHooks.dll, which is injected
into running applications which have windows on the current desktop, in
order to obtain feedback on when parts of the screen may have changed.
The DLL reads some settings from the user's registry hive.
The DLL is only unloaded from a process either when all clients
disconnect from the WinVNC server, or when that process quits.
So it is possible that a system service (i.e. a process which does not
get killed when the user logs out) could produce a window on the desktop
directly, causing it to be hooked by VNCHooks. VNCHooks would then open
the user registry when a VNC connection was active. If the user logs
out over the VNC connection, the VNCHooks DLL would remain active in the
service that had displayed a window. The DLL would still hold a key to
the user's registry, preventing it from being freed properly.
I hacve produced a replacement DLL which should fix this problem. If
anyone can reliably reproduce the problem then I can send them a copy of
the DLL to test.
Wez @ RealVNC Ltd. - http://www.realvnc.com
Open Source VNC - Commercial Support & Development