WinAPI:在 Shell 扩展中打开命名互斥锁以供预览和当前用户应用程序使用
WinAPI: Open Named Mutex in Shell Extension for Preview and Current User Application
我有一个使用命名互斥体的库来保护对注册表中共享配置数据的访问。
此库现在既可用于“普通”桌面应用程序,也可用于 Shell 预览扩展处理程序。我观察到以下行为:
- 如果互斥锁首先由 PrevHost.exe 创建(例如,通过在资源管理器中预览文件),
桌面应用程序可以打开互斥锁,一切正常。
- 如果互斥体首先由桌面应用程序创建,shell 扩展(运行 PrevHost.exe)无法打开互斥体,失败并显示拒绝访问。
我向 CreateMutex
提供了一个 nullptr
安全描述符。
如何初始化允许在当前用户下的 PrevHost.exe 和桌面应用程序 运行 之间共享互斥锁的安全描述符?
文档说,如果 CreateMutex
成功,则创建具有所有访问权限的互斥量。但是,如果互斥体已经以降低的权限创建,则 CreateMutex
无法扩展它们,因此它会失败。这是我的解释,但我可能是错的。
任何情况下的解决方案都是跟进OpenMutex
。
我有一个使用命名互斥体的库来保护对注册表中共享配置数据的访问。
此库现在既可用于“普通”桌面应用程序,也可用于 Shell 预览扩展处理程序。我观察到以下行为:
- 如果互斥锁首先由 PrevHost.exe 创建(例如,通过在资源管理器中预览文件), 桌面应用程序可以打开互斥锁,一切正常。
- 如果互斥体首先由桌面应用程序创建,shell 扩展(运行 PrevHost.exe)无法打开互斥体,失败并显示拒绝访问。
我向 CreateMutex
提供了一个 nullptr
安全描述符。
如何初始化允许在当前用户下的 PrevHost.exe 和桌面应用程序 运行 之间共享互斥锁的安全描述符?
文档说,如果 CreateMutex
成功,则创建具有所有访问权限的互斥量。但是,如果互斥体已经以降低的权限创建,则 CreateMutex
无法扩展它们,因此它会失败。这是我的解释,但我可能是错的。
任何情况下的解决方案都是跟进OpenMutex
。