与Internet Explorer中的服务交互
Interacting with a Service from Internet Explorer
我试图让IE9在保护模式下运行时与COM服务(使用Visual Studio 2010的向导创建)进行交互。如果我以admin身份运行服务,而不是将其注册为服务,我的BHO对spUnk.CoCreateInstance
的调用返回S_OK
(我正在观看AtlTrace的输出)。如果IE以管理员身份运行,BHO也能够成功调用spUnk.CoCreateInstance
。但是,如果我注册并将service作为实际服务运行,并在保护模式下运行IE, spUnk.CoCreateInstance
返回0x80070005
(拒绝访问)。我知道IE至少能够找到服务,因为如果服务未注册,或者如果它已注册但通过services.msc设置为"禁用",我会得到其他错误。
是否有办法修改服务、BHO或注册表,使对spUnk.CoCreateInstance
的调用成功?
注册表项(按MSDN:从保护模式启动进程):
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftInternet Explorer
Low RightsElevationPolicy{89091D9A-1F9A-4721-993B-D72C2333AAD1}]
"AppName"="tstsrv.exe"
"AppPath"="C:\path\tstsrv\Debug"
"Policy"=dword:00000003
"CLSID"="{90719221-2DE2-45c2-B8CB-2018C4D66C48}"
BHO代码用于呼叫服务(hr = spUnk.CoCreateInstance(CLSID_tstsrv);
是有问题的线路):
MyAddin::SetSite(IUnknown *pUnkSite) {
//...
GUID CLSID_tstsrv = { 0x90719221, 0x2de2, 0x45c2, { 0xb8, 0xcb, 0x20,
0x18, 0xc4, 0xd6, 0x6c, 0x48 } };
CComPtr<IUnknown> spUnk;
hr = spUnk.CoCreateInstance(CLSID_tstsrv);
AtlTrace("CoCreateInstance(CLSID_tstsrv) => %p [%08x]n", spUnk.p, hr);
//...
}
一些服务的初始化代码:
HRESULT CtstsrvModule::InitializeSecurity(void)
{
if(m_bSecurityInitialized) return S_OK;
m_bSecurityInitialized = true;
return ::CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_DYNAMIC_CLOAKING, 0);
}
又折腾了一个小时,我发现调用这段代码(archive.org) (SetLaunchActPermissions
和GetLaunchActPermissionsWithIL
)可以使它工作。
From the page:
默认情况下,COM将阻止低IL客户端绑定到运行任何COM服务器的实例。为了允许绑定,COM服务器的启动/激活安全描述符必须包含一个SACL指定Low IL标签(参见前一节的示例)创建这样的安全描述符的代码)。
相关文章:
- Qt VTK交互风格的信号到小部件
- Qt Quick-如何仅从c++代码与qml属性交互
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 检测win32服务创建和删除的最佳方法
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 复制和交换习惯用法与移动操作之间的交互
- gRPC 生成的代码缺少服务实现
- C# DLL 从C++应用程序调用 SOAP Web 服务
- 在 Winrt/C++ 中使用应用服务
- 将第二个 GATT 服务添加到 Movesense 容器
- 从运行服务的应用程序代码中提取窗口句柄
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- 对于使用高级服务的分钟数和应付金额,我不断得到相同的数字
- 通过 Tor 服务C++ socket.io 客户端
- Qt QGraphicsProxyWidget 与 QGraphicsScene 的交互
- 创建服务失败0x6f7存根收到错误数据
- Windows 7中的用户交互服务
- "invalid_grant" - C++年通过Google服务帐户与Googleapi日历进行交互
- 与Internet Explorer中的服务交互