我的程序采用RPC通信,在Win2K和Win2003下都运行正常,在XP运行失败,错误提示是“拒绝访问”,请问有人遇到过吗?该如何解决?

解决方案 »

  1.   

    系统安全性高,把你的PORT关了
    也在寻找对策
      

  2.   

    到家了
    解决问题的步骤:
    组件服务--计算机---我的电脑--鼠标右键--在TAB里选择COM---安全
    ---编辑限制(访问权限)---允许远程访问(你指定帐户)
    至于角色问题,看你的具体情况,上面已经可以解决你的问题了
    呵呵
      

  3.   

    loverx(烟花),照你的方法试过了,不行哦,还是拒绝访问。
      

  4.   


    肯定是没问题的XP SP2举例子说明吧:服务器:假设有个Arlene_cn帐户,在你的组件里配置角色,让这个Guest有权限创建        编辑限制(访问权限)---允许远程访问(这时候选中Arlene_cn) 
            编辑限制(访问和激活)---允许远程访问(这时候选中Arlene_cn)
    客户端:创建组件就用Arlene_cn帐户,使用CoCreateInstanceEx,我想这个没问题最简单的方法是:你可以对照2003,2000和XP sp2
                    看看他们在这里的设置有什么区别就可以了
      

  5.   

    偶也遇到这样的问题,在2000和xpsp1下没有问题,xpsp2里用name-pipe协议可以实现但是用tcp_ip和http就不行了,看了msdn说是sp2对于服务端的端口有限制,但是问题又来了。
      

  6.   

    请问loverx(烟花):
        既然是端口被限制,用name_pipe和tcp_ip都要通过端口,为什么name_pipe就没有影响???? 
    等待高人解惑
      

  7.   

    我找到解决的办法了,谢谢热心的loverx(烟花)。方法如下:
    1.单击“开始”,单击“运行”,键入“gpedit.msc”,然后单击“确定”,打开组策略。
    2.打开组策略后,选择“计算机配置->管理模板->系统->远过程调用->用于未验证的RPC客户端的限制”。
    3.右键单击“用于未验证的RPC客户端的限制”,在弹出的右键菜单里选择“属性”,弹出“属性”对话框。在“设置”属性页里选择“已启用”,“要应用的RPC运行时未验证的客户端限制”选择“无”。单击“确定”完成设置。经测试确定只有XP+SP2会有RPC通信“拒绝访问”的问题,其他Win2K及Win2K以上系统没有此问题,具体原因请参考微软中国网站上的文章“Microsoft Windows XP Service Pack 2 中的功能变更”中“第 2 部分:网络保护技术”。
      

  8.   

    还有呀,如果想用代码实现的话,应该是把server的RpcServerRegisterIf改成RpcServerRegisterIfEx吧?参数也要改,但是我改过之后没效果呀。是不是还可以通过注册表实现?细节是怎样的呢?
      

  9.   

    winter14(冬冬):我没有修改代码,也没有写过注册表。你最好读一下SP2的功能变更。代码如下:RPC_STATUS status = RpcServerUseProtseqEp(
    (unsigned char*)"ncacn_ip_tcp",
    8,
    (unsigned char*)RPCPORT,
    NULL
    );if (status == RPC_S_INVALID_ENDPOINT_FORMAT) 
    {
    return FALSE;
    }// register rpc interface
    status = RpcServerRegisterIf(
    xxxxx_v1_0_s_ifspec,
    NULL,
    NULL
    );
    ...
      

  10.   

    RPC 接口限制
    RPC 接口限制的作用是什么?
    在 Windows XP Service Pack 2 中,对远程过程调用 (RPC) 服务进行了许多更改,这样有助于在默认情况下确保 RPC 接口的安全性和减小 Windows XP 的攻击面。最重要的更改是添加了 RestrictRemoteClients 注册表项。该项修改系统上所有 RPC 接口的行为,并且在默认情况下避免对系统上 RPC 接口的远程匿名访问(但有一些例外)。其他更改包括 EnableAuthEpResolution 注册表项和三个新增的接口注册标志。此功能适用于哪些用户对象?
    该功能适用于 RPC 应用程序开发人员。系统管理员也应该熟悉对 RPC 进行的这一更改。Windows XP Service Pack 2 中对此功能添加了哪些新功能?
    RestrictRemoteClients 注册表项
    详细说明当使用 RpcServerRegisterIf 注册接口时,RPC 允许服务器应用程序限制对该接口的访问(通常通过安全回调)。RestrictRemoteClients 注册表项强制 RPC 对所有接口执行额外的安全检查,即使接口没有已注册的安全回调也是如此。使用命名管道协议序列 (ncacn_np) 的 RPC 客户端不受该部分中讨论的所有限制的影响。由于存在几个严重的向后兼容性问题,因此默认情况下不能限制命名管道协议序列。RestrictRemoteClients 注册表项可以包含三个 DWORD 值中的一个,这些值也可以借助编程方式在 rpcdce.h 中进行控制。如果该项不存在,则它等价于设置 DWORD=1 值 (RPC_RESTRICT_REMOTE_CLIENT_DEFAULT)。项参考项名:RestrictRemoteClients类型:DWORD 可通过用户界面进行配置:Yes。该项可以使用“组策略对象编辑器”进行配置。 默认值:1含义:该值是 Windows XP Service Pack 2 中的默认值。限制对所有 RPC 接口的访问。RPC 运行时拒绝所有的远程匿名调用。它对应于 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_DEFAULT。如果某个接口注册了安全回调并提供 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志,那么此限制不会应用到该接口。值:0含义:可使系统避开 RPC 接口限制。它对应于 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_NONE。施加相应的 RPC 限制完全是服务器应用程序的责任。该设置与以前版本 Windows 中的行为等效。值:2含义:RPC 运行时拒绝所有的远程匿名调用,不会有任何例外情况。它对应于 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_HIGH。如果设置了该值,系统将无法接收使用 RPC 的远程匿名调用。为什么此更改非常重要?它有助于缓解哪些威胁?如果您要求调用执行身份验证(甚至是级别相对较低的身份验证),则接口将更难于攻击。对于缓解依赖于可利用缓冲区溢出(可以通过匿名连接进行远程调用)的蠕虫的攻击,这是特别有用的。哪些功能发生变化?如果 RPC 应用程序期望从远程匿名 RPC 客户端接收调用,则该更改可能不允许应用程序正常运行。因此,如果设置了这个值,则使用 DCOM 的应用程序可能无法正常运行。与通过面向连接的协议进行调用相比,通过无连接协议 [例如 UDP 和 IPX(ncadg_ip_udp 和 ncadg_ipx)] 进行的安全 RPC 调用使用的安全性级别更低,所以出于该策略的目的,这些协议始终被认为是不安全的。因此,在 Windows XP SP2 中,默认情况下,通过无连接协议进行的 RPC 调用将会失败。 要允许使用无连接协议的 RPC 客户端调用,请将 RestrictRemoteClients 值设置为 0 (RPC_RESTRICT_REMOTE_CLIENT_NONE)。如何解决这些问题?可以选择以下三种方法解决这些问题。这些方法按优先顺序列出。• 要求 RPC 客户端在与服务器应用程序进行通信时使用 RPC 安全性。这是缓解安全威胁的最佳方法。
     
    • 通过在接口注册期间设置 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志,使接口不要求身份验证。这样,就会将 RPC 配置为仅允许匿名连接到应用程序的接口。
     
    • 通过将该注册表项设置为 RPC_RESTRICT_REMOTE_CLIENT_NONE (0),强制 RPC 显示与早期版本 Windows 相同的行为。之后,RPC 将接受到所有接口的匿名连接。如有可能,应该避免使用该方法,因为它会降低计算机的总体安全性。...
     
    更多内容请访问
    http://www.microsoft.com/china/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#EHAA
      

  11.   

    搂主,我知道你的意思,你看这里:您可能需要更改代码才能使用 Windows XP Service Pack 2。有关可能需要进行的应用程序更改的详细信息,请参阅前面有关 RestrictRemoteClients 和 EnableAuthEpResolution 的部分。
    我的意思就是如果不对组策略进行手动更改,是否可以通过代码修改来达到同样的效果。你觉得呢?
      

  12.   

    引用:
    含义:该值是 Windows XP Service Pack 2 中的默认值。限制对所有 RPC 接口的访问。RPC 运行时拒绝所有的远程匿名调用。它对应于 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_DEFAULT。如果某个接口注册了安全回调并提供 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志,那么此限制不会应用到该接口。-------------------------------------------------------------------------------------看样子,是要改程序的,我不知道怎样“注册了安全回调并提供 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志”,你试试看吧。