• dcom初步窥探一


    一、问题带入:

           从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,
    但是一旦分发出去实施远程访问时,就无法正常运行了。我自己有段时间在看到“拒绝访问”错误提示时
    会本能的头晕。其实认真追究起来,还是因为自己对windows安全技术了解不多造成的。多年来我一直
    没有发现国内有windows安全方面比较系统的资料和书籍,直到Keith Brownr的<windows安全性编程>
    中文版的出现。

    1、Delphi默认com+对象的远程激活

        Delph中远程com+对象激活一般通过TdispatchConnection及其子类来实现,实际代码中多用
    TDCOMConnection或TsocketConnectoion这两个组件,TDCOMConnection组件最终调用CoCreateInstanceEx
    创建com+对象。CoCreateInstanceEx(const clsid: TCLSID; unkOuter: IUnknown; dwClsCtx: Longint;
    ServerInfo:PCoServerInfo;dwCount: Longint; rgmqResults: PMultiQIArray): HResult。
    TDCOMConnection在调用CoCreateInstanceEx时为pCoServerInfo参数中的pAuthInfo传递了Null值,
    因此TdcomConnection在创建Com对象时使用的是本地计算机登录者的用户令牌。  

      假若A计算机上的登录用户Auser使用TDCOMConnection类连接远程计算机B上的com+对象,

    则B计算机会使用Auser的用户名/密码在B计算机上建立登录会话并最终创建com+对象。

      但是一台windows工作站上的本地用户只能在本地登录而无法在别的计算机上登录,

    因此A计算机上的Auser就无法在B工作站上建立登录会话,当然也就无法创建com+对象,

      此时远程工作站B会尝试用Guest帐户建立会话并使用该账户激活com+对象。

      在这种情况下,如果B工作站上的Guest账户没有启用或Guest没有激活com+对象的权限,

    你就会看见令人头晕的提示“拒绝访问”。

      看到这里你是不对现在网上最“流行”的dcom配置方法有所悟了呢。那个方法就是允许everyone访问、

    激活com对象、并且将“默认身份验证级别”设置成无。

      这种方法能够使你的com应用可以“用了”,但是,它可以上“任何人”访问。

    而且这种设置你将无法利用com+基于角色的安全访问控制功能。

  • 相关阅读:
    am335x gpio控制
    递归删除子目录下所有.la后缀文件
    linphone 在am335x的编译过程
    linphone 调试信息
    【POJ 3020】Antenna Placement(二分图匹配)
    【POJ 1062】昂贵的聘礼(最短路)
    【POJ 2485】Highways(Prim最小生成树)
    【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
    解决already defined in .obj 的问题(定义/声明的区别)
    C语言+SDL2 图形化编程
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/9587827.html
Copyright © 2020-2023  润新知