【发布时间】:2012-06-19 01:32:41
【问题描述】:
我有一个需要访问所有当前登录用户的 Windows Media Player 库的 Windows 服务。由于它是一项服务,因此我必须模拟登录用户,以便对 WMP COM 的调用将在模拟用户的上下文中返回信息(即返回模拟用户的库而不是系统的库)。我需要为每个登录的用户执行此操作。
我能够通过ImpersonateLoggedOnUser 在线程中成功模拟用户,获取用户的库,然后执行RevertToSelf。当我尝试为下一个登录用户执行此操作时,就会出现问题。对 WMP COM 的任何后续调用似乎总是返回第一个模拟用户的库,而不是当前被模拟的用户。
这是我正在做的事情的一般要点:
CoInitialize(NULL);
IWMPCore* Core = NULL;
CoCreateInstance(__uuidof(WindowsMediaPlayer), 0, CLSCTX_INPROC_SERVER, __uuidof(IWMPCore), (void **)&Core);
IWMPMediaCollection* Collection = NULL;
Core->QueryInterface(__uuidof(WindowsMediaPlayer), (void **)&Collection);
...
//Do work
...
CoUninitialize();
【问题讨论】:
-
发布一个 sn-p 然后 not 发布您遇到问题的代码行是毫无意义的。
-
@HansPassant 为什么投反对票?如果我知道我遇到问题的确切代码行,我就不需要发布这个问题了。如果您需要查看更多代码才能回答,为什么不直接问呢?
标签: c++ com impersonation wmp wmplib