用户个人资料引用计数如何运作?

时间:2017-07-21 15:24:53

标签: winapi impersonation

我们有使用LoadUserProfile()启动流程的服务。如果进程终止,那些服务会调用UnloadUserProfile(),然后自行终止服务。

那里的一切都很好。还有多种服务。但是,如果我们通过多个服务使用相同的用户帐户,则随机出现问题。可能是其中一个服务使用相同的用户帐户,重启或停止。

问题是用户配置文件在(我们的)服务中随机卸载,然后从服务启动的进程无法再访问用户配置文件。例如HKCU的问题 - 加载用户的访问。

注意:我所谈论的服务只是我们的服务。

我们的服务通过启动来调用LoadUserProfile(),并通过停止来调用UnloadUserProfile()。正如@RbMm指出卸载不是必要的,但即使我们自己调用它也不应该是问题。

感谢@RbMm提供的ReferenceCounting信息。 (未在LoadUserProfile() - 文档中记录)

要解决我的问题,我需要了解引用计数。想象一下,由2个进程或服务加载的用户帐户配置文件。我会在这里使用服务。

我需要了解这些州会发生什么;

1: ServiceX 调用LoadUserProfile(),然后 ServiceY 调用LoadUserProfile(),然后 ServiceX 来电UnloadUserProfile(),然后 ServiceX 停止。引用计数?

2: ServiceX 调用LoadUserProfile(),然后 ServiceY 调用LoadUserProfile(),然后 ServiceX 呼叫UnloadUserProfile(),然后 ServiceX 再次呼叫UnloadUserProfile(),然后 ServiceX 停止。引用计数?

3: ServiceX 调用LoadUserProfile(),然后 ServiceY 调用LoadUserProfile(),然后 ServiceX 停止。引用计数?

4: ServiceX 调用LoadUserProfile(),然后 ServiceY 调用LoadUserProfile(),然后 ServiceX 再次呼叫LoadUserProfile(),然后 ServiceX 停止。引用计数?

有人可以解释一下吗?

0 个答案:

没有答案