用户名不同的计算机之间的调用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();
Java工业自动化实战:5分钟搞定OPC DA通信的DCOM配置与避坑指南 本文为Java开发者提供了在工业自动化场景下快速配置OPC DA通信的实战指南。文章聚焦于复杂的DCOM配置,详细解析了如何在5分钟内完成用户创建、权限设置、防火墙配置等关键步骤,并提供了基于Utgard库的Java核心代码示例与高频错误码的避坑解决方案,帮助开发者高效打通Java与工业设备的数据通道。 阅读详情

相关推荐

跨越网络壁垒:OPC DA与DCOM的工业互联实战配置指南

本文详细介绍了在工业自动化中配置OPC DA与DCOM以实现跨网络通信的实战指南。通过系统环境检查、用户权限配置、防火墙设置和DCOM安全调整等步骤,解决常见的'拒绝访问'和'RPC服务器不可用'问题,确保OPC客户端与服务器的高效连接。

weixin_28738165的博客 373

DCOM揭秘

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

天道酬勤 6624

OPCEnum深度解析:从服务枚举到跨平台通讯的实战指南

本文深入解析OPCEnum的核心功能与工作原理,提供从服务枚举到跨平台通讯的实战指南。通过典型故障排查手册、性能优化技巧及无OPCEnum环境的替代方案,帮助解决工业自动化中的通讯问题,提升系统稳定性和效率。

weixin_30263277的博客 370

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

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

embededvc的专栏 2621

智能电网Web SCADA安全:从Web渗透到工控网络的攻击链深度解析

Web应用安全是网络安全的基础领域,其核心原理在于对用户输入验证、身份认证与会话管理、数据传输与存储等环节的风险控制。在工业控制系统(ICS)与监控与数据采集(SCADA)领域,随着数字化转型的深入,传统的封闭网络正通过Web技术实现远程监控与数据集成,这带来了巨大的技术价值与管理便利,也引入了全新的攻击面。特别是在智能电网等关键基础设施场景中,Web SCADA接口已成为连接信息网络与物理控制网络的关键节点。攻击者可能利用SQL注入、文件上传等经典Web漏洞获取初始立足点,进而通过内网横向移动,探测并利用

cqbh2011的博客 528

OPC DCOM配置(不需要客户机和服务器相同的用户名和密码)

最完整的网络OPC DCOM配置,不需要客户机和服务器具有相同的用户名和密码,在不同的Windows操作系统中测试100%连通,测试基于WinCC OPC DA服务器及客户端,OPC UA服务器和客户端配置更简单和安全,如有问题可联系

OPC工作记录整理——第二篇(OPC客户端运行环境配置)

OPC的环境配置还是比较简单的,但是需要注意几点问题:     1、首先是OPC客户端的用户名和密码需要和OPC服务器端的用户名和密码相同,而且需要赋予管理员权限,笔者也不是特别清楚这么做的原因是什么,但是如果没有这么配置的话,根本获取不到OPC的服务器列表。索性这样配置比不配置要好。     2、WINDOWS防火墙一定要关闭,在我的电脑(计算机)->控制面板->系统和安全->WINDOWS

GeekTech 1万+

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

WMI 远程连接问题解决方法

由于需要用取得远程计算机的信息,采用了WMI的方法来解决,但在应用时遇到了一些连接问题。程序时候是用C#来写的。 目标机和客户机都是运行的XP系统 连接部分的代码如下:             ConnectionOptions option = new Connectio

狩猪逮兔的专栏 3199

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 425

从入门到精通:MATEKH743 飞控全解析——MAVLink 接口软/硬件对接实战

MATEKH743飞控是基于STM32H743微控制器的无人机核心控制系统,具备强大计算能力和丰富外设接口。该飞控采用双核架构,集成高性能IMU、气压计等传感器,支持多种开源固件(Betaflight/INAV/ArduPilot),适用于FPV穿越机、固定翼及工业无人机。相比PX4等飞控,MATEKH743在性价比和DIY友好度上优势明显,同时支持MAVLink协议实现设备通信。未来发展方向包括集成更高精度传感器、优化电源管理以及拓展工业应用场景,持续推动无人机技术创新。

bother3000的博客 2285

工业通信:同一计算机上的OPC-Client如何与多个网络OPC-Server通讯?

opc-client连接多个网络opc

sanshengshi134的博客 5792

国产上位机软件突围:适配统信UOS/麒麟OS的跨平台开发技术与实践(2026年信创实战指南)

(航天科技集团CTO):“在信创战场上,1ms的延迟意味着1个卫星的控制失效。2026年,C#/.NET MAUI不是选择,而是我们守护卫星的‘生命线’。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 412

[转] WMI 远程连接问题解决方法

由于需要用取得远程计算机的信息,采用了WMI的方法来解决,但在应用时遇到了一些连接问题。程序时候是用C#来写的。 目标机和客户机都是运行的XP系统,连接部分的代码如下: ConnectionOptions option = new ConnectionOptions(); option.Username = "administrator"; option.P...

weixin_30258027的博客 269

槽型光电开关传感器原理图设计,已量产(光电传感器)

在嵌入式设备的位置限位、物料计数等场景中,槽型光电开关是性价比极高的传感器方案 —— 它通过遮挡发射器与接收器之间的光路实现电平切换,电路简单且抗干扰性优于漫反射式光耦。今天分享一个实际项目中落地的槽型光电开关检测电路,从器件选型到逻辑设计都做了简化适配,适合小批量原型或低成本产品的需求。

不脱发的程序猿 719

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 792

135端口入侵

通过135端口入侵实际上是利用RPC漏洞来攻击计算机的。一般情况下135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)   协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地 执行远程计算机上的代码;   使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。RPC本身在处理通过TCP/I

河北正定欢迎您-少占鱼 3110

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

怎么攻击一个打开的端口

通过135端口入侵实际上是利用RPC漏洞来攻击计算机的。一般情况下135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)   协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地 执行远程计算机上的代码;   使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。RPC本身在处理通过T

奔跑的路 7451

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1200

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

135端口入侵个人电脑

通过135端口入侵实际上是利用RPC漏洞来攻击计算机的。一般情况下135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)    协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地 执行远程计算机上的代码;    使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。RPC

WSN_IPv6的博客 7904

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WIN7、WIN8、WIN10家庭组共享

一直以来,WIN7、WIN8、WIN10之间局域网共享就存在很多头疼的问题,网上的资料也是各种方法都有,而这些方法中有些根本就是相互对立的。这给一些有共享需求的同学带来很大的困扰。经过自己的尝试和查资料,整理出一种比较完美的方案,现分享给大家。 与Windows共享有关的服务 UPnP Device Host: 允许 UPnP 设备宿主在此计算机上。如果停止此服务,则所有宿主的 UPnP...

α-geek的专栏 8650

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WMI远程链接服务器的常见问题

WMI远程链接服务器的常见问题

Rtuuuia的博客 2344
上一篇: "世上最经典的25句话[zt] "很有道理,人需要一些话时常在耳边提醒
下一篇: 真是没的说,我也深深感觉这样,现在什么也干不下去,总是心静不下来.想学习,看点书,总是被工作打断.闲下来总想多休息一下,放松一下
sailingcelery
博客等级 码龄25年 0粉丝 39原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值