我有一个需要访问所有当前登录用户的 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();