首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从IE EPM BHO中访问命名管道服务器

从IE EPM BHO中访问命名管道服务器
EN

Stack Overflow用户
提问于 2016-08-25 15:00:28
回答 1查看 542关注 0票数 2

我正在尝试对我们的传统产品进行一些更改,以支持BHO上的IE EPM。我已经设法加载了它并调用了各种方法-- SetSite、DocumentComplete等。

在尝试连接到在Windows服务中运行的命名管道服务器时,我似乎遇到了问题。

以前,我们已经做了一些更改,允许处于保护模式的IE BHO使用LOW_INTEGRITY_SDDL_SACL (“S:(ML;;NW;LW)”)访问命名管道服务器。在代码中,我们使用方法创建安全描述符,然后在实际的SD或SECURITY_ATTRIBUTES对象上执行SetSecurityDescriptorSacl。这允许BHO代码访问系统服务中托管的命名管道服务器。

我参考了几篇文章,其中最有用的可能是这篇文章-- Is there a way to create a named pipe from an AppContainer BHO on IE11?

我对SDDL做了一些更改,所以它现在看起来像-

代码语言:javascript
复制
#define EPM_INTEGRITY_SDDL L"S:(ML;;NW;;;LW)D:(A;;FA;;;SY)(A;;FA;;;WD)(A;;FA;;;AC)"

这基本上为DACL部分中的每个人、所有应用程序包和系统提供了完全的文件访问权限。我知道这太宽松了,但我希望这至少能在我使用SetSecurityDescriptorDacl的时候起作用:-)

无论如何,设置SD的代码现在如下所示。我是不是漏掉了什么?

代码语言:javascript
复制
if (!ConvertStringSecurityDescriptorToSecurityDescriptor(EPM_INTEGRITY_SDDL, SDDL_REVISION_1, &pLISD, NULL))
{
    OutputDebugString(L"Unable to get the app-container integrity security descriptor");
    return false;
}

PACL pAcl = 0;
BOOL bAclPresent   = FALSE;
BOOL bAclDefaulted = FALSE;             
if (!GetSecurityDescriptorSacl(pLISD, &bAclPresent, &pAcl, &bAclDefaulted) || !bAclPresent)
{
    return false;
}

if (!SetSecurityDescriptorSacl(pSecurityDesc, TRUE, pAcl, FALSE))
{
    return false;
}

pAcl = 0;
bAclPresent = FALSE;
bAclDefaulted = FALSE;
if (!GetSecurityDescriptorDacl(pLISD, &bAclPresent, &pAcl, &bAclDefaulted) || !bAclPresent)
{
    OutputDebugString(L"Setting to low integrity : No DACL Available");
            return false;
}

if (!SetSecurityDescriptorDacl(pSecurityDesc, TRUE, pAcl, FALSE))
{
    OutputDebugString(L"Setting to low integrity : Unable to set the DACL");
    return false;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 10:20:16

我做了一些研究,并设法找到了一种可行的方法。

首先,AppContainer内部的BHO似乎不能访问在它自己的会话之外的Windows会话中创建的命名管道等。因为我是在Windows服务中创建命名管道服务器的,所以我指定什么安全描述符并不重要。恐怕行不通。

其次,使用介质完整性代理进程创建具有相同尝试SD的命名管道,它将是可访问的。因此,我采取的方法是为我的BHO创建一个代理,将这些消息转发到Windows服务。因此,我的“服务器”逻辑不需要移动。

我对这种方法并不感兴趣,但这并不是太糟糕,因为我也可以将此代码重用于基于JS的扩展,而无需完全重写核心代码。

第三,我需要一些方法来调用BHO,要求它根据外部刺激采取一些行动。为此,我在BHO的SetSite中创建了一个HWND_MESSAGE窗口,并在代理进程中使用SendMessage调用它。因为这是跨进程的,所以您需要使用WM_COPYDATA。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39138674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档