请教CoCreateInstanceEx产生E_ACCESSDENIED的原因

junegone 2005-08-09 10:46:00
Client : 机器名client1
激活代码为:
HRESULT hr;
hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);

MULTI_QI qi = {&IID_ICalculator, 0, 0};

OLECHAR* szDomain = _T("server1");
OLECHAR* szRmtSvr = _T("192.168.19.106");
OLECHAR* szUser = _T("username");
OLECHAR* szPwd = _T("password");

COAUTHIDENTITY authId;
COAUTHINFO authInfo;
COSERVERINFO svrInfo;

authId.Domain = (USHORT*)szDomain;
authId.DomainLength = _tcslen(szDomain);
authId.User = (USHORT*)szUser;
authId.UserLength = _tcslen(szUser);
authId.Password = (USHORT*)szPwd;
authId.PasswordLength = _tcslen(szPwd);
authId.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;

authInfo.pwszServerPrincName = NULL;
authInfo.dwAuthnSvc = RPC_C_AUTHN_WINNT;
authInfo.dwAuthnLevel = RPC_C_AUTHN_LEVEL_CONNECT;
authInfo.dwCapabilities = EOAC_NONE;
authInfo.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
authInfo.pAuthIdentityData = &authId;
authInfo.dwAuthzSvc = RPC_C_AUTHZ_NAME;

svrInfo.dwReserved1 = NULL;
svrInfo.dwReserved2 = NULL;
svrInfo.pwszName = szRmtSvr;
svrInfo.pAuthInfo = &authInfo;


hr = CoCreateInstanceEx(CLSID_Calculator, NULL, CLSCTX_REMOTE_SERVER,
//&svr,
svrInfo,
1, &qi);


server: 服务器禁用guest用户,机器名为server1,ip为192.168.19.106,有一个用户id为username,
代码为:
SOLE_AUTHENTICATION_SERVICE *pacAuth = new SOLE_AUTHENTICATION_SERVICE;
pacAuth->dwAuthnSvc = RPC_C_AUTHN_WINNT;
pacAuth->dwAuthzSvc = RPC_C_AUTHZ_NAME;
pacAuth->pPrincipalName = NULL;
pacAuth->hr = S_OK;

hr = CoInitializeSecurity( NULL, 1, pacAuth, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);

问题:在client, 我明明是用username发送CoCreateInstanceEx,但是在服务器端用事件查看器发现,client是用guest激活dcom的,由于服务器禁用guest用户,所以导致不能激活成功
请问:怎么样设置才能在服务器上用client传递的用户名和密码激活DCOM?


...全文
468 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
joachern 2005-08-12
  • 打赏
  • 举报
回复
我也遇到这样的问题,不知道如何解决
junegone 2005-08-10
  • 打赏
  • 举报
回复
两台机器是分开的workstation,没有在同一个域内
junegone 2005-08-09
  • 打赏
  • 举报
回复
COM高手不在?
nelsonc 2005-08-09
  • 打赏
  • 举报
回复
服务器是WorkStation还是Domain中的机器或质Domain Server?
junegone 2005-08-09
  • 打赏
  • 举报
回复
楼上的可能没明白, 我是在获取接口的时候被拒绝,而不是在使用接口的时候被拒绝
junegone 2005-08-09
  • 打赏
  • 举报
回复
帅哥,这些东西我都看了,但是不明白,我明明在COSERVERINFO中传递了用户名,但是在服务器端发现激活的用户依然是guest
亿云力科技 2005-08-09
  • 打赏
  • 举报
回复
可能你需要调用CoSetProxyBlanket().

以下来自CoCreateInstanceEx()的MSDN help:

The COSERVERINFO structure passed as the pServerInfo parameter contains the security settings that COM will use when creating a new instance of the specified object. Note that this parameter does not influence the security settings used when making method calls on the instantiated object. Those security settings are configurable, on a per-interface basis, with the CoSetProxyBlanket function.
内容概要:本文研究了计及需求侧响应的日前、日内两阶段鲁棒备用优化问题,提出了一种基于数据驱动的两阶段分布鲁棒优化方法,结合1-范数和∞-范数构造不确定性集合,有效刻画风电、光伏出力及负荷等多重不确定因素的波动特性。研究构建了电热综合能源系统的联合优化模型,通过协调日前调度计划与日内实时调整,充分发挥需求侧响应资源的灵活调节能力,提升系统在不确定性环境下的备用充裕性与运行鲁棒性,并采用Matlab进行建模与仿真验证,结果表明该方法在保障系统安全的同时显著改善了经济性。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事新型电力系统调度、综合能源系统规划与运行的工程技术人员。; 使用场景及目标:①应用于高比例可再生能源接入背景下电力系统备用容量的优化配置;②为综合能源系统在多重不确定性下的鲁棒调度提供决策支持;③支撑需求侧资源参与系统辅助服务的机制设计与仿真验证,推动源荷互动协调发展。; 阅读建议:建议读者结合Matlab代码深入理解两阶段鲁棒优化的建模过程,重点关注不确定性集构建、鲁棒约束转化及C&CG等求解算法的实现细节,可进一步拓展至其他分布鲁棒优化形式或耦合更多能源形式的综合能源系统场景。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