用户名不同的计算机之间的调用dcom

OPC DCOM详细配置方法 - 不关防火墙不换登陆用户 1. 前言   OPC DCOM的设置是实现跨网络OPC通信的基础,现有的一些OPC DCOM配置教程虽然讲解了如何配置DCOM,但没有讲清楚为什么要这么做,而且各个教程涉及的配置方法也不尽相同。   为了彻底搞清楚OPC DCOM的配置过程,我重新做了两台机器的系统,一台是Windows 7 32位,一台是Windows 10 64位,并且重零开始完整的测试了正常运行OPC DCOM所需的最少的... 阅读详情

DCOM是依赖于RPC服务的,是一种分布式远程过程(进程)调用,调用代码在远程主机上执行,使用远程主机的系统资源,因此要有远程主机所属的访问权限,一般来说访问用户应是远程主机本地用户或主机所属的域用户,所以

  第一步是在远程主机或其域上注册(获得)一个有足够权限的用户,

  第二步是使用此用户令牌激活远程COM服务器,方法是使用CoInitializeSecurity & CoCreateInstanceEx函数(见文后例子),成功激活后就得到相关请求接口的代理,此时代理并没有对远程服务器访问的权限,

  第三步是为接口代理设置访问权限,方法是使用CoSetProxyBlanket函数,此后就可以使用代理指针进行方法调用了。见文后例子

  以上是客户端要做的处理,至于服务器端,只要使用CoInitializeSecurity函数设置一下访问许可权限就可以了(有时客户端也要进行这一处理,比如使用了连接点),对于即存的服务器程序使用dcomcfg工具在注册表里设置也可以。

  CoSetProxyBlanket函数调用例子:

  *******************************

  原例子:

  

IRecordServerLink* pRSL=(IRecordServerLink*)mq[0].pItf;
 
hr = CoSetProxyBlanket( pRSL, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
    
        RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, &caid, EOAC_NONE);
pRSL->Methods();

  ----------------------------------

  修改后的例子:

  

hr = CoSetProxyBlanket( pAccount, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
    
        RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, &caid, EOAC_NONE);
pAccount->Deposit(x);

  ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

  CoInitializeSecurity & CoCreateInstanceEx函数调用例子:

  *********************************************************

  例子1:

  

HRESULT hr;
hr = CoInitialize(NULL);
ASSERT(SUCCEEDED(hr));
MULTI_QI qi;
qi.pIID = &IID_ICRemoteTime;
qi.hr = NULL;
qi.pItf = NULL;
COAUTHIDENTITY authidentity;
authidentity.User = L"administrator";  ////你机子的帐号
authidentity.UserLength = wcslen(authidentity.User);
authidentity.Domain = NULL;
authidentity.DomainLength = 0;
authidentity.Password = L"";     ////密码
authidentity.PasswordLength = wcslen(authidentity.User);
authidentity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
COAUTHINFO authinfo = {-1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT,
   
        RPC_C_IMP_LEVEL_IMPERSONATE, &authidentity, 0};
COSERVERINFO servInf;
servInf.dwReserved1 = NULL;
servInf.dwReserved2 = NULL;
// servInf.pAuthInfo = NULL;
servInf.pAuthInfo = &authinfo;
USES_CONVERSION;
servInf.pwszName = L"127.0.0.1";
hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
 
        RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_ACCESS_CONTROL, NULL);
ASSERT(SUCCEEDED(hr));
hr = CoCreateInstanceEx(CLSID_CRemoteTime, NULL, CLSCTX_REMOTE_SERVER, &servInf, 1, &qi);
if (FAILED(hr))
{
 TRACE(_T("CoCreateInstanceEx failed"));
 return false;;
}
if (FAILED(qi.hr))
{
 TRACE(_T("Failed to connect to server"));
 return false;;
}
//通过IUnkonwn指针去查询接口指针,返回IAccount指针
hr = pUnknown->QueryInterface(IID_ICRemoteTime,(void**)&pIRetime)

  例子2:

  

HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
 
        RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
 
 COAUTHIDENTITY us;
 
 us.User      = m_strName.AllocSysString();
 us.UserLength   = wcslen(us.User);
 us.Password    = m_strPassword.AllocSysString();
 us.PasswordLength = wcslen(us.Password);
 us.Domain     = m_strDomain.AllocSysString();
 us.DomainLength  = wcslen(us.Domain);
 us.Flags     = SEC_WINNT_AUTH_IDENTITY_UNICODE;
 
 COAUTHINFO auth;
 
 auth.dwAuthnSvc      = RPC_C_AUTHN_WINNT;
 auth.dwAuthzSvc      = RPC_C_AUTHZ_NONE;
 auth.pwszServerPrincName = NULL;
 auth.dwAuthnLevel     = RPC_C_AUTHN_LEVEL_CONNECT;
 auth.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
 auth.dwCapabilities    = EOAC_NONE;
 auth.pAuthIdentityData  = &us;
 
 COSERVERINFO si;
 MULTI_QI   qi;
 
 CComBSTR bstr = strComputer;
 LPWSTR name  = bstr.m_str;
 
 si.dwReserved1 = 0;
 si.pwszName  = name;
 si.pAuthInfo  = m_bAccess ? &auth : NULL;
 si.dwReserved2 = 0;
 
 IID iid = __uuidof(m_pIRemoteControl);
 qi.pIID = &iid;
 qi.pItf = NULL;
 
 do
 {
 
        hr = CoCreateInstanceEx(__uuidof(RemoteControl), NULL, CLSCTX_SERVER, &si, 1, &qi);
 
        if(FAILED(hr) || FAILED(qi.hr))
  
        break ;
 
 
        m_pIRemoteControl = (IRemoteControl *)qi.pItf;
 }while(0);

例子3:

  

HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
 
        RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
 
 COAUTHIDENTITY us;
 
 us.User      = m_strName.AllocSysString();
 us.UserLength   = wcslen(us.User);
 us.Password    = m_strPassword.AllocSysString();
 us.PasswordLength = wcslen(us.Password);
 us.Domain     = m_strDomain.AllocSysString();
 us.DomainLength  = wcslen(us.Domain);
 us.Flags     = SEC_WINNT_AUTH_IDENTITY_UNICODE;
 
 COAUTHINFO auth;
 
 auth.dwAuthnSvc      = RPC_C_AUTHN_WINNT;
 auth.dwAuthzSvc      = RPC_C_AUTHZ_NONE;
 auth.pwszServerPrincName = NULL;
 auth.dwAuthnLevel     = RPC_C_AUTHN_LEVEL_CONNECT;
 auth.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
 auth.dwCapabilities    = EOAC_NONE;
 auth.pAuthIdentityData  = &us;
 
MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
 COSERVERINFO si;
CComBSTR bstr = strComputer;
 LPWSTR name  = bstr.m_str;
 
 si.dwReserved1 = 0;
 si.pwszName  = name;
 si.pAuthInfo  = m_bAccess ? &auth : NULL;
 si.dwReserved2 = 0;
 
 
            hr = CoCreateInstanceEx(__uuidof(RemoteControl), NULL, CLSCTX_SERVER, &si, 1, &MultiQi);
 
 if(FAILED(hr))
 {
 
            MessageBox("创建对象实例失败!");
 
            return;
 }
 
 
            //通过IUnkonwn指针去查询接口指针,返回IAccount指针
 pUnknown = (IUnknown *) MultiQi.pItf;
hr = pUnknown->QueryInterface(IID_IAccount,(void**)&pAccount);
 if(FAILED(hr))
 {
 
              MessageBox("没有查找的接口指针!");
 
              return false;
 }
 pUnknown->Release();
