WMP COM 无法在后续用户模拟下运行
WMP COM fails to operate under subsequent user impersonations
我有一个Windows服务,需要访问所有当前登录用户的Windows Media Player库。由于这是一项服务,因此我必须模拟登录用户,以便对 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();
您确定要发布所有接口吗?
您是否尝试过调用CoFreeUnusedLibrariesEx并在WMP dll被卸载时签入Process Explorer(但是只有具有DllCanUnloadNow导出的dll才会被卸载)?
如果仍然失败,那么 WMP 可能无法完全卸载,然后您可能必须为每个用户使用帮助程序/主机进程,并使用某种形式的 IPC 将数据恢复到主进程中。
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- G锁定铸造到基础上会释放模拟行为
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 模拟返回具有多个用户定义转换的类型的方法
- SFML/C++ 模拟用户输入
- 如何将用户返回到模拟前的状态
- 如何调用模拟另一个用户而不是SYSTEM的函数
- 如何正确模拟服务中的用户
- WMP COM 无法在后续用户模拟下运行
- 在正在运行的桌面应用程序上模拟用户操作
- c++服务-模拟用户登录
- 在服务中模拟和加载用户配置文件后,环境变量是否受到影响