在开始菜单搜索中,用于覆盖“以管理员身份运行”的COM Shell扩展失败

时间:2019-01-16 14:59:37

标签: c++ windows winapi com shell-extensions

我正在使用COM服务器DLL来覆盖Windows 10中的“以管理员身份运行”。我是通过在Computer \ HKEY_CLASSES_ROOT \ exefile \ shell \ runas \ command注册表上将DLL GUID设置为DelegateExecute来实现的。键。我同时为32位和64位版本创建了CLSID条目(作为InprocServer32)。

这在大多数情况下都可以正常工作。右键单击资源管理器中的exe文件并以管理员身份运行,将其委派给DLL,如果安装程序尝试以提升的特权启动,它将委派给DLL,右键单击开始菜单项,依此类推。

唯一的问题是,使用开始菜单搜索并单击列为“运行命令”的项目(例如搜索“ wusa”),然后单击搜索右侧的“以管理员身份运行”(或右键单击结果)什么都不做。

使用来自sysinternals的Process Monitor,我可以看到RuntimeBroker.exe正确读取了注册表,并检测到我的DLL是需要调用的DLL,但是在获取文件名后它立即停止,而是查看了名为的注册表项。 .. \ AppActivationErrorHandlers \ 80270301,然后停止。 0x80270301是名为E_SHELL_EXTENSION_BLOCKED的符号的值,所以我假设它是相关的。但是我找不到有关为什么它被阻止的信息。

有人可以帮我指出正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我通过从InprocServer(DLL)切换到LocalServer(EXE)解决了问题。大概是因为程序外exe的安全要求比DLL低。