http://www.warting.com/program/201110/37053_2.html
DCOM的实现与配置 系统已有一个用COM实现的ImageHelp.dll,现需要用DCOM重新实现,这样只需将dll放在实验室服务器上,客户端访问即可。服务器、客户端:WindowsXP SP2、VS2005实现步骤:一、实现服务器端程序ImageHelp.exe      VS2005创建一个ATL项目---向导选择“可执行文件(EXE)”,其它不改---项目增加一个“ATL简单对象”---“简单对象向导”中“选项”步骤中只将“接口”改为“自定义”,其它不改---在定义的接口中增加相关的方法,具体代码与ImageHelp.d 阅读详情

相关推荐

横向远程命令执行——DCOM

横向远程命令执行——DCOM1、 测试环境   DCOM(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象。DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95或者其后的版本上)。   此篇文章学习自3gstudent 域渗...

SheXinK’s Blog 2615

DCOM揭秘

http://www.pcdog.com/p/html/2004927/27920042820_1.htm Distributed COM --跨网络工作  DCOM代表的是“Distributed(分布式)”COM。在前面的部分中,我们已经讲解了运行在同一部计算机的COM客户和服务器。在这一部分,我们将讨论如何将它扩展到DCOM的领域和分布式计算。   大多数的COM编程者仅使用本地的“进程内”

天道酬勤 6624

单细胞数据分析实战:用scDblFinder快速搞定异质性双细胞检测(附完整R代码)

本文详细介绍了如何使用scDblFinder工具在单细胞RNA测序数据中精准识别异质性双细胞。通过完整的R代码示例,从环境准备、数据加载到核心分析流程和结果可视化,帮助研究人员高效解决双细胞检测问题,提升单细胞数据分析的准确性。scDblFinder的集成算法和鲁棒性设计使其成为处理单细胞数据中技术噪音的理想选择。

weixin_29098117的博客 426

DCOM服务端及客户端指定用户访问的安全设置

前言:对于分布式组件,在创建组件过程中常因权限问题导致出现“拒绝访问”,无法创建组件对象或使用接口。本人水平有限,只能谈些个人经验和体会,希望能抛砖引玉!   有两种方法能使得DCOM组件顺利创建和使用: 一、使用DCOMCNFG工具在服务器及客户机上对组件进行设置,这在《COM技术内幕》中有详细说明,使用这种方法要在两种情形下使用: 1、服务器与客户机必须在同一个域中且客

embededvc的专栏 4783

Altium AD20差分对走线设置方法

AD20的PCB差分对走线设置 1、原理图添加差分对 先在原理图中,讲要设置差分对的网络对添加网络标签。 名称前面的内容要相同,后缀用 _P 和 _N 加以区分。 最后使用 放置差分对,将两个网络标记。 2、编译,更改到PCB 编译,更新到PCB,确认差分对网络的出现。 验证更改,执行更改。将改动更新到PCB中。 PCB中,可通过 右下角 Panels - 调出 PCB 显示。来对已添加的差分对进行查看。 这时原本的走线有一点点小问题,需要删掉原来走线,设置差分对规则,并重新布线。

Mark_md的博客 3万+

VS Code + ESP-IDF:离线环境配置与示例工程编译全指南

本文详细介绍了在VS Code中离线配置ESP-IDF开发环境的完整流程。针对国内开发者常遇到的网络问题,指南提供了从Python环境准备、获取离线安装包、运行安装器到VS Code插件配置与示例工程编译的全套解决方案,确保环境搭建稳定、可控且高效。

weixin_28842367的博客 403

以远程计算机上的用户身份访问Com+应用

以远程计算机上的用户身份访问Com+应用DELPHI程序员开发com+应用的速度是非常快的,其主要原因是其较好地封装了com+的windows底层功能,开发人员通过较为简单的类继承就避开了复杂的com+底层技术细节,使开发人员将精力放在应用本身的功能上面。Delphi在封装com+应用时采取了许多折衷,在保留通用性的同时也避开了一些实现起来困难但是应用面不太广的com+底层特性。这些避开的特性中

liangma的专栏 5565

从数据到图片:手把手构建FMCW雷达人体行为识别数据集(行走、跌倒、喝水等6类动作)

本文详细解析了如何利用FMCW雷达构建人体行为识别数据集,涵盖行走、跌倒、喝水等6类动作。通过多普勒特征可视化、图像标准化处理和自动化流水线设计,将原始雷达信号转化为高质量时频图像数据集,为智能家居和健康监护等应用提供可靠数据支持。

weixin_30706691的博客 384

WMI--Windows API--RPC_C_AUTHN_LEVEL_xxx

原文来自MSDN Library for Visual Studio 2008 SP1,翻译部分仅为个人观点,想要看更多信息请看MSDN,如有版权问题请联系QQ 643166601,邮件643166601@qq.com   COM RPC_C_AUTHN_LEVEL_xxx See Also   Used in the security functions and interfac

Coperator 2495

华为OD机试2025C卷真题题库目录|机考题库 + 算法考点详解

本文整理华为OD 2025C卷 机试(机考)题库,提供高频考点精析与详细题目内容,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 3988

WPS文档中心和文档中台 operate 未授权访问漏洞(CVE-2025-0717)

WPS文档中心和文档中台的/open/v6/api/etcd/operate?key=/config/storage&method=get接口存在未授权访问漏洞,攻击者可通过该漏洞获取AK/SK密钥等信息,这些密钥通常用于系统内部认证和权限控制,泄露后可能导致攻击者进一步修改K8s配置、部署恶意容器或执行远程命令,最终实现对系统的完全控制。

李同學AI安全 904

用户名不同的计算机之间的调用dcom[整理]

DCOM是依赖于RPC服务的,是一种分布式远程过程(进程)调用,调用代码在远程主机上执行,使用远程主机的系统资源,因此要有远程主机所属的访问权限,一般来说访问用户应是远程主机本地用户或主机所属的域用户,所以 第一步是在远程主机或其域上注册(获得)一个有足够权限的用户,第二步是使用此用户令牌激活远程COM服务器,方法是使用CoInitializeSecurity & CoCreateIn

sailingcelery的专栏 1570

Android性能优化之Android Profiler

在移动应用开发中,打造一个流畅、省电且不卡顿的用户体验是至关重要的。然而,随着应用功能的日益复杂,内存泄漏、CPU暴涨、网络卡顿以及电量消耗过快等问题常常化身为隐形杀手,悄悄吞噬着用户体验。为了帮助开发者精准定位并解决这些性能瓶颈,谷歌在Android Studio中集成了一款强大的一站式性能分析工具Android Profiler。Android Profiler作为Android Studio内置的实时数据可视化工具,支持运行在Android 5.0及更高版本的设备上。

xiangzhihong8的专栏 202

win10系统下的DCOM配置

OPC远程访问OPCServer的DCOM配置保证OPCServer和Client在局域网内OPC环境配置DCOM配置如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...

weixin_43939712的博客 1万+

SAP BTP Trial 生命周期全解析:90 天试用、30 天活跃规则、Kyma 有效期与向 Free Tier 的顺滑迁移

摘要: SAP BTP免费试用账号(trial)提供90天有效期,需每30天登录一次保持活跃状态。Kyma运行时有效期仅14天,需特别注意重建。到期后数据不可恢复,建议将关键配置脚本化并保存。若需长期使用,可迁移至无时间限制的免费层(free tier)。文章详细拆解了试用生命周期规则,包括续期、删除机制,并针对CAP开发、集成套件和Kyma等场景提供实操建议,帮助用户规避常见误区,高效利用试用资源。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 368

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

(详细)OPC DCOM配置

最近在研究OPC协议,需要利用COM或DCOM的方式成功连接到OPC服务器获取流量,。废话不多说,直接上才艺。(有什么疑问可以评论区留言,共同探讨,共同成长哈)下面是我使用的客户端软件连接:链接: https://pan.baidu.com/s/1tvA8LFYlVpn5II8eaqEzCA 提取码: 2gip ,自己也可到Matrikon OPC官网去下载。

weixin_46810015的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Win7系统wincc之间OPC通讯DCOM配置,亲测有效!

移除Windows安全 为了能够建立DCOM通讯,需要关闭Windows防火墙。 添加用户账户 确保所有的计算机有相同的用户名和密码的组合. 用户名与密码的匹配在 OPC 的访问是必须的。注意: • 一个账户必须有一个用户名和密码. 如果一个账户没有密码是不能够建立通讯. • 每个计算机上拥有自己全部的用户账户和密码,一般情况下,每台计算机有一个账户,该账户的用户名密码保持一致即可。 运行dco...

wangmingchao27的博客 8702

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OPC DCOM快速配置

另外的一个问题是硬件的抢占,如串口,当一个使用了,其它的用户就无法再使用。a.在右边的Windows的窗口里,找到需要配置的OPC Server,右击该Server,在弹出的菜单里选择属性选项,进行OPC Server的特殊设置,在OPC Server的特殊设置里仅Identity标签的内容需要修改,其它标签项可参考DCOM的宽泛设置。DCOM配置完毕后机器需要重启。一旦DCOM的宽泛配置设置完,就需要关注Server的DCOM的特殊设置,这里的设置最终将会不同于其它的OPC Server的设置。

码灵的博客 3317

DCOM 遇到错误“登录失败: 未知的用户名或错误密码

DCOM 遇到错误“登录失败: 未知的用户名或错误密码DCOM 遇到错误“登录失败: 未知的用户名或错误密码并且无法登录到 ./IWAM_PC-HANXIN 上以运行服务器:{3D14228D-FBE1-11D0-995D-00C04FD919C1}在浏览器中:Server Application Error The server has encount

醒不来的专栏 2269

opc通讯配置、Dcom配置、wincc opc通讯配置(避坑版)

java研发一款获取wincc上位机数据的数据采集软件,因为第一次接触wincc数据采集经过几天学习发现采用wincc 的opc server连接是个人人为最好的方案,但对于想我这样刚接触opc的菜鸟来说两台主机间opc连接的dcom配置让人头痛啊,好在网上有大量资料可以钻研,本文章将详细介绍新手小白如何配置dcom。

weixin_43866483的博客 3万+

DCOM

2000下的配置:DCOM配置  如果在Windows NT环境下正常运行应用服务器,必须进行DCOM配置。配置方法如下:  1.运行NT服务器上的dcomcnfg程序,进行DCOM配置。  2.进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。  3.进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无

jian704的专栏 2527

通讯协议009——OPC DCOM快速配置说明

远程OPC访问必须在服务器和客户端两端配置DCOM。本文讲述如何正确配置 DCOM 的步骤并保证安全。

zhouwl72的博客 1480

IIS-DCOM“登录失败: 未知的用户名或错误密码“ 解决方法

 DCOM 遇到错误“登录失败: 未知的用户名或错误密码 并且无法登录到 ./IWAM_PC-HANXIN 上以运行服务器: {3D14228D-FBE1-11D0-995D-00C04FD919C1} 在浏览器中: Server Application Error The server has encountered an error while loading an application d

luzhuxi的专栏 5308

OPC DCOM的配置

1、关闭客户端和服务器的防火墙 2、配置DCOM   在开始->运行->dcomcnfg 进入dcom的配置画面     首先配置我的电脑(右键属性)如下图: 步骤和上面相同,这里不在详述,需要记住把那6个用户都需要加进去,并且权限都设置成最低即: 然后进行下面操作

yuan_hs_hf的专栏 1439

OPC 2.0 DCOM 配置

OPC服务器客户端配置 一、服务器和客户端配置 保证服务器、客户机用户名及密码一致,服务器端可以不使用这个用户登录,客户端必须以此用户登录。可使用“运行”程序,直接输入IP地址,如\\192.168.5.45直接登录服务器,目的是在服务器的某系统文件当中记录当前机器。只要建立一次这样的连接即可。 客户机服务器都要安装OPC程序。 1.1 运行dcomcnfg程序,进行DCOM配置 ...

3504
上一篇: 总结一下在VC中调用COM组件的方法+++VC调用远程COM+组件
下一篇: DCOM's advantage
embededvc
博客等级 码龄21年 176粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值